From 187d4b997daf9e4dba94ca067a6f13059f9f39a9 Mon Sep 17 00:00:00 2001 From: huangriya Date: Wed, 29 May 2024 16:51:48 +0800 Subject: [PATCH] [release] 5.0.8 --- .env | 2 +- .gitignore | 3 +- demo/jquery/index.html | 541 - demo/jquery/next.html | 551 - .../4.5.0/AnalysysAgent_Encrypt.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_Encrypt.min.js | 1 - .../AnalysysAgent_ExposurePoint.amd.min.js | 1 - .../4.5.0/AnalysysAgent_ExposurePoint.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_GBK.amd.min.js | 1 - .../jquery/sdk/4.5.0/AnalysysAgent_GBK.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_JS_SDK.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_JS_SDK.min.js | 1 - .../4.5.0/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1 - .../4.5.0/AnalysysAgent_JS_SDK_VISUAL.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_MPAAS.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_MPAAS.min.js | 1 - .../AnalysysAgent_PageViewStayTime.amd.min.js | 1 - .../AnalysysAgent_PageViewStayTime.min.js | 1 - .../sdk/5.0.4/AnalysysAgent_Encrypt.min.js | 9996 --------------- .../sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js | 3471 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js | 3467 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.min.js | 3475 ------ .../AnalysysAgent_JS_SDK_HEATMAP.min.css | 455 - .../5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1978 --- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css | 932 -- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js | 3599 ------ demo/jquery/sdk/5.0.4/index.d.ts | 131 - .../sdk/AnalysysAgent_Encrypt.amd.min.js | 1 - demo/jquery/sdk/AnalysysAgent_Encrypt.min.js | 9993 --------------- .../AnalysysAgent_ExposurePoint.amd.min.js | 1 - .../sdk/AnalysysAgent_ExposurePoint.min.js | 1 - demo/jquery/sdk/AnalysysAgent_GBK.amd.min.js | 1 - demo/jquery/sdk/AnalysysAgent_GBK.min.js | 1 - .../sdk/AnalysysAgent_JS_SDK.amd.min.js | 3107 ----- .../sdk/AnalysysAgent_JS_SDK.es6.min.js | 3103 ----- demo/jquery/sdk/AnalysysAgent_JS_SDK.min.js | 3111 ----- .../sdk/AnalysysAgent_JS_SDK_HEATMAP.min.css | 455 - .../sdk/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1968 --- .../sdk/AnalysysAgent_JS_SDK_VISUAL.min.css | 932 -- .../sdk/AnalysysAgent_JS_SDK_VISUAL.min.js | 3599 ------ .../jquery/sdk/AnalysysAgent_MPAAS.amd.min.js | 1 - demo/jquery/sdk/AnalysysAgent_MPAAS.min.js | 1 - .../AnalysysAgent_PageViewStayTime.amd.min.js | 1 - .../sdk/AnalysysAgent_PageViewStayTime.min.js | 1 - .../sdk/dist/AnalysysAgent_JS_SDK.amd.min.js | 15 - .../sdk/dist/AnalysysAgent_JS_SDK.es6.min.js | 15 - .../sdk/dist/AnalysysAgent_JS_SDK.min.js | 15 - demo/jquery/sdk/init.js | 99 - demo/jquery/style/console.js | 16 - demo/jquery/style/index.js | 157 - demo/jquery/style/plugIn/JSON.js | 506 - .../plugIn/bootstrap/css/bootstrap-theme.css | 587 - .../bootstrap/css/bootstrap-theme.css.map | 1 - .../bootstrap/css/bootstrap-theme.min.css | 5 - .../style/plugIn/bootstrap/css/bootstrap.css | 6800 ---------- .../plugIn/bootstrap/css/bootstrap.css.map | 1 - .../plugIn/bootstrap/css/bootstrap.min.css | 5 - .../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../style/plugIn/bootstrap/js/bootstrap.js | 2363 ---- .../plugIn/bootstrap/js/bootstrap.min.js | 7 - .../style/plugIn/bootstrap/js/jquery.min.js | 4 - demo/jquery/style/plugIn/bootstrap/js/npm.js | 13 - demo/react/.editorconfig | 16 - demo/react/.eslintignore | 8 - demo/react/.eslintrc.js | 8 - demo/react/.gitignore | 40 - demo/react/.husky/.gitignore | 1 - demo/react/.husky/commit-msg | 7 - demo/react/.husky/pre-commit | 4 - demo/react/.prettierignore | 23 - demo/react/.prettierrc.js | 5 - demo/react/.stylelintrc.js | 3 - demo/react/.vscode/extensions.json | 8 - demo/react/.vscode/settings.json | 5 - demo/react/README.md | 57 - demo/react/config/config.dev.ts | 15 - demo/react/config/config.ts | 358 - demo/react/config/defaultSettings.ts | 21 - demo/react/config/oneapi.json | 593 - demo/react/config/proxy.ts | 34 - demo/react/config/routes.ts | 53 - demo/react/jest.config.js | 9 - demo/react/jsconfig.json | 11 - demo/react/mock/listTableList.ts | 174 - demo/react/mock/notices.ts | 107 - demo/react/mock/route.ts | 5 - demo/react/mock/user.ts | 203 - demo/react/package.json | 113 - demo/react/playwright.config.ts | 22 - demo/react/public/CNAME | 1 - demo/react/public/favicon.ico | Bin 4286 -> 0 bytes demo/react/public/icons/icon-128x128.png | Bin 1329 -> 0 bytes demo/react/public/icons/icon-192x192.png | Bin 1856 -> 0 bytes demo/react/public/icons/icon-512x512.png | Bin 5082 -> 0 bytes demo/react/public/logo.svg | 1 - demo/react/public/pro_icon.svg | 5 - .../sdk/5.0.0/AnalysysAgent_Encrypt.min.js | 10266 ---------------- .../sdk/5.0.0/AnalysysAgent_JS_SDK.amd.min.js | 15 - .../sdk/5.0.0/AnalysysAgent_JS_SDK.es6.min.js | 15 - .../sdk/5.0.0/AnalysysAgent_JS_SDK.min.js | 15 - .../AnalysysAgent_JS_SDK_HEATMAP.min.css | 455 - .../5.0.0/AnalysysAgent_JS_SDK_HEATMAP.min.js | 16 - .../5.0.0/AnalysysAgent_JS_SDK_VISUAL.min.css | 932 -- .../5.0.0/AnalysysAgent_JS_SDK_VISUAL.min.js | 1 - .../sdk/5.0.4/AnalysysAgent_Encrypt.min.js | 9996 --------------- .../sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js | 3471 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js | 3467 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.min.js | 3475 ------ .../AnalysysAgent_JS_SDK_HEATMAP.min.css | 455 - .../5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1978 --- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css | 932 -- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js | 3599 ------ demo/react/public/sdk/5.0.4/index.d.ts | 131 - demo/react/src/access.ts | 9 - demo/react/src/app.tsx | 108 - demo/react/src/components/Footer/index.tsx | 41 - .../src/components/HeaderDropdown/index.less | 16 - .../src/components/HeaderDropdown/index.tsx | 17 - .../src/components/HeaderSearch/index.less | 25 - .../src/components/HeaderSearch/index.tsx | 102 - .../src/components/NoticeIcon/NoticeIcon.tsx | 126 - .../src/components/NoticeIcon/NoticeList.less | 103 - .../src/components/NoticeIcon/NoticeList.tsx | 113 - .../src/components/NoticeIcon/index.less | 35 - .../react/src/components/NoticeIcon/index.tsx | 153 - .../RightContent/AvatarDropdown.tsx | 103 - .../src/components/RightContent/index.less | 84 - .../src/components/RightContent/index.tsx | 68 - demo/react/src/components/index.md | 272 - demo/react/src/e2e/baseLayout.e2e.spec.ts | 45 - demo/react/src/global.less | 57 - demo/react/src/global.tsx | 91 - demo/react/src/locales/bn-BD.ts | 26 - demo/react/src/locales/bn-BD/component.ts | 5 - demo/react/src/locales/bn-BD/globalHeader.ts | 17 - demo/react/src/locales/bn-BD/menu.ts | 52 - demo/react/src/locales/bn-BD/pages.ts | 70 - demo/react/src/locales/bn-BD/pwa.ts | 7 - demo/react/src/locales/bn-BD/settingDrawer.ts | 31 - demo/react/src/locales/bn-BD/settings.ts | 59 - demo/react/src/locales/en-US.ts | 25 - demo/react/src/locales/en-US/component.ts | 5 - demo/react/src/locales/en-US/globalHeader.ts | 17 - demo/react/src/locales/en-US/menu.ts | 52 - demo/react/src/locales/en-US/pages.ts | 70 - demo/react/src/locales/en-US/pwa.ts | 6 - demo/react/src/locales/en-US/settingDrawer.ts | 31 - demo/react/src/locales/en-US/settings.ts | 60 - demo/react/src/locales/fa-IR.ts | 24 - demo/react/src/locales/fa-IR/component.ts | 5 - demo/react/src/locales/fa-IR/globalHeader.ts | 17 - demo/react/src/locales/fa-IR/menu.ts | 52 - demo/react/src/locales/fa-IR/pages.ts | 67 - demo/react/src/locales/fa-IR/pwa.ts | 7 - demo/react/src/locales/fa-IR/settingDrawer.ts | 32 - demo/react/src/locales/fa-IR/settings.ts | 60 - demo/react/src/locales/id-ID.ts | 25 - demo/react/src/locales/id-ID/component.ts | 5 - demo/react/src/locales/id-ID/globalHeader.ts | 17 - demo/react/src/locales/id-ID/menu.ts | 52 - demo/react/src/locales/id-ID/pages.ts | 70 - demo/react/src/locales/id-ID/pwa.ts | 7 - demo/react/src/locales/id-ID/settingDrawer.ts | 32 - demo/react/src/locales/id-ID/settings.ts | 60 - demo/react/src/locales/ja-JP.ts | 24 - demo/react/src/locales/ja-JP/component.ts | 5 - demo/react/src/locales/ja-JP/globalHeader.ts | 17 - demo/react/src/locales/ja-JP/menu.ts | 52 - demo/react/src/locales/ja-JP/pages.ts | 67 - demo/react/src/locales/ja-JP/pwa.ts | 7 - demo/react/src/locales/ja-JP/settingDrawer.ts | 31 - demo/react/src/locales/ja-JP/settings.ts | 59 - demo/react/src/locales/pt-BR.ts | 22 - demo/react/src/locales/pt-BR/component.ts | 5 - demo/react/src/locales/pt-BR/globalHeader.ts | 18 - demo/react/src/locales/pt-BR/menu.ts | 52 - demo/react/src/locales/pt-BR/pages.ts | 70 - demo/react/src/locales/pt-BR/pwa.ts | 7 - demo/react/src/locales/pt-BR/settingDrawer.ts | 32 - demo/react/src/locales/pt-BR/settings.ts | 60 - demo/react/src/locales/zh-CN.ts | 25 - demo/react/src/locales/zh-CN/component.ts | 5 - demo/react/src/locales/zh-CN/globalHeader.ts | 17 - demo/react/src/locales/zh-CN/menu.ts | 52 - demo/react/src/locales/zh-CN/pages.ts | 67 - demo/react/src/locales/zh-CN/pwa.ts | 6 - demo/react/src/locales/zh-CN/settingDrawer.ts | 31 - demo/react/src/locales/zh-CN/settings.ts | 55 - demo/react/src/locales/zh-TW.ts | 20 - demo/react/src/locales/zh-TW/component.ts | 5 - demo/react/src/locales/zh-TW/globalHeader.ts | 17 - demo/react/src/locales/zh-TW/menu.ts | 52 - demo/react/src/locales/zh-TW/pwa.ts | 6 - demo/react/src/locales/zh-TW/settingDrawer.ts | 31 - demo/react/src/locales/zh-TW/settings.ts | 55 - demo/react/src/manifest.json | 22 - demo/react/src/pages/404.tsx | 18 - demo/react/src/pages/Admin.tsx | 45 - .../pages/TableList/components/UpdateForm.tsx | 209 - demo/react/src/pages/TableList/index.tsx | 393 - demo/react/src/pages/Welcome.less | 8 - demo/react/src/pages/Welcome.tsx | 66 - .../src/pages/account/center/Center.less | 86 - demo/react/src/pages/account/center/_mock.ts | 243 - .../center/components/Applications/index.less | 51 - .../center/components/Applications/index.tsx | 123 - .../components/ArticleListContent/index.less | 38 - .../components/ArticleListContent/index.tsx | 28 - .../center/components/Articles/index.less | 12 - .../center/components/Articles/index.tsx | 63 - .../center/components/AvatarList/index.less | 50 - .../center/components/AvatarList/index.tsx | 84 - .../center/components/Projects/index.less | 54 - .../center/components/Projects/index.tsx | 49 - demo/react/src/pages/account/center/data.d.ts | 75 - demo/react/src/pages/account/center/index.tsx | 210 - .../react/src/pages/account/center/service.ts | 14 - .../react/src/pages/account/settings/_mock.ts | 79 - .../account/settings/components/BaseView.less | 65 - .../account/settings/components/PhoneView.tsx | 42 - .../account/settings/components/base.tsx | 230 - .../account/settings/components/binding.tsx | 46 - .../settings/components/notification.tsx | 44 - .../account/settings/components/security.tsx | 62 - .../src/pages/account/settings/data.d.ts | 43 - .../account/settings/geographic/city.json | 1784 --- .../account/settings/geographic/province.json | 138 - .../src/pages/account/settings/index.tsx | 111 - .../src/pages/account/settings/service.ts | 18 - .../src/pages/account/settings/style.less | 93 - .../src/pages/dashboard/analysis/_mock.ts | 210 - .../analysis/components/Charts/Bar/index.tsx | 133 - .../components/Charts/ChartCard/index.less | 75 - .../components/Charts/ChartCard/index.tsx | 97 - .../components/Charts/Field/index.less | 17 - .../components/Charts/Field/index.tsx | 17 - .../components/Charts/Gauge/index.tsx | 179 - .../components/Charts/MiniArea/index.tsx | 131 - .../components/Charts/MiniBar/index.tsx | 54 - .../components/Charts/MiniProgress/index.tsx | 41 - .../analysis/components/Charts/Pie/index.tsx | 309 - .../components/Charts/TagCloud/index.tsx | 212 - .../components/Charts/TimelineChart/index.tsx | 132 - .../components/Charts/WaterWave/index.tsx | 235 - .../analysis/components/Charts/autoHeight.tsx | 79 - .../analysis/components/Charts/index.less | 19 - .../analysis/components/Charts/index.tsx | 13 - .../analysis/components/IntroduceRow.tsx | 135 - .../analysis/components/NumberInfo/index.less | 68 - .../analysis/components/NumberInfo/index.tsx | 62 - .../analysis/components/OfflineData.tsx | 76 - .../analysis/components/PageLoading/index.tsx | 9 - .../analysis/components/ProportionSales.tsx | 76 - .../analysis/components/SalesCard.tsx | 189 - .../analysis/components/TopSearch.tsx | 113 - .../analysis/components/Trend/index.less | 37 - .../analysis/components/Trend/index.tsx | 42 - .../src/pages/dashboard/analysis/data.d.ts | 46 - .../src/pages/dashboard/analysis/index.tsx | 162 - .../src/pages/dashboard/analysis/service.ts | 6 - .../src/pages/dashboard/analysis/style.less | 189 - .../pages/dashboard/analysis/utils/Yuan.tsx | 33 - .../pages/dashboard/analysis/utils/utils.less | 50 - .../pages/dashboard/analysis/utils/utils.ts | 52 - .../src/pages/dashboard/monitor/_mock.ts | 14 - .../monitor/components/ActiveChart/index.less | 51 - .../monitor/components/ActiveChart/index.tsx | 90 - .../monitor/components/Charts/Gauge/index.tsx | 180 - .../components/Charts/MiniArea/index.tsx | 131 - .../monitor/components/Charts/Pie/index.tsx | 310 - .../components/Charts/TagCloud/index.tsx | 211 - .../components/Charts/WaterWave/index.tsx | 235 - .../monitor/components/Charts/autoHeight.tsx | 79 - .../monitor/components/Map/index.tsx | 145 - .../src/pages/dashboard/monitor/data.d.ts | 5 - .../src/pages/dashboard/monitor/index.tsx | 152 - .../src/pages/dashboard/monitor/service.ts | 6 - .../src/pages/dashboard/monitor/style.less | 21 - .../src/pages/dashboard/workplace/_mock.ts | 410 - .../components/EditableLinkGroup/index.less | 16 - .../components/EditableLinkGroup/index.tsx | 47 - .../workplace/components/Radar/autoHeight.tsx | 79 - .../workplace/components/Radar/index.tsx | 219 - .../src/pages/dashboard/workplace/data.d.ts | 111 - .../src/pages/dashboard/workplace/index.tsx | 242 - .../src/pages/dashboard/workplace/service.ts | 14 - .../src/pages/dashboard/workplace/style.less | 250 - demo/react/src/pages/document.ejs | 262 - .../editor/flow/common/IconFont/index.ts | 7 - .../EditorContextMenu/FlowContextMenu.tsx | 34 - .../EditorContextMenu/KoniContextMenu.tsx | 3 - .../components/EditorContextMenu/MenuItem.tsx | 27 - .../EditorContextMenu/MindContextMenu.tsx | 22 - .../components/EditorContextMenu/index.less | 41 - .../components/EditorContextMenu/index.tsx | 5 - .../EditorDetailPanel/DetailForm.tsx | 114 - .../EditorDetailPanel/FlowDetailPanel.tsx | 27 - .../EditorDetailPanel/KoniDetailPanel.tsx | 3 - .../EditorDetailPanel/MindDetailPanel.tsx | 18 - .../components/EditorDetailPanel/index.less | 6 - .../components/EditorDetailPanel/index.tsx | 5 - .../EditorItemPanel/FlowItemPanel.tsx | 53 - .../EditorItemPanel/KoniItemPanel.tsx | 49 - .../components/EditorItemPanel/index.less | 19 - .../flow/components/EditorItemPanel/index.tsx | 4 - .../flow/components/EditorMinimap/index.tsx | 10 - .../components/EditorToolbar/FlowToolbar.tsx | 29 - .../components/EditorToolbar/KoniToolbar.tsx | 3 - .../components/EditorToolbar/MindToolbar.tsx | 24 - .../EditorToolbar/ToolbarButton.tsx | 31 - .../flow/components/EditorToolbar/index.less | 40 - .../flow/components/EditorToolbar/index.tsx | 5 - demo/react/src/pages/editor/flow/index.less | 48 - demo/react/src/pages/editor/flow/index.tsx | 37 - .../editor/koni/common/IconFont/index.ts | 7 - .../EditorContextMenu/FlowContextMenu.tsx | 34 - .../EditorContextMenu/KoniContextMenu.tsx | 3 - .../components/EditorContextMenu/MenuItem.tsx | 27 - .../EditorContextMenu/MindContextMenu.tsx | 22 - .../components/EditorContextMenu/index.less | 40 - .../components/EditorContextMenu/index.tsx | 5 - .../EditorDetailPanel/DetailForm.tsx | 114 - .../EditorDetailPanel/FlowDetailPanel.tsx | 27 - .../EditorDetailPanel/KoniDetailPanel.tsx | 3 - .../EditorDetailPanel/MindDetailPanel.tsx | 18 - .../components/EditorDetailPanel/index.less | 6 - .../components/EditorDetailPanel/index.tsx | 5 - .../EditorItemPanel/FlowItemPanel.tsx | 53 - .../EditorItemPanel/KoniItemPanel.tsx | 49 - .../components/EditorItemPanel/index.less | 19 - .../koni/components/EditorItemPanel/index.tsx | 4 - .../koni/components/EditorMinimap/index.tsx | 10 - .../components/EditorToolbar/FlowToolbar.tsx | 29 - .../components/EditorToolbar/KoniToolbar.tsx | 3 - .../components/EditorToolbar/MindToolbar.tsx | 24 - .../EditorToolbar/ToolbarButton.tsx | 31 - .../koni/components/EditorToolbar/index.less | 39 - .../koni/components/EditorToolbar/index.tsx | 5 - demo/react/src/pages/editor/koni/index.less | 56 - demo/react/src/pages/editor/koni/index.tsx | 37 - .../editor/mind/common/IconFont/index.ts | 7 - .../EditorContextMenu/FlowContextMenu.tsx | 34 - .../EditorContextMenu/KoniContextMenu.tsx | 3 - .../components/EditorContextMenu/MenuItem.tsx | 27 - .../EditorContextMenu/MindContextMenu.tsx | 22 - .../components/EditorContextMenu/index.less | 40 - .../components/EditorContextMenu/index.tsx | 5 - .../EditorDetailPanel/DetailForm.tsx | 114 - .../EditorDetailPanel/FlowDetailPanel.tsx | 27 - .../EditorDetailPanel/KoniDetailPanel.tsx | 3 - .../EditorDetailPanel/MindDetailPanel.tsx | 18 - .../components/EditorDetailPanel/index.less | 6 - .../components/EditorDetailPanel/index.tsx | 5 - .../EditorItemPanel/FlowItemPanel.tsx | 53 - .../EditorItemPanel/KoniItemPanel.tsx | 49 - .../components/EditorItemPanel/index.less | 19 - .../mind/components/EditorItemPanel/index.tsx | 4 - .../mind/components/EditorMinimap/index.tsx | 10 - .../components/EditorToolbar/FlowToolbar.tsx | 29 - .../components/EditorToolbar/KoniToolbar.tsx | 3 - .../components/EditorToolbar/MindToolbar.tsx | 24 - .../EditorToolbar/ToolbarButton.tsx | 31 - .../mind/components/EditorToolbar/index.less | 40 - .../mind/components/EditorToolbar/index.tsx | 5 - demo/react/src/pages/editor/mind/index.less | 56 - demo/react/src/pages/editor/mind/index.tsx | 34 - .../src/pages/editor/mind/worldCup2018.json | 129 - demo/react/src/pages/exception/403/index.tsx | 18 - demo/react/src/pages/exception/404/index.tsx | 18 - demo/react/src/pages/exception/500/index.tsx | 18 - .../src/pages/form/advanced-form/_mock.ts | 8 - .../advanced-form/components/TableForm.tsx | 257 - .../src/pages/form/advanced-form/index.tsx | 386 - .../src/pages/form/advanced-form/service.ts | 8 - .../src/pages/form/advanced-form/style.less | 65 - demo/react/src/pages/form/basic-form/_mock.ts | 8 - .../react/src/pages/form/basic-form/index.tsx | 188 - .../src/pages/form/basic-form/service.ts | 8 - .../src/pages/form/basic-form/style.less | 6 - demo/react/src/pages/form/step-form/_mock.ts | 8 - demo/react/src/pages/form/step-form/data.d.ts | 9 - demo/react/src/pages/form/step-form/index.tsx | 196 - .../react/src/pages/form/step-form/service.ts | 8 - .../react/src/pages/form/step-form/style.less | 11 - demo/react/src/pages/list/basic-list/_mock.ts | 160 - .../basic-list/components/OperationModal.tsx | 105 - .../react/src/pages/list/basic-list/data.d.ts | 29 - .../react/src/pages/list/basic-list/index.tsx | 246 - .../src/pages/list/basic-list/service.ts | 50 - .../src/pages/list/basic-list/style.less | 195 - .../pages/list/basic-list/utils/utils.less | 50 - demo/react/src/pages/list/card-list/_mock.ts | 120 - demo/react/src/pages/list/card-list/data.d.ts | 29 - demo/react/src/pages/list/card-list/index.tsx | 104 - .../react/src/pages/list/card-list/service.ts | 10 - .../react/src/pages/list/card-list/style.less | 107 - .../src/pages/list/card-list/utils/utils.less | 50 - .../pages/list/search/applications/_mock.ts | 119 - .../components/StandardFormRow/index.less | 87 - .../components/StandardFormRow/index.tsx | 39 - .../components/TagSelect/index.less | 34 - .../components/TagSelect/index.tsx | 142 - .../pages/list/search/applications/data.d.ts | 33 - .../pages/list/search/applications/index.tsx | 195 - .../pages/list/search/applications/service.ts | 10 - .../pages/list/search/applications/style.less | 50 - .../list/search/applications/utils/utils.less | 50 - .../src/pages/list/search/articles/_mock.ts | 119 - .../components/ArticleListContent/index.less | 38 - .../components/ArticleListContent/index.tsx | 29 - .../components/StandardFormRow/index.less | 88 - .../components/StandardFormRow/index.tsx | 39 - .../articles/components/TagSelect/index.less | 33 - .../articles/components/TagSelect/index.tsx | 142 - .../src/pages/list/search/articles/data.d.ts | 32 - .../src/pages/list/search/articles/index.tsx | 224 - .../src/pages/list/search/articles/service.ts | 10 - .../src/pages/list/search/articles/style.less | 31 - demo/react/src/pages/list/search/index.tsx | 87 - .../src/pages/list/search/projects/_mock.ts | 118 - .../projects/components/AvatarList/index.less | 50 - .../projects/components/AvatarList/index.tsx | 84 - .../components/StandardFormRow/index.less | 88 - .../components/StandardFormRow/index.tsx | 39 - .../projects/components/TagSelect/index.less | 33 - .../projects/components/TagSelect/index.tsx | 142 - .../src/pages/list/search/projects/data.d.ts | 32 - .../src/pages/list/search/projects/index.tsx | 135 - .../src/pages/list/search/projects/service.ts | 10 - .../src/pages/list/search/projects/style.less | 55 - .../list/search/projects/utils/utils.less | 50 - demo/react/src/pages/list/table-list/_mock.ts | 177 - .../list/table-list/components/CreateForm.tsx | 25 - .../list/table-list/components/UpdateForm.tsx | 159 - .../react/src/pages/list/table-list/data.d.ts | 36 - .../react/src/pages/list/table-list/index.tsx | 320 - .../src/pages/list/table-list/service.ts | 56 - .../react/src/pages/profile/advanced/_mock.ts | 81 - .../src/pages/profile/advanced/data.d.ts | 32 - .../src/pages/profile/advanced/index.tsx | 356 - .../src/pages/profile/advanced/service.ts | 5 - .../src/pages/profile/advanced/style.less | 60 - demo/react/src/pages/profile/basic/_mock.ts | 92 - demo/react/src/pages/profile/basic/data.d.ts | 17 - demo/react/src/pages/profile/basic/index.tsx | 193 - demo/react/src/pages/profile/basic/service.ts | 11 - demo/react/src/pages/profile/basic/style.less | 8 - demo/react/src/pages/result/fail/index.less | 11 - demo/react/src/pages/result/fail/index.tsx | 50 - .../react/src/pages/result/success/index.less | 15 - demo/react/src/pages/result/success/index.tsx | 71 - demo/react/src/pages/user/Login/index.less | 50 - demo/react/src/pages/user/Login/index.tsx | 286 - .../src/pages/user/register-result/index.tsx | 42 - .../src/pages/user/register-result/style.less | 23 - demo/react/src/pages/user/register/_mock.ts | 10 - demo/react/src/pages/user/register/index.tsx | 285 - demo/react/src/pages/user/register/service.ts | 22 - demo/react/src/pages/user/register/style.less | 60 - demo/react/src/service-worker.js | 65 - demo/react/src/services/ant-design-pro/api.ts | 85 - .../src/services/ant-design-pro/index.ts | 10 - .../src/services/ant-design-pro/login.ts | 21 - .../src/services/ant-design-pro/typings.d.ts | 101 - demo/react/src/services/swagger/index.ts | 12 - demo/react/src/services/swagger/pet.ts | 166 - demo/react/src/services/swagger/store.ts | 54 - demo/react/src/services/swagger/typings.d.ts | 52 - demo/react/src/services/swagger/user.ts | 114 - demo/react/src/typings.d.ts | 24 - demo/react/tests/run-tests.js | 47 - demo/react/tests/setupTests.js | 10 - demo/react/tsconfig.json | 42 - demo/vue/.gitignore | 24 - demo/vue/.vscode/extensions.json | 3 - demo/vue/README.md | 16 - demo/vue/index.html | 168 - demo/vue/package.json | 26 - .../4.5.0/AnalysysAgent_Encrypt.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_Encrypt.min.js | 1 - .../AnalysysAgent_ExposurePoint.amd.min.js | 1 - .../4.5.0/AnalysysAgent_ExposurePoint.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_GBK.amd.min.js | 1 - .../public/sdk/4.5.0/AnalysysAgent_GBK.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_JS_SDK.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_JS_SDK.min.js | 1 - .../4.5.0/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1 - .../4.5.0/AnalysysAgent_JS_SDK_VISUAL.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_MPAAS.amd.min.js | 1 - .../sdk/4.5.0/AnalysysAgent_MPAAS.min.js | 1 - .../AnalysysAgent_PageViewStayTime.amd.min.js | 1 - .../AnalysysAgent_PageViewStayTime.min.js | 1 - .../4.5.5/AnalysysAgent_Encrypt.amd.min.js | 1 - .../4.5.5/AnalysysAgent_Encrypt.es6.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_Encrypt.min.js | 1 - .../AnalysysAgent_ExposurePoint.amd.min.js | 1 - .../AnalysysAgent_ExposurePoint.es6.min.js | 1 - .../4.5.5/AnalysysAgent_ExposurePoint.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_GBK.amd.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_GBK.es6.min.js | 1 - .../public/sdk/4.5.5/AnalysysAgent_GBK.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_JS_SDK.amd.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_JS_SDK.es6.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_JS_SDK.min.js | 1 - .../4.5.5/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1 - .../4.5.5/AnalysysAgent_JS_SDK_VISUAL.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_MPAAS.amd.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_MPAAS.es6.min.js | 1 - .../sdk/4.5.5/AnalysysAgent_MPAAS.min.js | 1 - .../AnalysysAgent_PageViewStayTime.amd.min.js | 1 - .../AnalysysAgent_PageViewStayTime.es6.min.js | 1 - .../AnalysysAgent_PageViewStayTime.min.js | 1 - .../sdk/5.0.4/AnalysysAgent_Encrypt.min.js | 9996 --------------- .../sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js | 3471 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js | 3467 ------ .../sdk/5.0.4/AnalysysAgent_JS_SDK.min.js | 3475 ------ .../AnalysysAgent_JS_SDK_HEATMAP.min.css | 455 - .../5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js | 1978 --- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css | 932 -- .../5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js | 3599 ------ demo/vue/public/sdk/5.0.4/index.d.ts | 131 - demo/vue/public/vite.svg | 1 - demo/vue/src/App.vue | 19 - demo/vue/src/assets/vue.svg | 1 - demo/vue/src/components/HelloWorld.vue | 38 - demo/vue/src/components/layout/head.vue | 52 - demo/vue/src/main.ts | 33 - demo/vue/src/router.ts | 18 - demo/vue/src/style.css | 19 - demo/vue/src/type.d.ts | 5 - demo/vue/src/utils/analysys.ts | 229 - demo/vue/src/views/index/index.vue | 112 - demo/vue/src/views/product/index.vue | 5 - demo/vue/src/views/sdk/index.vue | 158 - demo/vue/src/vite-env.d.ts | 8 - demo/vue/tsconfig.json | 19 - demo/vue/tsconfig.node.json | 9 - demo/vue/vite.config.ts | 13 - dist/AnalysysAgent_ExposurePoint.min.js | 2 +- dist/AnalysysAgent_JS_SDK.amd.min.js | 2 +- dist/AnalysysAgent_JS_SDK.es6.min.js | 2 +- dist/AnalysysAgent_JS_SDK.min.js | 2 +- dist/AnalysysAgent_JS_SDK_HEATMAP.min.css | 898 +- dist/AnalysysAgent_JS_SDK_HEATMAP.min.js | 2 +- dist/AnalysysAgent_JS_SDK_VISUAL.min.css | 452 +- dist/AnalysysAgent_JS_SDK_VISUAL.min.js | 2 +- package.json | 10 +- rollup.config.js | 2 +- src/module/autoTrigger/index.ts | 2 +- src/module/methods/alias.ts | 8 +- src/module/methods/visual.ts | 28 +- src/module/sendData/index.ts | 22 +- src/plugIn/exposure/index.ts | 4 +- src/plugIn/exposure/utils/index.ts | 3 +- src/plugIn/heatmap/index.ts | 1 + src/plugIn/heatmap/view/heatElement/index.ts | 2 +- src/plugIn/heatmap/view/heatmap/index.ts | 2 +- src/store/clickElement.ts | 4 +- src/store/pathParams.ts | 16 +- src/utils/browser/element.ts | 142 +- src/utils/index.ts | 6 +- src/utils/path/index.ts | 16 +- src/utils/type/index.ts | 4 + tsconfig.json | 2 +- 568 files changed, 1017 insertions(+), 161359 deletions(-) delete mode 100755 demo/jquery/index.html delete mode 100755 demo/jquery/next.html delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_Encrypt.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_ExposurePoint.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_ExposurePoint.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_GBK.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_GBK.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_MPAAS.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_MPAAS.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_PageViewStayTime.amd.min.js delete mode 100644 demo/jquery/sdk/4.5.0/AnalysysAgent_PageViewStayTime.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css delete mode 100644 demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/jquery/sdk/5.0.4/index.d.ts delete mode 100644 demo/jquery/sdk/AnalysysAgent_Encrypt.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_ExposurePoint.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_ExposurePoint.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_GBK.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_GBK.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.css delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.css delete mode 100644 demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_MPAAS.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_MPAAS.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_PageViewStayTime.amd.min.js delete mode 100644 demo/jquery/sdk/AnalysysAgent_PageViewStayTime.min.js delete mode 100644 demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/jquery/sdk/init.js delete mode 100755 demo/jquery/style/console.js delete mode 100755 demo/jquery/style/index.js delete mode 100755 demo/jquery/style/plugIn/JSON.js delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css.map delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.min.css delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap.css delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap.css.map delete mode 100755 demo/jquery/style/plugIn/bootstrap/css/bootstrap.min.css delete mode 100755 demo/jquery/style/plugIn/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100755 demo/jquery/style/plugIn/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100755 demo/jquery/style/plugIn/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100755 demo/jquery/style/plugIn/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100755 demo/jquery/style/plugIn/bootstrap/fonts/glyphicons-halflings-regular.woff2 delete mode 100755 demo/jquery/style/plugIn/bootstrap/js/bootstrap.js delete mode 100755 demo/jquery/style/plugIn/bootstrap/js/bootstrap.min.js delete mode 100755 demo/jquery/style/plugIn/bootstrap/js/jquery.min.js delete mode 100755 demo/jquery/style/plugIn/bootstrap/js/npm.js delete mode 100644 demo/react/.editorconfig delete mode 100644 demo/react/.eslintignore delete mode 100644 demo/react/.eslintrc.js delete mode 100644 demo/react/.gitignore delete mode 100644 demo/react/.husky/.gitignore delete mode 100755 demo/react/.husky/commit-msg delete mode 100755 demo/react/.husky/pre-commit delete mode 100644 demo/react/.prettierignore delete mode 100644 demo/react/.prettierrc.js delete mode 100644 demo/react/.stylelintrc.js delete mode 100644 demo/react/.vscode/extensions.json delete mode 100644 demo/react/.vscode/settings.json delete mode 100644 demo/react/README.md delete mode 100644 demo/react/config/config.dev.ts delete mode 100644 demo/react/config/config.ts delete mode 100644 demo/react/config/defaultSettings.ts delete mode 100644 demo/react/config/oneapi.json delete mode 100644 demo/react/config/proxy.ts delete mode 100644 demo/react/config/routes.ts delete mode 100644 demo/react/jest.config.js delete mode 100644 demo/react/jsconfig.json delete mode 100644 demo/react/mock/listTableList.ts delete mode 100644 demo/react/mock/notices.ts delete mode 100644 demo/react/mock/route.ts delete mode 100644 demo/react/mock/user.ts delete mode 100644 demo/react/package.json delete mode 100644 demo/react/playwright.config.ts delete mode 100644 demo/react/public/CNAME delete mode 100644 demo/react/public/favicon.ico delete mode 100644 demo/react/public/icons/icon-128x128.png delete mode 100644 demo/react/public/icons/icon-192x192.png delete mode 100644 demo/react/public/icons/icon-512x512.png delete mode 100644 demo/react/public/logo.svg delete mode 100644 demo/react/public/pro_icon.svg delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK_HEATMAP.min.css delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK_VISUAL.min.css delete mode 100644 demo/react/public/sdk/5.0.0/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css delete mode 100644 demo/react/public/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/react/public/sdk/5.0.4/index.d.ts delete mode 100644 demo/react/src/access.ts delete mode 100644 demo/react/src/app.tsx delete mode 100644 demo/react/src/components/Footer/index.tsx delete mode 100644 demo/react/src/components/HeaderDropdown/index.less delete mode 100644 demo/react/src/components/HeaderDropdown/index.tsx delete mode 100644 demo/react/src/components/HeaderSearch/index.less delete mode 100644 demo/react/src/components/HeaderSearch/index.tsx delete mode 100644 demo/react/src/components/NoticeIcon/NoticeIcon.tsx delete mode 100755 demo/react/src/components/NoticeIcon/NoticeList.less delete mode 100644 demo/react/src/components/NoticeIcon/NoticeList.tsx delete mode 100644 demo/react/src/components/NoticeIcon/index.less delete mode 100644 demo/react/src/components/NoticeIcon/index.tsx delete mode 100644 demo/react/src/components/RightContent/AvatarDropdown.tsx delete mode 100644 demo/react/src/components/RightContent/index.less delete mode 100644 demo/react/src/components/RightContent/index.tsx delete mode 100644 demo/react/src/components/index.md delete mode 100644 demo/react/src/e2e/baseLayout.e2e.spec.ts delete mode 100644 demo/react/src/global.less delete mode 100644 demo/react/src/global.tsx delete mode 100644 demo/react/src/locales/bn-BD.ts delete mode 100644 demo/react/src/locales/bn-BD/component.ts delete mode 100644 demo/react/src/locales/bn-BD/globalHeader.ts delete mode 100644 demo/react/src/locales/bn-BD/menu.ts delete mode 100644 demo/react/src/locales/bn-BD/pages.ts delete mode 100644 demo/react/src/locales/bn-BD/pwa.ts delete mode 100644 demo/react/src/locales/bn-BD/settingDrawer.ts delete mode 100644 demo/react/src/locales/bn-BD/settings.ts delete mode 100644 demo/react/src/locales/en-US.ts delete mode 100644 demo/react/src/locales/en-US/component.ts delete mode 100644 demo/react/src/locales/en-US/globalHeader.ts delete mode 100644 demo/react/src/locales/en-US/menu.ts delete mode 100644 demo/react/src/locales/en-US/pages.ts delete mode 100644 demo/react/src/locales/en-US/pwa.ts delete mode 100644 demo/react/src/locales/en-US/settingDrawer.ts delete mode 100644 demo/react/src/locales/en-US/settings.ts delete mode 100644 demo/react/src/locales/fa-IR.ts delete mode 100644 demo/react/src/locales/fa-IR/component.ts delete mode 100644 demo/react/src/locales/fa-IR/globalHeader.ts delete mode 100644 demo/react/src/locales/fa-IR/menu.ts delete mode 100644 demo/react/src/locales/fa-IR/pages.ts delete mode 100644 demo/react/src/locales/fa-IR/pwa.ts delete mode 100644 demo/react/src/locales/fa-IR/settingDrawer.ts delete mode 100644 demo/react/src/locales/fa-IR/settings.ts delete mode 100644 demo/react/src/locales/id-ID.ts delete mode 100644 demo/react/src/locales/id-ID/component.ts delete mode 100644 demo/react/src/locales/id-ID/globalHeader.ts delete mode 100644 demo/react/src/locales/id-ID/menu.ts delete mode 100644 demo/react/src/locales/id-ID/pages.ts delete mode 100644 demo/react/src/locales/id-ID/pwa.ts delete mode 100644 demo/react/src/locales/id-ID/settingDrawer.ts delete mode 100644 demo/react/src/locales/id-ID/settings.ts delete mode 100644 demo/react/src/locales/ja-JP.ts delete mode 100644 demo/react/src/locales/ja-JP/component.ts delete mode 100644 demo/react/src/locales/ja-JP/globalHeader.ts delete mode 100644 demo/react/src/locales/ja-JP/menu.ts delete mode 100644 demo/react/src/locales/ja-JP/pages.ts delete mode 100644 demo/react/src/locales/ja-JP/pwa.ts delete mode 100644 demo/react/src/locales/ja-JP/settingDrawer.ts delete mode 100644 demo/react/src/locales/ja-JP/settings.ts delete mode 100644 demo/react/src/locales/pt-BR.ts delete mode 100644 demo/react/src/locales/pt-BR/component.ts delete mode 100644 demo/react/src/locales/pt-BR/globalHeader.ts delete mode 100644 demo/react/src/locales/pt-BR/menu.ts delete mode 100644 demo/react/src/locales/pt-BR/pages.ts delete mode 100644 demo/react/src/locales/pt-BR/pwa.ts delete mode 100644 demo/react/src/locales/pt-BR/settingDrawer.ts delete mode 100644 demo/react/src/locales/pt-BR/settings.ts delete mode 100644 demo/react/src/locales/zh-CN.ts delete mode 100644 demo/react/src/locales/zh-CN/component.ts delete mode 100644 demo/react/src/locales/zh-CN/globalHeader.ts delete mode 100644 demo/react/src/locales/zh-CN/menu.ts delete mode 100644 demo/react/src/locales/zh-CN/pages.ts delete mode 100644 demo/react/src/locales/zh-CN/pwa.ts delete mode 100644 demo/react/src/locales/zh-CN/settingDrawer.ts delete mode 100644 demo/react/src/locales/zh-CN/settings.ts delete mode 100644 demo/react/src/locales/zh-TW.ts delete mode 100644 demo/react/src/locales/zh-TW/component.ts delete mode 100644 demo/react/src/locales/zh-TW/globalHeader.ts delete mode 100644 demo/react/src/locales/zh-TW/menu.ts delete mode 100644 demo/react/src/locales/zh-TW/pwa.ts delete mode 100644 demo/react/src/locales/zh-TW/settingDrawer.ts delete mode 100644 demo/react/src/locales/zh-TW/settings.ts delete mode 100644 demo/react/src/manifest.json delete mode 100644 demo/react/src/pages/404.tsx delete mode 100644 demo/react/src/pages/Admin.tsx delete mode 100644 demo/react/src/pages/TableList/components/UpdateForm.tsx delete mode 100644 demo/react/src/pages/TableList/index.tsx delete mode 100644 demo/react/src/pages/Welcome.less delete mode 100644 demo/react/src/pages/Welcome.tsx delete mode 100644 demo/react/src/pages/account/center/Center.less delete mode 100644 demo/react/src/pages/account/center/_mock.ts delete mode 100644 demo/react/src/pages/account/center/components/Applications/index.less delete mode 100644 demo/react/src/pages/account/center/components/Applications/index.tsx delete mode 100644 demo/react/src/pages/account/center/components/ArticleListContent/index.less delete mode 100644 demo/react/src/pages/account/center/components/ArticleListContent/index.tsx delete mode 100644 demo/react/src/pages/account/center/components/Articles/index.less delete mode 100644 demo/react/src/pages/account/center/components/Articles/index.tsx delete mode 100644 demo/react/src/pages/account/center/components/AvatarList/index.less delete mode 100644 demo/react/src/pages/account/center/components/AvatarList/index.tsx delete mode 100644 demo/react/src/pages/account/center/components/Projects/index.less delete mode 100644 demo/react/src/pages/account/center/components/Projects/index.tsx delete mode 100644 demo/react/src/pages/account/center/data.d.ts delete mode 100644 demo/react/src/pages/account/center/index.tsx delete mode 100644 demo/react/src/pages/account/center/service.ts delete mode 100644 demo/react/src/pages/account/settings/_mock.ts delete mode 100644 demo/react/src/pages/account/settings/components/BaseView.less delete mode 100644 demo/react/src/pages/account/settings/components/PhoneView.tsx delete mode 100644 demo/react/src/pages/account/settings/components/base.tsx delete mode 100644 demo/react/src/pages/account/settings/components/binding.tsx delete mode 100644 demo/react/src/pages/account/settings/components/notification.tsx delete mode 100644 demo/react/src/pages/account/settings/components/security.tsx delete mode 100644 demo/react/src/pages/account/settings/data.d.ts delete mode 100644 demo/react/src/pages/account/settings/geographic/city.json delete mode 100644 demo/react/src/pages/account/settings/geographic/province.json delete mode 100644 demo/react/src/pages/account/settings/index.tsx delete mode 100644 demo/react/src/pages/account/settings/service.ts delete mode 100644 demo/react/src/pages/account/settings/style.less delete mode 100644 demo/react/src/pages/dashboard/analysis/_mock.ts delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/Bar/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/ChartCard/index.less delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/ChartCard/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/Field/index.less delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/Field/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/Gauge/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/MiniArea/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/MiniBar/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/MiniProgress/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/Pie/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/TagCloud/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/TimelineChart/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/WaterWave/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/autoHeight.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/index.less delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Charts/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/IntroduceRow.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/NumberInfo/index.less delete mode 100644 demo/react/src/pages/dashboard/analysis/components/NumberInfo/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/OfflineData.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/PageLoading/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/ProportionSales.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/SalesCard.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/TopSearch.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Trend/index.less delete mode 100644 demo/react/src/pages/dashboard/analysis/components/Trend/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/data.d.ts delete mode 100644 demo/react/src/pages/dashboard/analysis/index.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/service.ts delete mode 100644 demo/react/src/pages/dashboard/analysis/style.less delete mode 100644 demo/react/src/pages/dashboard/analysis/utils/Yuan.tsx delete mode 100644 demo/react/src/pages/dashboard/analysis/utils/utils.less delete mode 100644 demo/react/src/pages/dashboard/analysis/utils/utils.ts delete mode 100644 demo/react/src/pages/dashboard/monitor/_mock.ts delete mode 100644 demo/react/src/pages/dashboard/monitor/components/ActiveChart/index.less delete mode 100644 demo/react/src/pages/dashboard/monitor/components/ActiveChart/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/Gauge/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/MiniArea/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/Pie/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/TagCloud/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/WaterWave/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Charts/autoHeight.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/components/Map/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/data.d.ts delete mode 100644 demo/react/src/pages/dashboard/monitor/index.tsx delete mode 100644 demo/react/src/pages/dashboard/monitor/service.ts delete mode 100644 demo/react/src/pages/dashboard/monitor/style.less delete mode 100644 demo/react/src/pages/dashboard/workplace/_mock.ts delete mode 100644 demo/react/src/pages/dashboard/workplace/components/EditableLinkGroup/index.less delete mode 100644 demo/react/src/pages/dashboard/workplace/components/EditableLinkGroup/index.tsx delete mode 100644 demo/react/src/pages/dashboard/workplace/components/Radar/autoHeight.tsx delete mode 100644 demo/react/src/pages/dashboard/workplace/components/Radar/index.tsx delete mode 100644 demo/react/src/pages/dashboard/workplace/data.d.ts delete mode 100644 demo/react/src/pages/dashboard/workplace/index.tsx delete mode 100644 demo/react/src/pages/dashboard/workplace/service.ts delete mode 100644 demo/react/src/pages/dashboard/workplace/style.less delete mode 100644 demo/react/src/pages/document.ejs delete mode 100644 demo/react/src/pages/editor/flow/common/IconFont/index.ts delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/FlowContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/KoniContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/MenuItem.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/MindContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/index.less delete mode 100644 demo/react/src/pages/editor/flow/components/EditorContextMenu/index.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/DetailForm.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/FlowDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/KoniDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/MindDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/index.less delete mode 100644 demo/react/src/pages/editor/flow/components/EditorDetailPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorItemPanel/FlowItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorItemPanel/KoniItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorItemPanel/index.less delete mode 100644 demo/react/src/pages/editor/flow/components/EditorItemPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorMinimap/index.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/FlowToolbar.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/KoniToolbar.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/MindToolbar.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/ToolbarButton.tsx delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/index.less delete mode 100644 demo/react/src/pages/editor/flow/components/EditorToolbar/index.tsx delete mode 100644 demo/react/src/pages/editor/flow/index.less delete mode 100644 demo/react/src/pages/editor/flow/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/common/IconFont/index.ts delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/FlowContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/KoniContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/MenuItem.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/MindContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/index.less delete mode 100644 demo/react/src/pages/editor/koni/components/EditorContextMenu/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/DetailForm.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/FlowDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/KoniDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/MindDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/index.less delete mode 100644 demo/react/src/pages/editor/koni/components/EditorDetailPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorItemPanel/FlowItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorItemPanel/KoniItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorItemPanel/index.less delete mode 100644 demo/react/src/pages/editor/koni/components/EditorItemPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorMinimap/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/FlowToolbar.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/KoniToolbar.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/MindToolbar.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/ToolbarButton.tsx delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/index.less delete mode 100644 demo/react/src/pages/editor/koni/components/EditorToolbar/index.tsx delete mode 100644 demo/react/src/pages/editor/koni/index.less delete mode 100644 demo/react/src/pages/editor/koni/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/common/IconFont/index.ts delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/FlowContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/KoniContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/MenuItem.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/MindContextMenu.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/index.less delete mode 100644 demo/react/src/pages/editor/mind/components/EditorContextMenu/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/DetailForm.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/FlowDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/KoniDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/MindDetailPanel.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/index.less delete mode 100644 demo/react/src/pages/editor/mind/components/EditorDetailPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorItemPanel/FlowItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorItemPanel/KoniItemPanel.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorItemPanel/index.less delete mode 100644 demo/react/src/pages/editor/mind/components/EditorItemPanel/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorMinimap/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/FlowToolbar.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/KoniToolbar.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/MindToolbar.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/ToolbarButton.tsx delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/index.less delete mode 100644 demo/react/src/pages/editor/mind/components/EditorToolbar/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/index.less delete mode 100644 demo/react/src/pages/editor/mind/index.tsx delete mode 100644 demo/react/src/pages/editor/mind/worldCup2018.json delete mode 100644 demo/react/src/pages/exception/403/index.tsx delete mode 100644 demo/react/src/pages/exception/404/index.tsx delete mode 100644 demo/react/src/pages/exception/500/index.tsx delete mode 100644 demo/react/src/pages/form/advanced-form/_mock.ts delete mode 100644 demo/react/src/pages/form/advanced-form/components/TableForm.tsx delete mode 100644 demo/react/src/pages/form/advanced-form/index.tsx delete mode 100644 demo/react/src/pages/form/advanced-form/service.ts delete mode 100644 demo/react/src/pages/form/advanced-form/style.less delete mode 100644 demo/react/src/pages/form/basic-form/_mock.ts delete mode 100644 demo/react/src/pages/form/basic-form/index.tsx delete mode 100644 demo/react/src/pages/form/basic-form/service.ts delete mode 100644 demo/react/src/pages/form/basic-form/style.less delete mode 100644 demo/react/src/pages/form/step-form/_mock.ts delete mode 100644 demo/react/src/pages/form/step-form/data.d.ts delete mode 100644 demo/react/src/pages/form/step-form/index.tsx delete mode 100644 demo/react/src/pages/form/step-form/service.ts delete mode 100644 demo/react/src/pages/form/step-form/style.less delete mode 100644 demo/react/src/pages/list/basic-list/_mock.ts delete mode 100644 demo/react/src/pages/list/basic-list/components/OperationModal.tsx delete mode 100644 demo/react/src/pages/list/basic-list/data.d.ts delete mode 100644 demo/react/src/pages/list/basic-list/index.tsx delete mode 100644 demo/react/src/pages/list/basic-list/service.ts delete mode 100644 demo/react/src/pages/list/basic-list/style.less delete mode 100644 demo/react/src/pages/list/basic-list/utils/utils.less delete mode 100644 demo/react/src/pages/list/card-list/_mock.ts delete mode 100644 demo/react/src/pages/list/card-list/data.d.ts delete mode 100644 demo/react/src/pages/list/card-list/index.tsx delete mode 100644 demo/react/src/pages/list/card-list/service.ts delete mode 100644 demo/react/src/pages/list/card-list/style.less delete mode 100644 demo/react/src/pages/list/card-list/utils/utils.less delete mode 100644 demo/react/src/pages/list/search/applications/_mock.ts delete mode 100644 demo/react/src/pages/list/search/applications/components/StandardFormRow/index.less delete mode 100644 demo/react/src/pages/list/search/applications/components/StandardFormRow/index.tsx delete mode 100644 demo/react/src/pages/list/search/applications/components/TagSelect/index.less delete mode 100644 demo/react/src/pages/list/search/applications/components/TagSelect/index.tsx delete mode 100644 demo/react/src/pages/list/search/applications/data.d.ts delete mode 100644 demo/react/src/pages/list/search/applications/index.tsx delete mode 100644 demo/react/src/pages/list/search/applications/service.ts delete mode 100644 demo/react/src/pages/list/search/applications/style.less delete mode 100644 demo/react/src/pages/list/search/applications/utils/utils.less delete mode 100644 demo/react/src/pages/list/search/articles/_mock.ts delete mode 100644 demo/react/src/pages/list/search/articles/components/ArticleListContent/index.less delete mode 100644 demo/react/src/pages/list/search/articles/components/ArticleListContent/index.tsx delete mode 100644 demo/react/src/pages/list/search/articles/components/StandardFormRow/index.less delete mode 100644 demo/react/src/pages/list/search/articles/components/StandardFormRow/index.tsx delete mode 100644 demo/react/src/pages/list/search/articles/components/TagSelect/index.less delete mode 100644 demo/react/src/pages/list/search/articles/components/TagSelect/index.tsx delete mode 100644 demo/react/src/pages/list/search/articles/data.d.ts delete mode 100644 demo/react/src/pages/list/search/articles/index.tsx delete mode 100644 demo/react/src/pages/list/search/articles/service.ts delete mode 100644 demo/react/src/pages/list/search/articles/style.less delete mode 100644 demo/react/src/pages/list/search/index.tsx delete mode 100644 demo/react/src/pages/list/search/projects/_mock.ts delete mode 100644 demo/react/src/pages/list/search/projects/components/AvatarList/index.less delete mode 100644 demo/react/src/pages/list/search/projects/components/AvatarList/index.tsx delete mode 100644 demo/react/src/pages/list/search/projects/components/StandardFormRow/index.less delete mode 100644 demo/react/src/pages/list/search/projects/components/StandardFormRow/index.tsx delete mode 100644 demo/react/src/pages/list/search/projects/components/TagSelect/index.less delete mode 100644 demo/react/src/pages/list/search/projects/components/TagSelect/index.tsx delete mode 100644 demo/react/src/pages/list/search/projects/data.d.ts delete mode 100644 demo/react/src/pages/list/search/projects/index.tsx delete mode 100644 demo/react/src/pages/list/search/projects/service.ts delete mode 100644 demo/react/src/pages/list/search/projects/style.less delete mode 100644 demo/react/src/pages/list/search/projects/utils/utils.less delete mode 100644 demo/react/src/pages/list/table-list/_mock.ts delete mode 100644 demo/react/src/pages/list/table-list/components/CreateForm.tsx delete mode 100644 demo/react/src/pages/list/table-list/components/UpdateForm.tsx delete mode 100644 demo/react/src/pages/list/table-list/data.d.ts delete mode 100644 demo/react/src/pages/list/table-list/index.tsx delete mode 100644 demo/react/src/pages/list/table-list/service.ts delete mode 100644 demo/react/src/pages/profile/advanced/_mock.ts delete mode 100644 demo/react/src/pages/profile/advanced/data.d.ts delete mode 100644 demo/react/src/pages/profile/advanced/index.tsx delete mode 100644 demo/react/src/pages/profile/advanced/service.ts delete mode 100644 demo/react/src/pages/profile/advanced/style.less delete mode 100644 demo/react/src/pages/profile/basic/_mock.ts delete mode 100644 demo/react/src/pages/profile/basic/data.d.ts delete mode 100644 demo/react/src/pages/profile/basic/index.tsx delete mode 100644 demo/react/src/pages/profile/basic/service.ts delete mode 100644 demo/react/src/pages/profile/basic/style.less delete mode 100644 demo/react/src/pages/result/fail/index.less delete mode 100644 demo/react/src/pages/result/fail/index.tsx delete mode 100644 demo/react/src/pages/result/success/index.less delete mode 100644 demo/react/src/pages/result/success/index.tsx delete mode 100644 demo/react/src/pages/user/Login/index.less delete mode 100644 demo/react/src/pages/user/Login/index.tsx delete mode 100644 demo/react/src/pages/user/register-result/index.tsx delete mode 100644 demo/react/src/pages/user/register-result/style.less delete mode 100644 demo/react/src/pages/user/register/_mock.ts delete mode 100644 demo/react/src/pages/user/register/index.tsx delete mode 100644 demo/react/src/pages/user/register/service.ts delete mode 100644 demo/react/src/pages/user/register/style.less delete mode 100644 demo/react/src/service-worker.js delete mode 100644 demo/react/src/services/ant-design-pro/api.ts delete mode 100644 demo/react/src/services/ant-design-pro/index.ts delete mode 100644 demo/react/src/services/ant-design-pro/login.ts delete mode 100644 demo/react/src/services/ant-design-pro/typings.d.ts delete mode 100644 demo/react/src/services/swagger/index.ts delete mode 100644 demo/react/src/services/swagger/pet.ts delete mode 100644 demo/react/src/services/swagger/store.ts delete mode 100644 demo/react/src/services/swagger/typings.d.ts delete mode 100644 demo/react/src/services/swagger/user.ts delete mode 100644 demo/react/src/typings.d.ts delete mode 100644 demo/react/tests/run-tests.js delete mode 100644 demo/react/tests/setupTests.js delete mode 100644 demo/react/tsconfig.json delete mode 100644 demo/vue/.gitignore delete mode 100644 demo/vue/.vscode/extensions.json delete mode 100644 demo/vue/README.md delete mode 100644 demo/vue/index.html delete mode 100644 demo/vue/package.json delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_Encrypt.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_ExposurePoint.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_ExposurePoint.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_GBK.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_GBK.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_MPAAS.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_MPAAS.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_PageViewStayTime.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.0/AnalysysAgent_PageViewStayTime.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_Encrypt.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_Encrypt.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_ExposurePoint.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_ExposurePoint.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_ExposurePoint.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_GBK.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_GBK.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_GBK.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_MPAAS.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_MPAAS.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_MPAAS.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_PageViewStayTime.amd.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_PageViewStayTime.es6.min.js delete mode 100644 demo/vue/public/sdk/4.5.5/AnalysysAgent_PageViewStayTime.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_Encrypt.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css delete mode 100644 demo/vue/public/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js delete mode 100644 demo/vue/public/sdk/5.0.4/index.d.ts delete mode 100644 demo/vue/public/vite.svg delete mode 100644 demo/vue/src/App.vue delete mode 100644 demo/vue/src/assets/vue.svg delete mode 100644 demo/vue/src/components/HelloWorld.vue delete mode 100644 demo/vue/src/components/layout/head.vue delete mode 100644 demo/vue/src/main.ts delete mode 100644 demo/vue/src/router.ts delete mode 100644 demo/vue/src/style.css delete mode 100644 demo/vue/src/type.d.ts delete mode 100644 demo/vue/src/utils/analysys.ts delete mode 100644 demo/vue/src/views/index/index.vue delete mode 100644 demo/vue/src/views/product/index.vue delete mode 100644 demo/vue/src/views/sdk/index.vue delete mode 100644 demo/vue/src/vite-env.d.ts delete mode 100644 demo/vue/tsconfig.json delete mode 100644 demo/vue/tsconfig.node.json delete mode 100644 demo/vue/vite.config.ts diff --git a/.env b/.env index ddd46b4..1555046 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ ANS=JS LIB=JS -LibVERSION=5.0.5 \ No newline at end of file +LibVERSION=5.0.7 \ No newline at end of file diff --git a/.gitignore b/.gitignore index c7b0dd8..a7b2058 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ yarn.lock bac vue-h5 .eslintcache -/demo/**/sdk \ No newline at end of file +demos/ +release.sh \ No newline at end of file diff --git a/demo/jquery/index.html b/demo/jquery/index.html deleted file mode 100755 index e81c4ad..0000000 --- a/demo/jquery/index.html +++ /dev/null @@ -1,541 +0,0 @@ - - - - - - 方舟B 接入DEMO - - - - - - - - - - - - - - - - -
-
- -
- - -

日志展示

-
- -

跳转页面

-
- -
- -

AnalysysAgent.pageView:页面事件

-
-
-
-
- 活动页 -
-
-
-
-
-
- 商品页 -
-
-
-
- -
-
-
- -
-
- -
- - -
- - - -

AnalysysAgent.track:点击事件

-
-
-
- -
-
-
- -
-
- - -
- - - - -

AnalysysAgent.registerSuperProperty/AnalysysAgent.registerSuperProperties:注册通用属性

-
- - -
- - -
- - - -

AnalysysAgent.unRegisterSuperProperty/AnalysysAgent.clearSuperProperties():删除通用属性

-
-
- - -
-
- - -
-
- - -
- - - -

AnalysysAgent.getSuperProperty/AnalysysAgent.getSuperProperties():获取通用属性

-
-
- - -
-
- - -
- -
- - -
- - - - -

AnalysysAgent.identify:用户ID设置

-
-
- -
- -
-
-
- - - -

AnalysysAgent.alias:用户关联

-
-
- -
-
- 关联 -
-
-
-
- - - -

AnalysysAgent.getDistinctId:获取匿名ID

-
-
-
- -
-
-
- - - - -

AnalysysAgent.profileSet:设置用户属性

-
-
- -
-
- -
-
- - -
- - - -

AnalysysAgent.profileSetOnce:首次设置用户属性

-
-
-
- -
-
- -
- - -
- - -
-
-
-
- -

AnalysysAgent.profileIncrement:设置用户属性相对变化值

-
- - -
- - -
- - - -

AnalysysAgent.profileAppend:设置列表类型的属性

- - - -
- - -
- - - -

AnalysysAgent.profileUnset/AnalysysAgent.profileDelete:删除设置的属性

-
- -
- -
-
- - -
- - -

AnalysysAgent.getPresetProperties:获取预置字段

-
-
- -
-
- - - -

AnalysysAgent.reset:清除本地设置

-
-
- -
-
- - -
-
-
- - - \ No newline at end of file diff --git a/demo/jquery/next.html b/demo/jquery/next.html deleted file mode 100755 index 1f6e36d..0000000 --- a/demo/jquery/next.html +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - 方舟B 接入DEMO - - - - - - - - - - - - - - - -
-
- -
- - -

日志展示

-
- -

跳转页面

-
- -
- -

AnalysysAgent.pageView:页面事件

-
-
-
-
- 活动页 -
-
-
-
-
-
- 商品页 -
-
-
-
- -
-
-
- -
-
- -
- - -
- - - -

AnalysysAgent.track:点击事件

-
-
-
- -
-
-
- -
-
- - -
- - - - -

AnalysysAgent.registerSuperProperty/AnalysysAgent.registerSuperProperties:注册通用属性

-
- - -
- - -
- - - -

AnalysysAgent.unRegisterSuperProperty/AnalysysAgent.clearSuperProperties():删除通用属性

-
-
- - -
-
- - -
-
- - -
- - - -

AnalysysAgent.getSuperProperty/AnalysysAgent.getSuperProperties():获取通用属性

-
-
- - -
-
- - -
- -
- - -
- - - - -

AnalysysAgent.identify:用户ID设置

-
-
- -
- -
-
-
- - - -

AnalysysAgent.alias:用户关联

-
-
- -
-
- 关联 -
-
-
-
- - - -

AnalysysAgent.getDistinctId:获取匿名ID

-
-
-
- -
-
-
- - - - -

AnalysysAgent.profileSet:设置用户属性

-
-
- -
-
- -
-
- - -
- - - -

AnalysysAgent.profileSetOnce:首次设置用户属性

-
-
-
- -
-
- -
- - -
- - -
-
-
-
- -

AnalysysAgent.profileIncrement:设置用户属性相对变化值

-
- - -
- - -
- - - -

AnalysysAgent.profileAppend:设置列表类型的属性

- - - -
- - -
- - - -

AnalysysAgent.profileUnset/AnalysysAgent.profileDelete:删除设置的属性

-
- -
- -
-
- - -
- - -

AnalysysAgent.getPresetProperties:获取预置字段

-
-
- -
-
- - - -

AnalysysAgent.reset:清除本地设置

-
-
- -
-
- - -
-
-
- - - \ No newline at end of file diff --git a/demo/jquery/sdk/4.5.0/AnalysysAgent_Encrypt.amd.min.js b/demo/jquery/sdk/4.5.0/AnalysysAgent_Encrypt.amd.min.js deleted file mode 100644 index e1c8e66..0000000 --- a/demo/jquery/sdk/4.5.0/AnalysysAgent_Encrypt.amd.min.js +++ /dev/null @@ -1 +0,0 @@ -define(["exports"],function(t){"use strict";function e(t,e){return t(e={exports:{}},e.exports),e.exports}var n=e(function(t,e){var r;t.exports=(r=r||function(d){var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var t={},e=t.lib={},i=e.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=e.WordArray=i.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=s<<24-(n+a)%4*8}else for(a=0;a>>2]=r[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=d.ceil(e/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>16)&n)<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n;return t/=4294967296,(t+=.5)*(.5>>2]>>>24-i%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new f.init(r,e/2)}},o=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new f.init(r,e)}},h=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(o.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return o.parse(unescape(encodeURIComponent(t)))}},l=e.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,r=e.words,n=e.sigBytes,i=this.blockSize,a=n/(4*i),s=(a=t?d.ceil(a):d.max((0|a)-this._minBufferSize,0))*i,o=d.min(4*s,n);if(s){for(var h=0;h>>2]>>>24-a%4*8&255)<<16|(e[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|e[a+2>>>2]>>>24-(a+2)%4*8&255,o=0;o<4&&a+.75*o>>6*(3-o)&63));var h=n.charAt(64);if(h)for(;i.length%4;)i.push(h);return i.join("")},parse:function(t){var e=t.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var i=0;i>>6-o%4*2,a[s>>>2]|=(n|i)<<24-s%4*8,s++)}return h.create(a,s)}(t,e,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),r.enc.Base64)}),e(function(t,e){var s;t.exports=(s=n,function(d){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,S=[];!function(){for(var t=0;t<64;t++)S[t]=4294967296*d.abs(d.sin(t+1))|0}();var a=i.MD5=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var a=this._hash.words,s=t[e+0],o=t[e+1],h=t[e+2],l=t[e+3],d=t[e+4],f=t[e+5],c=t[e+6],u=t[e+7],_=t[e+8],p=t[e+9],g=t[e+10],v=t[e+11],m=t[e+12],w=t[e+13],y=t[e+14],b=t[e+15],k=A(k=a[0],B=a[1],z=a[2],x=a[3],s,7,S[0]),x=A(x,k,B,z,o,12,S[1]),z=A(z,x,k,B,h,17,S[2]),B=A(B,z,x,k,l,22,S[3]);k=A(k,B,z,x,d,7,S[4]),x=A(x,k,B,z,f,12,S[5]),z=A(z,x,k,B,c,17,S[6]),B=A(B,z,x,k,u,22,S[7]),k=A(k,B,z,x,_,7,S[8]),x=A(x,k,B,z,p,12,S[9]),z=A(z,x,k,B,g,17,S[10]),B=A(B,z,x,k,v,22,S[11]),k=A(k,B,z,x,m,7,S[12]),x=A(x,k,B,z,w,12,S[13]),z=A(z,x,k,B,y,17,S[14]),k=E(k,B=A(B,z,x,k,b,22,S[15]),z,x,o,5,S[16]),x=E(x,k,B,z,c,9,S[17]),z=E(z,x,k,B,v,14,S[18]),B=E(B,z,x,k,s,20,S[19]),k=E(k,B,z,x,f,5,S[20]),x=E(x,k,B,z,g,9,S[21]),z=E(z,x,k,B,b,14,S[22]),B=E(B,z,x,k,d,20,S[23]),k=E(k,B,z,x,p,5,S[24]),x=E(x,k,B,z,y,9,S[25]),z=E(z,x,k,B,l,14,S[26]),B=E(B,z,x,k,_,20,S[27]),k=E(k,B,z,x,w,5,S[28]),x=E(x,k,B,z,h,9,S[29]),z=E(z,x,k,B,u,14,S[30]),k=C(k,B=E(B,z,x,k,m,20,S[31]),z,x,f,4,S[32]),x=C(x,k,B,z,_,11,S[33]),z=C(z,x,k,B,v,16,S[34]),B=C(B,z,x,k,y,23,S[35]),k=C(k,B,z,x,o,4,S[36]),x=C(x,k,B,z,d,11,S[37]),z=C(z,x,k,B,u,16,S[38]),B=C(B,z,x,k,g,23,S[39]),k=C(k,B,z,x,w,4,S[40]),x=C(x,k,B,z,s,11,S[41]),z=C(z,x,k,B,l,16,S[42]),B=C(B,z,x,k,c,23,S[43]),k=C(k,B,z,x,p,4,S[44]),x=C(x,k,B,z,m,11,S[45]),z=C(z,x,k,B,b,16,S[46]),k=O(k,B=C(B,z,x,k,h,23,S[47]),z,x,s,6,S[48]),x=O(x,k,B,z,u,10,S[49]),z=O(z,x,k,B,y,15,S[50]),B=O(B,z,x,k,f,21,S[51]),k=O(k,B,z,x,m,6,S[52]),x=O(x,k,B,z,l,10,S[53]),z=O(z,x,k,B,g,15,S[54]),B=O(B,z,x,k,o,21,S[55]),k=O(k,B,z,x,_,6,S[56]),x=O(x,k,B,z,b,10,S[57]),z=O(z,x,k,B,c,15,S[58]),B=O(B,z,x,k,w,21,S[59]),k=O(k,B,z,x,d,6,S[60]),x=O(x,k,B,z,v,10,S[61]),z=O(z,x,k,B,h,15,S[62]),B=O(B,z,x,k,p,21,S[63]),a[0]=a[0]+k|0,a[1]=a[1]+B|0,a[2]=a[2]+z|0,a[3]=a[3]+x|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32;var i=d.floor(r/4294967296),a=r;e[15+(64+n>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),e[14+(64+n>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,o=s.words,h=0;h<4;h++){var l=o[h];o[h]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});function A(t,e,r,n,i,a,s){var o=t+(e&r|~e&n)+i+s;return(o<>>32-a)+e}function E(t,e,r,n,i,a,s){var o=t+(e&n|r&~n)+i+s;return(o<>>32-a)+e}function C(t,e,r,n,i,a,s){var o=t+(e^r^n)+i+s;return(o<>>32-a)+e}function O(t,e,r,n,i,a,s){var o=t+(r^(e|~n))+i+s;return(o<>>32-a)+e}t.MD5=n._createHelper(a),t.HmacMD5=n._createHmacHelper(a)}(Math),s.MD5)}),e(function(t,e){var s;t.exports=(s=n,function(){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,f=[],a=i.SHA1=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r,n=this._hash.words,i=n[0],a=n[1],s=n[2],o=n[3],h=n[4],l=0;l<80;l++){l<16?f[l]=0|t[e+l]:(r=f[l-3]^f[l-8]^f[l-14]^f[l-16],f[l]=r<<1|r>>>31);var d=(i<<5|i>>>27)+h+f[l];d+=l<20?1518500249+(a&s|~a&o):l<40?1859775393+(a^s^o):l<60?(a&s|a&o|s&o)-1894007588:(a^s^o)-899497514,h=o,o=s,s=a<<30|a>>>2,a=i,i=d}n[0]=n[0]+i|0,n[1]=n[1]+a|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+h|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(64+n>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+n>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=n._createHelper(a),t.HmacSHA1=n._createHmacHelper(a)}(),s.SHA1)}),e(function(t,e){var r;t.exports=(r=n,void function(){var t=r.lib.Base,l=r.enc.Utf8;r.algo.HMAC=t.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=l.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),a=this._iKey=e.clone(),s=i.words,o=a.words,h=0;h>>2];t.sigBytes-=e}},g=(e.BlockCipher=o.extend({cfg:o.cfg.extend({mode:u,padding:p}),reset:function(){o.reset.call(this);var t,e=this.cfg,r=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(n,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?h.create([1398893684,1701076831]).concat(r).concat(e):e).toString(a)},parse:function(t){var e,r=a.parse(t),n=r.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=h.create(n.slice(2,4)),n.splice(0,4),r.sigBytes-=16),g.create({ciphertext:r,salt:e})}},m=e.SerializableCipher=r.extend({cfg:r.extend({format:v}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),a=i.finalize(e),s=i.cfg;return g.create({ciphertext:a,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=(t.kdf={}).OpenSSL={execute:function(t,e,r,n){n=n||h.random(8);var i=s.create({keySize:e+r}).compute(t,n),a=h.create(i.words.slice(e),4*r);return i.sigBytes=4*e,g.create({key:i,iv:a,salt:n})}},y=e.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:w}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var a=m.encrypt.call(this,t,e,i.key,n);return a.mixIn(i),a},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,m.decrypt.call(this,t,e,i.key,n)}})}())}),e(function(t,e){var i;t.exports=(i=n,function(){var t=i,e=t.lib.BlockCipher,r=t.algo,l=[],d=[],f=[],c=[],u=[],_=[],p=[],g=[],v=[],m=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=0,n=0,e=0;e<256;e++){var i=(i=n^n<<1^n<<2^n<<3^n<<4)>>>8^255&i^99;l[r]=i;var a=t[d[i]=r],s=t[a],o=t[s],h=257*t[i]^16843008*i;f[r]=h<<24|h>>>8,c[r]=h<<16|h>>>16,u[r]=h<<8|h>>>24,_[r]=h,h=16843009*o^65537*s^257*a^16843008*r,p[i]=h<<24|h>>>8,g[i]=h<<16|h>>>16,v[i]=h<<8|h>>>24,m[i]=h,r?(r=a^t[t[t[o^a]]],n^=t[t[n]]):r=n=1}}();var w=[0,1,2,4,8,16,32,64,128,27,54],n=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*(1+(this._nRounds=6+r)),i=this._keySchedule=[],a=0;a>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h]):(h=l[(h=h<<8|h>>>24)>>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h],h^=w[a/r|0]<<24),i[a]=i[a-r]^h);for(var s=this._invKeySchedule=[],o=0;o>>24]]^g[l[h>>>16&255]]^v[l[h>>>8&255]]^m[l[255&h]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,c,u,_,l)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,g,v,m,d),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,a,s,o){for(var h=this._nRounds,l=t[e]^r[0],d=t[e+1]^r[1],f=t[e+2]^r[2],c=t[e+3]^r[3],u=4,_=1;_>>24]^i[d>>>16&255]^a[f>>>8&255]^s[255&c]^r[u++],g=n[d>>>24]^i[f>>>16&255]^a[c>>>8&255]^s[255&l]^r[u++],v=n[f>>>24]^i[c>>>16&255]^a[l>>>8&255]^s[255&d]^r[u++],m=n[c>>>24]^i[l>>>16&255]^a[d>>>8&255]^s[255&f]^r[u++],l=p,d=g,f=v,c=m;p=(o[l>>>24]<<24|o[d>>>16&255]<<16|o[f>>>8&255]<<8|o[255&c])^r[u++],g=(o[d>>>24]<<24|o[f>>>16&255]<<16|o[c>>>8&255]<<8|o[255&l])^r[u++],v=(o[f>>>24]<<24|o[c>>>16&255]<<16|o[l>>>8&255]<<8|o[255&d])^r[u++],m=(o[c>>>24]<<24|o[l>>>16&255]<<16|o[d>>>8&255]<<8|o[255&f])^r[u++],t[e]=p,t[e+1]=g,t[e+2]=v,t[e+3]=m},keySize:8});t.AES=e._createHelper(n)}(),i.AES)})),d=e(function(t,e){var r;t.exports=((r=n).mode.ECB=function(){var t=r.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),t.Decryptor=t.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),t}(),r.mode.ECB)}),R=e(function(t,e){var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;e.assign=function(t){for(var e,r,n=Array.prototype.slice.call(arguments,1);n.length;){var i=n.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var a in i)e=i,r=a,Object.prototype.hasOwnProperty.call(e,r)&&(t[a]=i[a])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,n,i){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+n),i);else for(var a=0;a>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function H(t,e,r){t.bi_valid>i-r?(t.bi_buf|=e<>i-t.bi_valid,t.bi_valid+=r-i):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function P(t,e,r){for(var n,i=new Array(m+1),a=0,s=1;s<=m;s++)i[s]=a=a+r[s-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=K(i[o]++,o))}}function $(t){for(var e=0;e<_;e++)t.dyn_ltree[2*e]=0;for(e=0;e>1;1<=r;r--)W(t,a,r);for(i=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],W(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,W(t,a,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){for(var r,n,i,a,s,o=e.dyn_tree,h=e.max_code,l=e.stat_desc.static_tree,d=e.stat_desc.has_stree,f=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,u=e.stat_desc.max_length,_=0,p=0;p<=m;p++)t.bl_count[p]=0;for(o[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r>=7;a>>=1)if(1&e&&0!==t.dyn_ltree[2*r])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return f;for(r=32;r>>3,(a=t.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==e?tt(t,e,r,n):4===t.strategy||a===i?(H(t,2+(n?1:0),3),Y(t,E,C)):(H(t,4+(n?1:0),3),function(t,e,r,n){var i;for(H(t,e-257,5),H(t,r-1,5),H(t,n-4,4),i=0;i>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(D[r]+u+1)]++,t.dyn_dtree[2*I(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){var e;H(t,2,3),L(t,y,E),16===(e=t).bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}};var rt=function(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:t>>>1;e[r]=t}return e}();var it,at=function(t,e,r,n){var i=nt,a=n+r;t^=-1;for(var s=n;s>>8^i[255&(t^e[s])];return-1^t},st={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},ot=0,ht=4,lt=0,dt=-2,ft=-1,ct=4,ut=2,_t=8,pt=9,gt=286,vt=30,mt=19,wt=2*gt+1,yt=15,bt=3,kt=258,xt=kt+bt+1,zt=42,Bt=113,St=1,At=2,Et=3,Ct=4;function Ot(t,e){return t.msg=st[e],e}function Dt(t){return(t<<1)-(4t.avail_out&&(r=t.avail_out),0!==r&&(R.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function Rt(t,e){et._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Mt(t.strm)}function Nt(t,e){t.pending_buf[t.pending++]=e}function jt(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function Ft(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-xt?t.strstart-(t.w_size-xt):0,l=t.window,d=t.w_mask,f=t.prev,c=t.strstart+kt,u=l[a+s-1],_=l[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(r=e)+s]===_&&l[r+s-1]===u&&l[r]===l[a]&&l[++r]===l[a+1]){a+=2,r++;do{}while(l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&ah&&0!=--i);return s<=t.lookahead?s:t.lookahead}function Zt(t){var e,r,n,i,a,s,o,h,l,d,f=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-xt)){for(R.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;n=t.head[--e],t.head[e]=f<=n?n-f:0,--r;);for(e=r=f;n=t.prev[--e],t.prev[e]=f<=n?n-f:0,--r;);i+=f}if(0===t.strm.avail_in)break;if(s=t.strm,o=t.window,h=t.strstart+t.lookahead,l=i,d=void 0,d=s.avail_in,l=bt)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt)if(n=et._tr_tally(t,t.strstart-t.match_start,t.match_length-bt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=bt){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt&&t.match_length<=t.prev_length){for(i=t.strstart+t.lookahead-bt,n=et._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-bt),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=i&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Zt(t),0===t.lookahead&&e===ot)return St;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Rt(t,!1),0===t.strm.avail_out))return St;if(t.strstart-t.block_start>=t.w_size-xt&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):(t.strstart>t.block_start&&(Rt(t,!1),t.strm.avail_out),St)}),new Ht(4,4,8,4,It),new Ht(4,5,16,8,It),new Ht(4,6,32,32,It),new Ht(4,4,16,16,Ut),new Ht(8,16,32,32,Ut),new Ht(8,16,128,128,Ut),new Ht(8,32,128,256,Ut),new Ht(32,128,258,1024,Ut),new Ht(32,258,258,4096,Ut)];var Xt={deflateInit:function(t,e){return $t(t,e,_t,15,8,0)},deflateInit2:$t,deflateReset:Pt,deflateResetKeep:Kt,deflateSetHeader:function(t,e){return!t||!t.state||2!==t.state.wrap?dt:(t.state.gzhead=e,lt)},deflate:function(t,e){var r,n,i,a,s;if(!t||!t.state||5>8&255),Nt(n,n.gzhead.time>>16&255),Nt(n,n.gzhead.time>>24&255),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Nt(n,255&n.gzhead.extra.length),Nt(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=at(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,3),n.status=Bt)):(s=_t+(n.w_bits-8<<4)<<8,s|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(s|=32),s+=31-s%31,n.status=Bt,jt(n,s),0!==n.strstart&&(jt(n,t.adler>>>16),jt(n,65535&t.adler)),t.adler=1)),69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending!==n.pending_buf_size));)Nt(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&Mt(t),n.pending+2<=n.pending_buf_size&&(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),t.adler=0,n.status=Bt)):n.status=Bt),0!==n.pending){if(Mt(t),0===t.avail_out)return n.last_flush=-1,lt}else if(0===t.avail_in&&Dt(e)<=Dt(r)&&e!==ht)return Ot(t,-5);if(666===n.status&&0!==t.avail_in)return Ot(t,-5);if(0!==t.avail_in||0!==n.lookahead||e!==ot&&666!==n.status){var o=2===n.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(Zt(t),0===t.lookahead)){if(e===ot)return St;break}if(t.match_length=0,r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):3===n.strategy?function(t,e){for(var r,n,i,a,s=t.window;;){if(t.lookahead<=kt){if(Zt(t),t.lookahead<=kt&&e===ot)return St;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=bt&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=bt?(r=et._tr_tally(t,1,t.match_length-bt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):it[n.level].func(n,e);if(o!==Et&&o!==Ct||(n.status=666),o===St||o===Et)return 0===t.avail_out&&(n.last_flush=-1),lt;if(o===At&&(1===e?et._tr_align(n):5!==e&&(et._tr_stored_block(n,0,0,!1),3===e&&(Tt(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Mt(t),0===t.avail_out))return n.last_flush=-1,lt}return e!==ht?lt:n.wrap<=0?1:(2===n.wrap?(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),Nt(n,t.adler>>16&255),Nt(n,t.adler>>24&255),Nt(n,255&t.total_in),Nt(n,t.total_in>>8&255),Nt(n,t.total_in>>16&255),Nt(n,t.total_in>>24&255)):(jt(n,t.adler>>>16),jt(n,65535&t.adler)),Mt(t),0=r.w_size&&(0===a&&(Tt(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new R.Buf8(r.w_size),R.arraySet(l,e,d-r.w_size,r.w_size,0),e=l,d=r.w_size),s=t.avail_in,o=t.next_in,h=t.input,t.avail_in=d,t.next_in=0,t.input=e,Zt(r);r.lookahead>=bt;){for(n=r.strstart,i=r.lookahead-(bt-1);r.ins_h=(r.ins_h<>>6:(r<65536?e[i++]=224|r>>>12:(e[i++]=240|r>>>18,e[i++]=128|r>>>12&63),e[i++]=128|r>>>6&63),e[i++]=128|63&r);return e},buf2binstring:function(t){return Jt(t,t.length)},binstring2buf:function(t){for(var e=new R.Buf8(t.length),r=0,n=e.length;r>10&1023,a[s++]=56320|1023&r)}return Jt(a,s)},utf8border:function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return!(r<0)&&0!==r&&r+Yt[t[r]]>e?r:e}};var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},te=Object.prototype.toString,ee=0,re=-1,ne=0,ie=8;function ae(t){if(!(this instanceof ae))return new ae(t);this.options=R.assign({level:re,method:ie,chunkSize:16384,windowBits:15,memLevel:8,strategy:ne,to:""},t||{});var e=this.options;if(e.raw&&0u?(p=T[M+s[w]],E[C+s[w]]):(p=96,0),h=1<>z)+(l-=h)]=_<<24|p<<16|g|0,0!==l;);for(h=1<>=1;if(0!==h?(A&=h-1,A+=h):A=0,w++,0==--O[m]){if(m===b)break;m=e[r+s[w]]}if(k>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function be(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new R.Buf16(320),this.work=new R.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function ke(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=ve,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new R.Buf32(me),e.distcode=e.distdyn=new R.Buf32(we),e.sane=1,e.back=-1,pe):ge}function xe(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,ke(t)):ge}function ze(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=a.wsize?(R.arraySet(a.window,e,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n<(i=a.wsize-a.wnext)&&(i=n),R.arraySet(a.window,e,r-n,i,a.wnext),(n-=i)?(R.arraySet(a.window,e,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=at(r.check,A,2,0),d=l=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&l)){t.msg="unknown compression method",r.mode=30;break}if(d-=4,k=8+(15&(l>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=3;case 3:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>8&255,A[2]=l>>>16&255,A[3]=l>>>24&255,r.check=at(r.check,A,4,0)),d=l=0,r.mode=4;case 4:for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>8),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=5;case 5:if(1024&r.flags){for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>>8&255,r.check=at(r.check,A,2,0)),d=l=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(u=r.length)&&(u=o),u&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),R.arraySet(r.head.extra,n,a,u,k)),512&r.flags&&(r.check=at(r.check,n,u,a)),o-=u,a+=u,r.length-=u),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(u=0;k=n[a+u++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&u>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>=7&d,d-=7&d,r.mode=27;break}for(;d<3;){if(0===o)break t;o--,l+=n[a++]<>>=1)){case 0:r.mode=14;break;case 1:if(!function(t){if(Ee){var e;for(Se=new R.Buf32(512),Ae=new R.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ce(ue,t.lens,0,288,Se,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ce(_e,t.lens,0,32,Ae,0,t.work,{bits:5}),Ee=!1}t.lencode=Se,t.lenbits=9,t.distcode=Ae,t.distbits=5}(r),r.mode=20,6!==e)break;l>>>=2,d-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}l>>>=2,d-=2;break;case 14:for(l>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,l+=n[a++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&l,d=l=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(u=r.length){if(o>>=5,d-=5,r.ndist=1+(31&l),l>>>=5,d-=5,r.ncode=4+(15&l),l>>>=4,d-=4,286>>=3,d-=3}for(;r.have<19;)r.lens[E[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,z={bits:r.lenbits},x=ce(0,r.lens,0,19,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=g,d-=g,r.lens[r.have++]=m;else{if(16===m){for(B=g+2;d>>=g,d-=g,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],u=3+(3&l),l>>>=2,d-=2}else if(17===m){for(B=g+3;d>>=g)),l>>>=3,d-=3}else{for(B=g+7;d>>=g)),l>>>=7,d-=7}if(r.have+u>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;u--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,z={bits:r.lenbits},x=ce(ue,r.lens,0,r.nlen,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,z={bits:r.distbits},x=ce(_e,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,z),r.distbits=z.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=s,t.avail_out=h,t.next_in=a,t.avail_in=o,r.hold=l,r.bits=d,function(t,e){var r,n,i,a,s,o,h=t.state,l=t.next_in,d=t.input,f=l+(t.avail_in-5),c=t.next_out,u=t.output,_=c-(e-t.avail_out),p=c+(t.avail_out-257),g=h.dmax,v=h.wsize,m=h.whave,w=h.wnext,y=h.window,b=h.hold,k=h.bits,x=h.lencode,z=h.distcode,B=(1<>>=n=r>>>24,k-=n,0===(n=r>>>16&255))u[c++]=65535&r;else{if(!(16&n)){if(0==(64&n)){r=x[(65535&r)+(b&(1<>>=n,k-=n),k<15&&(b+=d[l++]<>>=n=r>>>24,k-=n,!(16&(n=r>>>16&255))){if(0==(64&n)){r=z[(65535&r)+(b&(1<>>=n,k-=n,(n=c-_)>3,b&=(1<<(k-=i<<3))-1,t.next_in=l,t.next_out=c,t.avail_in=l>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,r.length=m,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=12;break}if(64&v){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;v=(S=r.distcode[l&(1<>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,64&v){t.msg="invalid distance code",r.mode=30;break}r.offset=m,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(u=c-h,r.offset>u){if((u=r.offset-u)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}_=u>r.wnext?(u-=r.wnext,r.wsize-u):r.wnext-u,u>r.length&&(u=r.length),p=r.window}else p=i,_=s-r.offset,u=r.length;for(h>16&255,s[o++]=e>>8&255,s[o++]=255&e;2===a&&(e=Ke[t.charCodeAt(r)]<<2|Ke[t.charCodeAt(r+1)]>>4,s[o++]=255&e);1===a&&(e=Ke[t.charCodeAt(r)]<<10|Ke[t.charCodeAt(r+1)]<<4|Ke[t.charCodeAt(r+2)]>>2,s[o++]=e>>8&255,s[o++]=255&e);return s},He=function(t){for(var e,r=t.length,n=r%3,i=[],a=0,s=r-n;a>18&63]+Le[t>>12&63]+Le[t>>6&63]+Le[63&t]}(n));return i.join("")}(t,a,s>2]+Le[e<<4&63]+"==")):2==n&&(e=(t[r-2]<<8)+t[r-1],i.push(Le[e>>10]+Le[e>>4&63]+Le[e<<2&63]+"="));return i.join("")},Le=[],Ke=[],Pe="undefined"!=typeof Uint8Array?Uint8Array:Array,$e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Xe=0,qe=$e.length;Xe>6|192):(e+=String.fromCharCode(n>>12|224),e+=String.fromCharCode(n>>6&63|128)),e+=String.fromCharCode(63&n|128))}return e}(t);l>2,a=(3&e)<<4|(r=t.charCodeAt(l++))>>4,s=(15&r)<<2|(n=t.charCodeAt(l++))>>6,o=63&n,isNaN(r)?s=o=64:isNaN(n)&&(o=64),h=h+Ge.charAt(i)+Ge.charAt(a)+Ge.charAt(s)+Ge.charAt(o);return h},Je.prototype.decode=function(t){var e,r,n,i,a,s,o="",h=0;for(t=t.replace(/[^A-Za-z0-9+/=]/g,"");h>4,r=(15&i)<<4|(a=Ge.indexOf(t.charAt(h++)))>>2,n=(3&a)<<6|(s=Ge.indexOf(t.charAt(h++))),o+=String.fromCharCode(e),64!==a&&(o+=String.fromCharCode(r)),64!==s&&(o+=String.fromCharCode(n));return o=function(t){for(var e="",r=0,n=0,i=0,a=0;r>>32-e}function l(t,e){var r=2147483648&t,n=2147483648&e,i=1073741824&t,a=1073741824&e,s=(1073741823&t)+(1073741823&e);return i&a?2147483648^s^r^n:i|a?1073741824&s?3221225472^s^r^n:1073741824^s^r^n:s^r^n}function r(t,e,r,n,i,a,s){var o;return t=l(t,l(l((o=e)&r|~o&n,i),s)),l(h(t,a),e)}function n(t,e,r,n,i,a,s){var o;return t=l(t,l(l(e&(o=n)|r&~o,i),s)),l(h(t,a),e)}function i(t,e,r,n,i,a,s){return t=l(t,l(l(e^r^n,i),s)),l(h(t,a),e)}function a(t,e,r,n,i,a,s){return t=l(t,l(l(r^(e|~n),i),s)),l(h(t,a),e)}function s(t){for(var e="",r="",n=0;n<=3;n++)e+=(r="0"+(t>>>8*n&255).toString(16)).substr(r.length-2,2);return e}for(var o,d,f,c,u=function(t){for(var e,r=t.length,n=r+8,i=16*(1+(n-n%64)/64),a=Array(i-1),s=0,o=0;o>>29,a}(t),_=1732584193,p=4023233417,g=2562383102,v=271733878,m=0;m>>2]>>>24-a%4*8&255;e[n+a>>>2]|=s<<24-(n+a)%4*8}else for(a=0;a>>2]=r[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=d.ceil(e/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>16)&n)<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n;return t/=4294967296,(t+=.5)*(.5>>2]>>>24-i%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new f.init(r,e/2)}},o=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new f.init(r,e)}},h=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(o.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return o.parse(unescape(encodeURIComponent(t)))}},l=e.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,r=e.words,n=e.sigBytes,i=this.blockSize,a=n/(4*i),s=(a=t?d.ceil(a):d.max((0|a)-this._minBufferSize,0))*i,o=d.min(4*s,n);if(s){for(var h=0;h>>2]>>>24-a%4*8&255)<<16|(e[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|e[a+2>>>2]>>>24-(a+2)%4*8&255,o=0;o<4&&a+.75*o>>6*(3-o)&63));var h=n.charAt(64);if(h)for(;i.length%4;)i.push(h);return i.join("")},parse:function(t){var e=t.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var i=0;i>>6-o%4*2,a[s>>>2]|=(n|i)<<24-s%4*8,s++)}return h.create(a,s)}(t,e,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),r.enc.Base64)}),e(function(t,e){var s;t.exports=(s=n,function(d){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,S=[];!function(){for(var t=0;t<64;t++)S[t]=4294967296*d.abs(d.sin(t+1))|0}();var a=i.MD5=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var a=this._hash.words,s=t[e+0],o=t[e+1],h=t[e+2],l=t[e+3],d=t[e+4],f=t[e+5],c=t[e+6],u=t[e+7],_=t[e+8],p=t[e+9],g=t[e+10],v=t[e+11],m=t[e+12],w=t[e+13],y=t[e+14],b=t[e+15],k=A(k=a[0],B=a[1],z=a[2],x=a[3],s,7,S[0]),x=A(x,k,B,z,o,12,S[1]),z=A(z,x,k,B,h,17,S[2]),B=A(B,z,x,k,l,22,S[3]);k=A(k,B,z,x,d,7,S[4]),x=A(x,k,B,z,f,12,S[5]),z=A(z,x,k,B,c,17,S[6]),B=A(B,z,x,k,u,22,S[7]),k=A(k,B,z,x,_,7,S[8]),x=A(x,k,B,z,p,12,S[9]),z=A(z,x,k,B,g,17,S[10]),B=A(B,z,x,k,v,22,S[11]),k=A(k,B,z,x,m,7,S[12]),x=A(x,k,B,z,w,12,S[13]),z=A(z,x,k,B,y,17,S[14]),k=E(k,B=A(B,z,x,k,b,22,S[15]),z,x,o,5,S[16]),x=E(x,k,B,z,c,9,S[17]),z=E(z,x,k,B,v,14,S[18]),B=E(B,z,x,k,s,20,S[19]),k=E(k,B,z,x,f,5,S[20]),x=E(x,k,B,z,g,9,S[21]),z=E(z,x,k,B,b,14,S[22]),B=E(B,z,x,k,d,20,S[23]),k=E(k,B,z,x,p,5,S[24]),x=E(x,k,B,z,y,9,S[25]),z=E(z,x,k,B,l,14,S[26]),B=E(B,z,x,k,_,20,S[27]),k=E(k,B,z,x,w,5,S[28]),x=E(x,k,B,z,h,9,S[29]),z=E(z,x,k,B,u,14,S[30]),k=C(k,B=E(B,z,x,k,m,20,S[31]),z,x,f,4,S[32]),x=C(x,k,B,z,_,11,S[33]),z=C(z,x,k,B,v,16,S[34]),B=C(B,z,x,k,y,23,S[35]),k=C(k,B,z,x,o,4,S[36]),x=C(x,k,B,z,d,11,S[37]),z=C(z,x,k,B,u,16,S[38]),B=C(B,z,x,k,g,23,S[39]),k=C(k,B,z,x,w,4,S[40]),x=C(x,k,B,z,s,11,S[41]),z=C(z,x,k,B,l,16,S[42]),B=C(B,z,x,k,c,23,S[43]),k=C(k,B,z,x,p,4,S[44]),x=C(x,k,B,z,m,11,S[45]),z=C(z,x,k,B,b,16,S[46]),k=O(k,B=C(B,z,x,k,h,23,S[47]),z,x,s,6,S[48]),x=O(x,k,B,z,u,10,S[49]),z=O(z,x,k,B,y,15,S[50]),B=O(B,z,x,k,f,21,S[51]),k=O(k,B,z,x,m,6,S[52]),x=O(x,k,B,z,l,10,S[53]),z=O(z,x,k,B,g,15,S[54]),B=O(B,z,x,k,o,21,S[55]),k=O(k,B,z,x,_,6,S[56]),x=O(x,k,B,z,b,10,S[57]),z=O(z,x,k,B,c,15,S[58]),B=O(B,z,x,k,w,21,S[59]),k=O(k,B,z,x,d,6,S[60]),x=O(x,k,B,z,v,10,S[61]),z=O(z,x,k,B,h,15,S[62]),B=O(B,z,x,k,p,21,S[63]),a[0]=a[0]+k|0,a[1]=a[1]+B|0,a[2]=a[2]+z|0,a[3]=a[3]+x|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32;var i=d.floor(r/4294967296),a=r;e[15+(64+n>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),e[14+(64+n>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,o=s.words,h=0;h<4;h++){var l=o[h];o[h]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});function A(t,e,r,n,i,a,s){var o=t+(e&r|~e&n)+i+s;return(o<>>32-a)+e}function E(t,e,r,n,i,a,s){var o=t+(e&n|r&~n)+i+s;return(o<>>32-a)+e}function C(t,e,r,n,i,a,s){var o=t+(e^r^n)+i+s;return(o<>>32-a)+e}function O(t,e,r,n,i,a,s){var o=t+(r^(e|~n))+i+s;return(o<>>32-a)+e}t.MD5=n._createHelper(a),t.HmacMD5=n._createHmacHelper(a)}(Math),s.MD5)}),e(function(t,e){var s;t.exports=(s=n,function(){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,f=[],a=i.SHA1=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r,n=this._hash.words,i=n[0],a=n[1],s=n[2],o=n[3],h=n[4],l=0;l<80;l++){l<16?f[l]=0|t[e+l]:(r=f[l-3]^f[l-8]^f[l-14]^f[l-16],f[l]=r<<1|r>>>31);var d=(i<<5|i>>>27)+h+f[l];d+=l<20?1518500249+(a&s|~a&o):l<40?1859775393+(a^s^o):l<60?(a&s|a&o|s&o)-1894007588:(a^s^o)-899497514,h=o,o=s,s=a<<30|a>>>2,a=i,i=d}n[0]=n[0]+i|0,n[1]=n[1]+a|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+h|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(64+n>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+n>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=n._createHelper(a),t.HmacSHA1=n._createHmacHelper(a)}(),s.SHA1)}),e(function(t,e){var r;t.exports=(r=n,void function(){var t=r.lib.Base,l=r.enc.Utf8;r.algo.HMAC=t.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=l.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),a=this._iKey=e.clone(),s=i.words,o=a.words,h=0;h>>2];t.sigBytes-=e}},g=(e.BlockCipher=o.extend({cfg:o.cfg.extend({mode:u,padding:p}),reset:function(){o.reset.call(this);var t,e=this.cfg,r=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(n,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?h.create([1398893684,1701076831]).concat(r).concat(e):e).toString(a)},parse:function(t){var e,r=a.parse(t),n=r.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=h.create(n.slice(2,4)),n.splice(0,4),r.sigBytes-=16),g.create({ciphertext:r,salt:e})}},m=e.SerializableCipher=r.extend({cfg:r.extend({format:v}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),a=i.finalize(e),s=i.cfg;return g.create({ciphertext:a,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=(t.kdf={}).OpenSSL={execute:function(t,e,r,n){n=n||h.random(8);var i=s.create({keySize:e+r}).compute(t,n),a=h.create(i.words.slice(e),4*r);return i.sigBytes=4*e,g.create({key:i,iv:a,salt:n})}},y=e.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:w}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var a=m.encrypt.call(this,t,e,i.key,n);return a.mixIn(i),a},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,m.decrypt.call(this,t,e,i.key,n)}})}())}),e(function(t,e){var i;t.exports=(i=n,function(){var t=i,e=t.lib.BlockCipher,r=t.algo,l=[],d=[],f=[],c=[],u=[],_=[],p=[],g=[],v=[],m=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=0,n=0,e=0;e<256;e++){var i=(i=n^n<<1^n<<2^n<<3^n<<4)>>>8^255&i^99;l[r]=i;var a=t[d[i]=r],s=t[a],o=t[s],h=257*t[i]^16843008*i;f[r]=h<<24|h>>>8,c[r]=h<<16|h>>>16,u[r]=h<<8|h>>>24,_[r]=h,h=16843009*o^65537*s^257*a^16843008*r,p[i]=h<<24|h>>>8,g[i]=h<<16|h>>>16,v[i]=h<<8|h>>>24,m[i]=h,r?(r=a^t[t[t[o^a]]],n^=t[t[n]]):r=n=1}}();var w=[0,1,2,4,8,16,32,64,128,27,54],n=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*(1+(this._nRounds=6+r)),i=this._keySchedule=[],a=0;a>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h]):(h=l[(h=h<<8|h>>>24)>>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h],h^=w[a/r|0]<<24),i[a]=i[a-r]^h);for(var s=this._invKeySchedule=[],o=0;o>>24]]^g[l[h>>>16&255]]^v[l[h>>>8&255]]^m[l[255&h]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,c,u,_,l)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,g,v,m,d),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,a,s,o){for(var h=this._nRounds,l=t[e]^r[0],d=t[e+1]^r[1],f=t[e+2]^r[2],c=t[e+3]^r[3],u=4,_=1;_>>24]^i[d>>>16&255]^a[f>>>8&255]^s[255&c]^r[u++],g=n[d>>>24]^i[f>>>16&255]^a[c>>>8&255]^s[255&l]^r[u++],v=n[f>>>24]^i[c>>>16&255]^a[l>>>8&255]^s[255&d]^r[u++],m=n[c>>>24]^i[l>>>16&255]^a[d>>>8&255]^s[255&f]^r[u++],l=p,d=g,f=v,c=m;p=(o[l>>>24]<<24|o[d>>>16&255]<<16|o[f>>>8&255]<<8|o[255&c])^r[u++],g=(o[d>>>24]<<24|o[f>>>16&255]<<16|o[c>>>8&255]<<8|o[255&l])^r[u++],v=(o[f>>>24]<<24|o[c>>>16&255]<<16|o[l>>>8&255]<<8|o[255&d])^r[u++],m=(o[c>>>24]<<24|o[l>>>16&255]<<16|o[d>>>8&255]<<8|o[255&f])^r[u++],t[e]=p,t[e+1]=g,t[e+2]=v,t[e+3]=m},keySize:8});t.AES=e._createHelper(n)}(),i.AES)})),d=e(function(t,e){var r;t.exports=((r=n).mode.ECB=function(){var t=r.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),t.Decryptor=t.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),t}(),r.mode.ECB)}),R=e(function(t,e){var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;e.assign=function(t){for(var e,r,n=Array.prototype.slice.call(arguments,1);n.length;){var i=n.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var a in i)e=i,r=a,Object.prototype.hasOwnProperty.call(e,r)&&(t[a]=i[a])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,n,i){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+n),i);else for(var a=0;a>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function H(t,e,r){t.bi_valid>i-r?(t.bi_buf|=e<>i-t.bi_valid,t.bi_valid+=r-i):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function P(t,e,r){for(var n,i=new Array(m+1),a=0,s=1;s<=m;s++)i[s]=a=a+r[s-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=K(i[o]++,o))}}function $(t){for(var e=0;e<_;e++)t.dyn_ltree[2*e]=0;for(e=0;e>1;1<=r;r--)W(t,a,r);for(i=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],W(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,W(t,a,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){for(var r,n,i,a,s,o=e.dyn_tree,h=e.max_code,l=e.stat_desc.static_tree,d=e.stat_desc.has_stree,f=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,u=e.stat_desc.max_length,_=0,p=0;p<=m;p++)t.bl_count[p]=0;for(o[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r>=7;a>>=1)if(1&e&&0!==t.dyn_ltree[2*r])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return f;for(r=32;r>>3,(a=t.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==e?tt(t,e,r,n):4===t.strategy||a===i?(H(t,2+(n?1:0),3),Y(t,E,C)):(H(t,4+(n?1:0),3),function(t,e,r,n){var i;for(H(t,e-257,5),H(t,r-1,5),H(t,n-4,4),i=0;i>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(D[r]+u+1)]++,t.dyn_dtree[2*I(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){var e;H(t,2,3),L(t,y,E),16===(e=t).bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}};var rt=function(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:t>>>1;e[r]=t}return e}();var it,at=function(t,e,r,n){var i=nt,a=n+r;t^=-1;for(var s=n;s>>8^i[255&(t^e[s])];return-1^t},st={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},ot=0,ht=4,lt=0,dt=-2,ft=-1,ct=4,ut=2,_t=8,pt=9,gt=286,vt=30,mt=19,wt=2*gt+1,yt=15,bt=3,kt=258,xt=kt+bt+1,zt=42,Bt=113,St=1,At=2,Et=3,Ct=4;function Ot(t,e){return t.msg=st[e],e}function Dt(t){return(t<<1)-(4t.avail_out&&(r=t.avail_out),0!==r&&(R.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function Rt(t,e){et._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Mt(t.strm)}function Nt(t,e){t.pending_buf[t.pending++]=e}function jt(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function Ft(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-xt?t.strstart-(t.w_size-xt):0,l=t.window,d=t.w_mask,f=t.prev,c=t.strstart+kt,u=l[a+s-1],_=l[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(r=e)+s]===_&&l[r+s-1]===u&&l[r]===l[a]&&l[++r]===l[a+1]){a+=2,r++;do{}while(l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&ah&&0!=--i);return s<=t.lookahead?s:t.lookahead}function Zt(t){var e,r,n,i,a,s,o,h,l,d,f=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-xt)){for(R.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;n=t.head[--e],t.head[e]=f<=n?n-f:0,--r;);for(e=r=f;n=t.prev[--e],t.prev[e]=f<=n?n-f:0,--r;);i+=f}if(0===t.strm.avail_in)break;if(s=t.strm,o=t.window,h=t.strstart+t.lookahead,l=i,d=void 0,d=s.avail_in,l=bt)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt)if(n=et._tr_tally(t,t.strstart-t.match_start,t.match_length-bt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=bt){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt&&t.match_length<=t.prev_length){for(i=t.strstart+t.lookahead-bt,n=et._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-bt),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=i&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Zt(t),0===t.lookahead&&e===ot)return St;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Rt(t,!1),0===t.strm.avail_out))return St;if(t.strstart-t.block_start>=t.w_size-xt&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):(t.strstart>t.block_start&&(Rt(t,!1),t.strm.avail_out),St)}),new Ht(4,4,8,4,It),new Ht(4,5,16,8,It),new Ht(4,6,32,32,It),new Ht(4,4,16,16,Ut),new Ht(8,16,32,32,Ut),new Ht(8,16,128,128,Ut),new Ht(8,32,128,256,Ut),new Ht(32,128,258,1024,Ut),new Ht(32,258,258,4096,Ut)];var Xt={deflateInit:function(t,e){return $t(t,e,_t,15,8,0)},deflateInit2:$t,deflateReset:Pt,deflateResetKeep:Kt,deflateSetHeader:function(t,e){return!t||!t.state||2!==t.state.wrap?dt:(t.state.gzhead=e,lt)},deflate:function(t,e){var r,n,i,a,s;if(!t||!t.state||5>8&255),Nt(n,n.gzhead.time>>16&255),Nt(n,n.gzhead.time>>24&255),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Nt(n,255&n.gzhead.extra.length),Nt(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=at(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,3),n.status=Bt)):(s=_t+(n.w_bits-8<<4)<<8,s|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(s|=32),s+=31-s%31,n.status=Bt,jt(n,s),0!==n.strstart&&(jt(n,t.adler>>>16),jt(n,65535&t.adler)),t.adler=1)),69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending!==n.pending_buf_size));)Nt(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&Mt(t),n.pending+2<=n.pending_buf_size&&(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),t.adler=0,n.status=Bt)):n.status=Bt),0!==n.pending){if(Mt(t),0===t.avail_out)return n.last_flush=-1,lt}else if(0===t.avail_in&&Dt(e)<=Dt(r)&&e!==ht)return Ot(t,-5);if(666===n.status&&0!==t.avail_in)return Ot(t,-5);if(0!==t.avail_in||0!==n.lookahead||e!==ot&&666!==n.status){var o=2===n.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(Zt(t),0===t.lookahead)){if(e===ot)return St;break}if(t.match_length=0,r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):3===n.strategy?function(t,e){for(var r,n,i,a,s=t.window;;){if(t.lookahead<=kt){if(Zt(t),t.lookahead<=kt&&e===ot)return St;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=bt&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=bt?(r=et._tr_tally(t,1,t.match_length-bt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):it[n.level].func(n,e);if(o!==Et&&o!==Ct||(n.status=666),o===St||o===Et)return 0===t.avail_out&&(n.last_flush=-1),lt;if(o===At&&(1===e?et._tr_align(n):5!==e&&(et._tr_stored_block(n,0,0,!1),3===e&&(Tt(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Mt(t),0===t.avail_out))return n.last_flush=-1,lt}return e!==ht?lt:n.wrap<=0?1:(2===n.wrap?(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),Nt(n,t.adler>>16&255),Nt(n,t.adler>>24&255),Nt(n,255&t.total_in),Nt(n,t.total_in>>8&255),Nt(n,t.total_in>>16&255),Nt(n,t.total_in>>24&255)):(jt(n,t.adler>>>16),jt(n,65535&t.adler)),Mt(t),0=r.w_size&&(0===a&&(Tt(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new R.Buf8(r.w_size),R.arraySet(l,e,d-r.w_size,r.w_size,0),e=l,d=r.w_size),s=t.avail_in,o=t.next_in,h=t.input,t.avail_in=d,t.next_in=0,t.input=e,Zt(r);r.lookahead>=bt;){for(n=r.strstart,i=r.lookahead-(bt-1);r.ins_h=(r.ins_h<>>6:(r<65536?e[i++]=224|r>>>12:(e[i++]=240|r>>>18,e[i++]=128|r>>>12&63),e[i++]=128|r>>>6&63),e[i++]=128|63&r);return e},buf2binstring:function(t){return Jt(t,t.length)},binstring2buf:function(t){for(var e=new R.Buf8(t.length),r=0,n=e.length;r>10&1023,a[s++]=56320|1023&r)}return Jt(a,s)},utf8border:function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return!(r<0)&&0!==r&&r+Yt[t[r]]>e?r:e}};var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},te=Object.prototype.toString,ee=0,re=-1,ne=0,ie=8;function ae(t){if(!(this instanceof ae))return new ae(t);this.options=R.assign({level:re,method:ie,chunkSize:16384,windowBits:15,memLevel:8,strategy:ne,to:""},t||{});var e=this.options;if(e.raw&&0u?(p=T[M+s[w]],E[C+s[w]]):(p=96,0),h=1<>z)+(l-=h)]=_<<24|p<<16|g|0,0!==l;);for(h=1<>=1;if(0!==h?(A&=h-1,A+=h):A=0,w++,0==--O[m]){if(m===b)break;m=e[r+s[w]]}if(k>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function be(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new R.Buf16(320),this.work=new R.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function ke(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=ve,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new R.Buf32(me),e.distcode=e.distdyn=new R.Buf32(we),e.sane=1,e.back=-1,pe):ge}function xe(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,ke(t)):ge}function ze(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=a.wsize?(R.arraySet(a.window,e,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n<(i=a.wsize-a.wnext)&&(i=n),R.arraySet(a.window,e,r-n,i,a.wnext),(n-=i)?(R.arraySet(a.window,e,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=at(r.check,A,2,0),d=l=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&l)){t.msg="unknown compression method",r.mode=30;break}if(d-=4,k=8+(15&(l>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=3;case 3:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>8&255,A[2]=l>>>16&255,A[3]=l>>>24&255,r.check=at(r.check,A,4,0)),d=l=0,r.mode=4;case 4:for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>8),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=5;case 5:if(1024&r.flags){for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>>8&255,r.check=at(r.check,A,2,0)),d=l=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(u=r.length)&&(u=o),u&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),R.arraySet(r.head.extra,n,a,u,k)),512&r.flags&&(r.check=at(r.check,n,u,a)),o-=u,a+=u,r.length-=u),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(u=0;k=n[a+u++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&u>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>=7&d,d-=7&d,r.mode=27;break}for(;d<3;){if(0===o)break t;o--,l+=n[a++]<>>=1)){case 0:r.mode=14;break;case 1:if(!function(t){if(Ee){var e;for(Se=new R.Buf32(512),Ae=new R.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ce(ue,t.lens,0,288,Se,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ce(_e,t.lens,0,32,Ae,0,t.work,{bits:5}),Ee=!1}t.lencode=Se,t.lenbits=9,t.distcode=Ae,t.distbits=5}(r),r.mode=20,6!==e)break;l>>>=2,d-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}l>>>=2,d-=2;break;case 14:for(l>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,l+=n[a++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&l,d=l=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(u=r.length){if(o>>=5,d-=5,r.ndist=1+(31&l),l>>>=5,d-=5,r.ncode=4+(15&l),l>>>=4,d-=4,286>>=3,d-=3}for(;r.have<19;)r.lens[E[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,z={bits:r.lenbits},x=ce(0,r.lens,0,19,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=g,d-=g,r.lens[r.have++]=m;else{if(16===m){for(B=g+2;d>>=g,d-=g,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],u=3+(3&l),l>>>=2,d-=2}else if(17===m){for(B=g+3;d>>=g)),l>>>=3,d-=3}else{for(B=g+7;d>>=g)),l>>>=7,d-=7}if(r.have+u>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;u--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,z={bits:r.lenbits},x=ce(ue,r.lens,0,r.nlen,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,z={bits:r.distbits},x=ce(_e,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,z),r.distbits=z.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=s,t.avail_out=h,t.next_in=a,t.avail_in=o,r.hold=l,r.bits=d,function(t,e){var r,n,i,a,s,o,h=t.state,l=t.next_in,d=t.input,f=l+(t.avail_in-5),c=t.next_out,u=t.output,_=c-(e-t.avail_out),p=c+(t.avail_out-257),g=h.dmax,v=h.wsize,m=h.whave,w=h.wnext,y=h.window,b=h.hold,k=h.bits,x=h.lencode,z=h.distcode,B=(1<>>=n=r>>>24,k-=n,0===(n=r>>>16&255))u[c++]=65535&r;else{if(!(16&n)){if(0==(64&n)){r=x[(65535&r)+(b&(1<>>=n,k-=n),k<15&&(b+=d[l++]<>>=n=r>>>24,k-=n,!(16&(n=r>>>16&255))){if(0==(64&n)){r=z[(65535&r)+(b&(1<>>=n,k-=n,(n=c-_)>3,b&=(1<<(k-=i<<3))-1,t.next_in=l,t.next_out=c,t.avail_in=l>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,r.length=m,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=12;break}if(64&v){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;v=(S=r.distcode[l&(1<>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,64&v){t.msg="invalid distance code",r.mode=30;break}r.offset=m,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(u=c-h,r.offset>u){if((u=r.offset-u)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}_=u>r.wnext?(u-=r.wnext,r.wsize-u):r.wnext-u,u>r.length&&(u=r.length),p=r.window}else p=i,_=s-r.offset,u=r.length;for(h>16&255,s[o++]=e>>8&255,s[o++]=255&e;2===a&&(e=Ke[t.charCodeAt(r)]<<2|Ke[t.charCodeAt(r+1)]>>4,s[o++]=255&e);1===a&&(e=Ke[t.charCodeAt(r)]<<10|Ke[t.charCodeAt(r+1)]<<4|Ke[t.charCodeAt(r+2)]>>2,s[o++]=e>>8&255,s[o++]=255&e);return s},He=function(t){for(var e,r=t.length,n=r%3,i=[],a=0,s=r-n;a>18&63]+Le[t>>12&63]+Le[t>>6&63]+Le[63&t]}(n));return i.join("")}(t,a,s>2]+Le[e<<4&63]+"==")):2==n&&(e=(t[r-2]<<8)+t[r-1],i.push(Le[e>>10]+Le[e>>4&63]+Le[e<<2&63]+"="));return i.join("")},Le=[],Ke=[],Pe="undefined"!=typeof Uint8Array?Uint8Array:Array,$e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Xe=0,qe=$e.length;Xe>6|192):(e+=String.fromCharCode(n>>12|224),e+=String.fromCharCode(n>>6&63|128)),e+=String.fromCharCode(63&n|128))}return e}(t);l>2,a=(3&e)<<4|(r=t.charCodeAt(l++))>>4,s=(15&r)<<2|(n=t.charCodeAt(l++))>>6,o=63&n,isNaN(r)?s=o=64:isNaN(n)&&(o=64),h=h+Ge.charAt(i)+Ge.charAt(a)+Ge.charAt(s)+Ge.charAt(o);return h},Je.prototype.decode=function(t){var e,r,n,i,a,s,o="",h=0;for(t=t.replace(/[^A-Za-z0-9+/=]/g,"");h>4,r=(15&i)<<4|(a=Ge.indexOf(t.charAt(h++)))>>2,n=(3&a)<<6|(s=Ge.indexOf(t.charAt(h++))),o+=String.fromCharCode(e),64!==a&&(o+=String.fromCharCode(r)),64!==s&&(o+=String.fromCharCode(n));return o=function(t){for(var e="",r=0,n=0,i=0,a=0;r>>32-e}function l(t,e){var r=2147483648&t,n=2147483648&e,i=1073741824&t,a=1073741824&e,s=(1073741823&t)+(1073741823&e);return i&a?2147483648^s^r^n:i|a?1073741824&s?3221225472^s^r^n:1073741824^s^r^n:s^r^n}function r(t,e,r,n,i,a,s){var o;return t=l(t,l(l((o=e)&r|~o&n,i),s)),l(h(t,a),e)}function n(t,e,r,n,i,a,s){var o;return t=l(t,l(l(e&(o=n)|r&~o,i),s)),l(h(t,a),e)}function i(t,e,r,n,i,a,s){return t=l(t,l(l(e^r^n,i),s)),l(h(t,a),e)}function a(t,e,r,n,i,a,s){return t=l(t,l(l(r^(e|~n),i),s)),l(h(t,a),e)}function s(t){for(var e="",r="",n=0;n<=3;n++)e+=(r="0"+(t>>>8*n&255).toString(16)).substr(r.length-2,2);return e}for(var o,d,f,c,u=function(t){for(var e,r=t.length,n=r+8,i=16*(1+(n-n%64)/64),a=Array(i-1),s=0,o=0;o>>29,a}(t),_=1732584193,p=4023233417,g=2562383102,v=271733878,m=0;m=l&&(m.push(b({type:"childList",target:t,addedNodes:[o],removedNodes:[o],nextSibling:o.nextSibling,previousSibling:o.previousSibling})),i--),f.b&&a.b&&_(m,o,a.b,f.f),f.a&&3===o.nodeType&&o.nodeValue!==a.a&&m.push(b({type:"characterData",target:o,oldValue:a.a})),f.g&&v(o,a)}function v(e,t){for(var n,r,i,o,a,s=e.childNodes,l=t.c,u=s.length,c=l?l.length:0,d=0,p=0,h=0;p>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);u>2,o=(3&t)<<4|(n=e.charCodeAt(u++))>>4,a=(15&n)<<2|(r=e.charCodeAt(u++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),l=l+d.charAt(i)+d.charAt(o)+d.charAt(a)+d.charAt(s);return l},r.prototype.decode=function(e){var t,n,r,i,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&i)<<4|(o=d.indexOf(e.charAt(l++)))>>2,r=(3&o)<<6|(a=d.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function u(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=u(e,u(u((s=t)&n|~s&r,i),a)),u(l(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=u(e,u(u(t&(s=r)|n&~s,i),a)),u(l(e,o),t)}function i(e,t,n,r,i,o,a){return e=u(e,u(u(t^n^r,i),a)),u(l(e,o),t)}function o(e,t,n,r,i,o,a){return e=u(e,u(u(n^(t|~r),i),a)),u(l(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,d,p,h=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),m=1732584193,f=4023233417,g=2562383102,y=271733878,v=0;v",JSON.stringify(t,null,2)),n(t)})}function G(e){return e.split("").reverse().join("")}function q(){!0===F.isHybrid&&(X=st.visitorEventList);var e=ut(B.ele),t=Y(e.path);B.elePath=t.clickPath,B.path=e.path,B.newPath=e.newPath;for(var n,r,i,o,a=[],s=0;sf.base.webstayDuration)return f.base.webstayDuration}else if(18e6o.length){if(!0===n)return!1;var l=i.length-o.length;i.splice(0,l);for(var u=0;up.length){for(var h=d.length-p.length,d=d.splice(h),m=u;0")}var vt=new IntersectionObserver(function(e){clearTimeout(bt);for(var t=0;t=l&&(m.push(b({type:"childList",target:t,addedNodes:[o],removedNodes:[o],nextSibling:o.nextSibling,previousSibling:o.previousSibling})),i--),f.b&&a.b&&_(m,o,a.b,f.f),f.a&&3===o.nodeType&&o.nodeValue!==a.a&&m.push(b({type:"characterData",target:o,oldValue:a.a})),f.g&&v(o,a)}function v(e,t){for(var n,r,i,o,a,s=e.childNodes,l=t.c,u=s.length,c=l?l.length:0,d=0,p=0,h=0;p>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);u>2,o=(3&t)<<4|(n=e.charCodeAt(u++))>>4,a=(15&n)<<2|(r=e.charCodeAt(u++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),l=l+d.charAt(i)+d.charAt(o)+d.charAt(a)+d.charAt(s);return l},r.prototype.decode=function(e){var t,n,r,i,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&i)<<4|(o=d.indexOf(e.charAt(l++)))>>2,r=(3&o)<<6|(a=d.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function u(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=u(e,u(u((s=t)&n|~s&r,i),a)),u(l(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=u(e,u(u(t&(s=r)|n&~s,i),a)),u(l(e,o),t)}function i(e,t,n,r,i,o,a){return e=u(e,u(u(t^n^r,i),a)),u(l(e,o),t)}function o(e,t,n,r,i,o,a){return e=u(e,u(u(n^(t|~r),i),a)),u(l(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,d,p,h=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),m=1732584193,f=4023233417,g=2562383102,y=271733878,v=0;v",JSON.stringify(t,null,2)),n(t)})}function G(e){return e.split("").reverse().join("")}function q(){!0===F.isHybrid&&(X=et.visitorEventList);var e=nt(B.ele),t=Y(e.path);B.elePath=t.clickPath,B.path=e.path,B.newPath=e.newPath;for(var n,r,i,o,a=[],s=0;sf.base.webstayDuration)return f.base.webstayDuration}else if(18e6o.length){if(!0===n)return!1;var l=i.length-o.length;i.splice(0,l);for(var u=0;up.length){for(var h=d.length-p.length,d=d.splice(h),m=u;0")}var dt=new IntersectionObserver(function(e){clearTimeout(ht);for(var t=0;t>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}function _utf8Decode(e){for(var t="",i=0,n=0,r=0,o=0;i>2,o=(3&t)<<4|(i=e.charCodeAt(c++))>>4,a=(15&i)<<2|(n=e.charCodeAt(c++))>>6,s=63&n,isNaN(i)?a=s=64:isNaN(n)&&(s=64),l=l+_keyStr.charAt(r)+_keyStr.charAt(o)+_keyStr.charAt(a)+_keyStr.charAt(s);return l},Util.prototype.decode=function(e){var t,i,n,r,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,i=(15&r)<<4|(o=_keyStr.indexOf(e.charAt(l++)))>>2,n=(3&o)<<6|(a=_keyStr.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(i)),64!==a&&(s+=String.fromCharCode(n));return s=_utf8Decode(s)},Util.prototype.isEmptyObject=function(e){for(var t in e)return!1;return!0},Util.prototype.format=function(e,t){var i=e.getTimezoneOffset(),n={"M+":(e=new Date(e.getTime()+60*i*1e3+288e5)).getMonth()+1,"d+":e.getDate(),"h+":e.getHours(),"m+":e.getMinutes(),"s+":e.getSeconds(),"q+":Math.floor((e.getMonth()+3)/3),"S+":e.getMilliseconds()};for(var r in/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(e.getFullYear()+"").substr(4-RegExp.$1.length))),n)new RegExp("("+r+")").test(t)&&(t=t.replace(RegExp.$1,3===RegExp.$1.length?(""+n[r]).length<3?("00"+n[r]).substr(("00"+n[r]).length-3,("00"+n[r]).length):n[r]:("00"+n[r]).substr((""+n[r]).length)));return t.toString()},Util.prototype.MD5=function(e,t){function l(e,t){return e<>>32-t}function c(e,t){var i=2147483648&e,n=2147483648&t,r=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return r&o?2147483648^a^i^n:r|o?1073741824&a?3221225472^a^i^n:1073741824^a^i^n:a^i^n}function i(e,t,i,n,r,o,a){var s;return e=c(e,c(c((s=t)&i|~s&n,r),a)),c(l(e,o),t)}function n(e,t,i,n,r,o,a){var s;return e=c(e,c(c(t&(s=n)|i&~s,r),a)),c(l(e,o),t)}function r(e,t,i,n,r,o,a){return e=c(e,c(c(t^i^n,r),a)),c(l(e,o),t)}function o(e,t,i,n,r,o,a){return e=c(e,c(c(i^(t|~n),r),a)),c(l(e,o),t)}function a(e){for(var t="",i="",n=0;n<=3;n++)t+=(i="0"+(e>>>8*n&255).toString(16)).substr(i.length-2,2);return t}for(var s,u,p,d,g=function(e){for(var t,i=e.length,n=i+8,r=16*(1+(n-n%64)/64),o=Array(r-1),a=0,s=0;s>>29,o}(e),f=1732584193,m=4023233417,y=2562383102,h=271733878,b=0;bo.length){if(!0===i)return!1;var l=r.length-o.length;r.splice(0,l);for(var c=0;cd.length){for(var g=p.length-d.length,p=p.splice(g),f=c;0")}function checkNewPathBase(e,t){if(!t)return!!e;var i=JSON.parse(JSON.stringify(e)),n=JSON.parse(JSON.stringify(t));i.reverse(),n.reverse();var r=backEasyPath(i),o=backEasyPath(n);return-1",JSON.stringify(i,null,2)),n(i)})}ajax.prototype.get=function(e){var t=[];for(var i in e.data)t.push(i+"="+encodeURIComponent(e.data[i]));var n=-1baseConfig.base.webstayDuration)return baseConfig.base.webstayDuration}else if(18e6t&&e.length>>0,i=Number(arguments[1])||0;for((i=i<0?Math.ceil(i):Math.floor(i))<0&&(i+=t);i>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}function _utf8Decode(e){for(var t="",i=0,n=0,r=0,o=0;i>2,o=(3&t)<<4|(i=e.charCodeAt(c++))>>4,a=(15&i)<<2|(n=e.charCodeAt(c++))>>6,s=63&n,isNaN(i)?a=s=64:isNaN(n)&&(s=64),l=l+_keyStr.charAt(r)+_keyStr.charAt(o)+_keyStr.charAt(a)+_keyStr.charAt(s);return l},Util.prototype.decode=function(e){var t,i,n,r,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,i=(15&r)<<4|(o=_keyStr.indexOf(e.charAt(l++)))>>2,n=(3&o)<<6|(a=_keyStr.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(i)),64!==a&&(s+=String.fromCharCode(n));return s=_utf8Decode(s)},Util.prototype.isEmptyObject=function(e){for(var t in e)return!1;return!0},Util.prototype.format=function(e,t){var i=e.getTimezoneOffset(),n={"M+":(e=new Date(e.getTime()+60*i*1e3+288e5)).getMonth()+1,"d+":e.getDate(),"h+":e.getHours(),"m+":e.getMinutes(),"s+":e.getSeconds(),"q+":Math.floor((e.getMonth()+3)/3),"S+":e.getMilliseconds()};for(var r in/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(e.getFullYear()+"").substr(4-RegExp.$1.length))),n)new RegExp("("+r+")").test(t)&&(t=t.replace(RegExp.$1,3===RegExp.$1.length?(""+n[r]).length<3?("00"+n[r]).substr(("00"+n[r]).length-3,("00"+n[r]).length):n[r]:("00"+n[r]).substr((""+n[r]).length)));return t.toString()},Util.prototype.MD5=function(e,t){function l(e,t){return e<>>32-t}function c(e,t){var i=2147483648&e,n=2147483648&t,r=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return r&o?2147483648^a^i^n:r|o?1073741824&a?3221225472^a^i^n:1073741824^a^i^n:a^i^n}function i(e,t,i,n,r,o,a){var s;return e=c(e,c(c((s=t)&i|~s&n,r),a)),c(l(e,o),t)}function n(e,t,i,n,r,o,a){var s;return e=c(e,c(c(t&(s=n)|i&~s,r),a)),c(l(e,o),t)}function r(e,t,i,n,r,o,a){return e=c(e,c(c(t^i^n,r),a)),c(l(e,o),t)}function o(e,t,i,n,r,o,a){return e=c(e,c(c(i^(t|~n),r),a)),c(l(e,o),t)}function a(e){for(var t="",i="",n=0;n<=3;n++)t+=(i="0"+(e>>>8*n&255).toString(16)).substr(i.length-2,2);return t}for(var s,u,p,d,g=function(e){for(var t,i=e.length,n=i+8,r=16*(1+(n-n%64)/64),o=Array(r-1),a=0,s=0;s>>29,o}(e),f=1732584193,m=4023233417,y=2562383102,h=271733878,b=0;bo.length){if(!0===i)return!1;var l=r.length-o.length;r.splice(0,l);for(var c=0;cd.length){for(var g=p.length-d.length,p=p.splice(g),f=c;0")}function checkNewPathBase(e,t){if(!t)return!!e;var i=JSON.parse(JSON.stringify(e)),n=JSON.parse(JSON.stringify(t));i.reverse(),n.reverse();var r=backEasyPath(i),o=backEasyPath(n);return-1",JSON.stringify(i,null,2)),n(i)})}ajax.prototype.get=function(e){var t=[];for(var i in e.data)t.push(i+"="+encodeURIComponent(e.data[i]));var n=-1baseConfig.base.webstayDuration)return baseConfig.base.webstayDuration}else if(18e6t&&e.length>>0,i=Number(arguments[1])||0;for((i=i<0?Math.ceil(i):Math.floor(i))<0&&(i+=t);i>6|192):(e+=String.fromCharCode(i>>12|224),e+=String.fromCharCode(i>>6&63|128)),e+=String.fromCharCode(63&i|128))}return e}(t);A>2,r=(3&e)<<4|(n=t.charCodeAt(A++))>>4,a=(15&n)<<2|(i=t.charCodeAt(A++))>>6,s=63&i,isNaN(n)?a=s=64:isNaN(i)&&(s=64),l=l+d.charAt(o)+d.charAt(r)+d.charAt(a)+d.charAt(s);return l},t.prototype.decode=function(t){var e,n,i,o,r,a,s="",l=0;for(t=t.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&o)<<4|(r=d.indexOf(t.charAt(l++)))>>2,i=(3&r)<<6|(a=d.indexOf(t.charAt(l++))),s+=String.fromCharCode(e),64!==r&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(i));return s=function(t){for(var e="",n=0,i=0,o=0,r=0;n>>32-e}function A(t,e){var n=2147483648&t,i=2147483648&e,o=1073741824&t,r=1073741824&e,a=(1073741823&t)+(1073741823&e);return o&r?2147483648^a^n^i:o|r?1073741824&a?3221225472^a^n^i:1073741824^a^n^i:a^n^i}function n(t,e,n,i,o,r,a){var s;return t=A(t,A(A((s=e)&n|~s&i,o),a)),A(l(t,r),e)}function i(t,e,n,i,o,r,a){var s;return t=A(t,A(A(e&(s=i)|n&~s,o),a)),A(l(t,r),e)}function o(t,e,n,i,o,r,a){return t=A(t,A(A(e^n^i,o),a)),A(l(t,r),e)}function r(t,e,n,i,o,r,a){return t=A(t,A(A(n^(e|~i),o),a)),A(l(t,r),e)}function a(t){for(var e="",n="",i=0;i<=3;i++)e+=(n="0"+(t>>>8*i&255).toString(16)).substr(n.length-2,2);return e}for(var s,d,c,p,h=function(t){for(var e,n=t.length,i=n+8,o=16*(1+(i-i%64)/64),r=Array(o-1),a=0,s=0;s>>29,r}(t),u=1732584193,g=4023233417,f=2562383102,m=271733878,E=0;Ethis._renderBoundaries[2]&&(this._renderBoundaries[2]=c+2*A),p+2*A>this._renderBoundaries[3]&&(this._renderBoundaries[3]=p+2*A)}},_colorize:function(){var t=this._renderBoundaries[0],e=this._renderBoundaries[1],n=this._renderBoundaries[2]-t,i=this._renderBoundaries[3]-e,o=this._width,r=this._height,a=this._opacity,s=this._maxOpacity,l=this._minOpacity,A=this._useGradientOpacity;t<0&&(t=0),e<0&&(e=0),o>0},getDataURL:function(){return this.canvas.toDataURL()}},n);function n(t){var e=t.container,n=this.shadowCanvas=document.createElement("canvas"),i=this.canvas=t.canvas||document.createElement("canvas");this._renderBoundaries=[1e4,1e4,0,0];var o=getComputedStyle(t.container)||{};i.className="heatmap-canvas",this._width=i.width=n.width=t.width||+o.width.replace(/px/,""),this._height=i.height=n.height=t.height||+o.height.replace(/px/,""),this.shadowCtx=n.getContext("2d"),this.ctx=i.getContext("2d"),i.style.cssText=n.style.cssText="position:absolute;left:0;top:0;",e.style.position="relative",e.appendChild(i),this._palette=a(t),this._templates={},this._setStyles(t)}var r,s,l,A=(r=!1,"canvas2d"===i.defaultRenderer&&(r=t),r),d=function(){for(var t={},e=arguments.length,n=0;na.value[a.value.length-1])return a.color[a.color.length-1];if(2===a.color.length){var s=a.color[0].map(function(t){return t}),l=t-a.value[0];return s[0]+=parseInt(n*l),s[1]+=parseInt(i*l),s[2]+=parseInt(o*l),s}for(var A=1;A.ARKTOOLTIP {\n display: block;\n}\n\n.ARK_HEATMAP_HEAD .ARKTOOLTIP {\n padding: 8px 16px;\n position: absolute;\n z-index: 1070;\n display: none;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n filter: alpha(opacity=0);\n opacity: 1;\n line-break: auto;\n top: 52px;\n background: rgba(255, 255, 255, 1);\n border-radius: 5px;\n -moz-box-shadow: 0px 0px 6px rgba(37, 45, 57, .2);\n -webkit-box-shadow: 0px 0px 6px rgba(37, 45, 57, .2);\n box-shadow: 0px 0px 6px rgba(37, 45, 57, .2);\n border: 1px solid #D8E0E9;\n}\n\n.ARK_HEATMAP_HEAD li .settingList .ARROWLIST,\n.ARK_HEAT_ELEMENT_POINT_MSG .ARROWLIST {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 7px 5px;\n border-bottom-color: #fff;\n /* right: 0; */\n margin-left: -7px;\n}\n\n.ARK_HEATMAP_HEAD .ARKTOOLTIP .ARROW {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 5px 5px;\n border-bottom-color: #fff;\n /* right: 0; */\n margin-left: -5px;\n}\n\n.ARK_HEATMAP_HEAD .ARKTOOLTIP .WORDS {\n max-width: 200px;\n color: #354359;\n text-align: center;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n.ARK_HEATMAP_HEAD li a:hover+.ARKTOOLTIP {\n display: block;\n}\n\n.ARK_HEATMAP_HEAD .OPEN .OPENICON {\n width: 12px;\n height: 11px;\n display: block;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMBJREFUOBHVkDEOgkAQRREKDZ01ia0X4BbGmsoCjkAHJ7CykNoLUBkraxNvoDUWRI+xvDVigJ1sQQfJy87+P7O7fMeZ5KeUctuH/wvECA4wa01pxd+iXw0PYwFnKGFuNCCgJ/CBUPJ1gwcnuMGy28Q+hxesu7pY07SHJ6zAhQIeEIgDWsTsZcA+hRoucIfvi1g3UBoHIRoZoO1A5+L/Lomp3zAqg4zBCkZlcGTQnsHwnxgQMxj2Wfcc0svA2jxdswGlxeiWZHja3AAAAABJRU5ErkJggg==) no-repeat;\n background-size: 100% 100%;\n margin: 10px auto;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM {\n display: block;\n width: 100%;\n height: 18px;\n margin-bottom: 17px;\n position: relative;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM span {\n font-family: PingFang-SC-Medium;\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n color: #4c6072 !important;\n float: left;\n height: auto;\n line-height: normal;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM .ARK_HEATMAP_SWITCH_CHOOSEBTN_LABEL {\n margin: 0;\n margin-left: 28px;\n float: left;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM i.ARK_TIPS {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAWRJREFUOBGtUz1LA0EQnZdY2Fj5E7RNLbZ2yt1ZGbDLBRFsk0PBQtFCUC5/QCSxjpWJaJdWrBTS6k+wsrFJxn2rczkDUTAe7M3smzdvP2ZWZMoP4/lRdXdOdZCoSgToIuOqeAakAxTTTvPsLZ/zTSCMkxUVbUL01QUuFOiTDNWSimypYB6CareV9kwkE2CyW+rOBY5m15ZOr8rlgZFoN9rt4vvtw55zDwVYNREvwG0PddCHynn3snFiiUE1WaZ/00zvDQsr9X2FbBdQLPE4BQZ4Zm6bKxuRFkPd5Mhj5JDLnAwP4tpTFNd2MuAXh9ygUn8kbYY/d44FuzDO7Qvj+gH9bqtxbBgtuW4XvkJeIB/M+wD8EfPYuP95ByIvLNV4cNLcl9X1BuNewNX2mnVmqSYlGU4OuWyskYDrMDbJV52Nyw7q+TFChBzfUC6H8P80ki0wVSubSPaYRNdZXuI/PSbL+7P9AEkWrrzcUUUXAAAAAElFTkSuQmCC) no-repeat;\n background-size: 100%;\n width: 16px;\n height: 16px;\n cursor: pointer;\n float: left;\n margin-left: 5px;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM i.ARK_TIPS.active+.ARKTOOLTIP,\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM i.ARK_TIPS:hover+.ARKTOOLTIP {\n display: block;\n white-space: normal;\n background: #252d39;\n top: 22px;\n -moz-box-shadow: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM .ARKTOOLTIP .WORDS {\n white-space: normal;\n color: #c5ced8;\n text-align: left;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.ARK_HEATMAP_HEAD .CONTROL li .settingList .SETTINGITEM .ARKTOOLTIP .ARROW {\n border-bottom-color: #252d39;\n border-width: 0 7px 5px;\n margin-left: -7px;\n}\n\n.ARK_RANGE_TWO {\n width: 150px;\n height: 4px;\n border-radius: 2px;\n background: -moz-linear-gradient(left, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n background: -webkit-gradient(linear, left right, left right, color-stop(0%, #3023ae), color-stop(20%, #53a0fd), color-stop(41%, #b4ec51), color-stop(81%, #ffa301), color-stop(100%, #fb0000));\n background: -webkit-linear-gradient(left, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n background: -o-linear-gradient(left, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n background: -ms-linear-gradient(left, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n background: linear-gradient(to right, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#3023ae', endColorstr='#fb0000', GradientType=0);\n float: right;\n margin-top: 6px;\n margin-right: 12px;\n position: relative;\n}\n\n.ARK_RANGE_TWO_BG {\n position: absolute;\n z-index: 1;\n top: 0px;\n height: 4px;\n overflow: hidden;\n background: #9cacbf;\n width: 30%;\n}\n\n.ARK_RANGE_TWO_SLIDER {\n width: 6px;\n z-index: 2;\n position: absolute;\n cursor: pointer;\n width: 6px;\n height: 10px;\n top: -3px;\n background-color: #ffffff;\n border-radius: 2px;\n border: solid 1px #9cacbf;\n left: 30%;\n}\n\n.ARK_RANGE_ONE {\n width: 150px;\n height: 4px;\n border-radius: 2px;\n background-color: #0095e3;\n float: right;\n margin-top: 6px;\n margin-right: 12px;\n position: relative;\n}\n\n.ARK_RANGE_ONE_BG {\n position: absolute;\n z-index: 1;\n top: 0px;\n height: 4px;\n overflow: hidden;\n background-color: #9cacbf;\n border-radius: 2px;\n width: 30%;\n}\n\n.ARK_RANGE_ONE_SLIDER {\n z-index: 2;\n position: absolute;\n cursor: pointer;\n width: 10px;\n height: 10px;\n top: -3px;\n background-color: #e4eaf1;\n border: solid 1px #9cacbf;\n border-radius: 4px;\n left: 70%;\n}\n\n.ARK_RANGE_ONE_NUM {\n width: 23px;\n height: 12px;\n font-family: Roboto-Regular;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 12px;\n letter-spacing: 0px;\n color: #354358;\n position: absolute;\n top: -17px;\n}\n\n.ARK_HEAT_ELEMENT_POINT {\n position: absolute;\n text-align: center;\n font-family: Roboto-Bold;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n letter-spacing: 0px;\n color: #ffffff;\n cursor: pointer;\n z-index: 1000;\n\n}\n\n.ARK_HEAT_ELEMENT_POINT:hover {\n z-index: 10000;\n}\n\n.ARK_HEAT_ELEMENT_POINT:hover .ARK_HEAT_ELEMENT_POINT_MSG {\n display: block;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG {\n background-color: #252d39;\n border-radius: 4px;\n position: absolute;\n top: 0;\n left: 50%;\n display: none;\n padding: 16px;\n font-family: PingFangSC-Regular;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 14px;\n letter-spacing: 0px;\n color: #9cacbf;\n -webkit-transform: translateX(-50%);\n -moz-transform: translateX(-50%);\n -ms-transform: translateX(-50%);\n -o-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG .ARROWLIST {\n border-bottom-color: #252d39;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG thead {\n font-family: PingFangSC-Regular;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 14px;\n letter-spacing: 0px;\n color: #9cacbf;\n border: 0px;\n white-space: nowrap;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG tbody {\n font-family: Roboto-Bold;\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 18px;\n letter-spacing: 0px;\n color: #ffffff;\n border: 0px;\n text-align: right;\n}\n\n\n.ARK_HEAT_ELEMENT_POINT_MSG thead td:nth-child(1) {\n padding-right: 12px;\n border-right: 1px solid #354358;\n width: unset !important;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG tbody td:nth-child(1) {\n padding-right: 12px;\n border-right: 1px solid #354358;\n padding-top: 8px;\n width: unset !important;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG thead td:nth-child(2) {\n padding-left: 12px;\n width: unset !important;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG tbody td:nth-child(2) {\n padding-left: 12px;\n padding-top: 8px;\n width: unset !important;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG tbody tr {\n border: 0px;\n}\n\n.ARK_HEAT_ELEMENT_POINT.ARK_OPACITY {\n opacity: 0;\n}\n\n.ARK_HEAT_ELEMENT_POINT.ARK_OPACITY:hover {\n opacity: 1;\n}\n\n.ARK_HEAT_ELEMENT_POINT_MSG.up .ARROWLIST {\n left: 50%;\n margin-bottom: -10px;\n border-width: 5px 7px 0;\n border-bottom-color: transparent;\n border-top-color: #252d39;\n top: 82px;\n}");var z='\n \n
    \n
  • \n
    \n \n 热门元素列表\n
    \n
    \n
    \n
    \n 热门点击元素\n \n \n \n \n \n \n \n \n \n \n
    元素内容元素类型用户数点击次数点击次数占比
    \n \n
    \n
    \n
  • \n
  • \n
    \n \n 过滤条件(0)\n
    \n
    \n
    \n
    \n 分析用户群\n
    \n \n 所有用户\n
    \n
    \n
    \n 过滤条件\n
    \n
      \n
    • \n
    \n
    \n
    \n \n
    \n
  • \n\n
  • \n
    \n \n 显示设置\n \n
    \n
    \n
    \n
    \n 显示浏览深度线\n \n \n
    \n
    \n 调整颜色范围\n \n
    \n
    \n
    调整左侧滑杆改变热度最低的点显示颜色,以适应默认颜色在背景色上无法突出标识的情况;调整右侧滑杆增加点击较少的点颜色显示范围,以适应因为部分极值导致正常数据范围无法标识出层级的情况
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n 调整背景透明度\n \n
    \n
    \n
    可以调整热图背景透明度,以适应默认透明度下部分背景网页可能无法识别的情况
    \n
    \n
    \n
    \n
    \n
    65%
    \n
    \n \n
    \n
    \n
  • \n
  • \n \n \n 热图显示\n
  • \n
  • \n \n \n \n
    \n
    \n
    刷新\n
    \n
  • \n
  • \n \n \n \n
    \n
    \n
    帮助文档\n
    \n
  • \n
  • \n \n \n \n
    \n
    \n
    收起\n
    \n
  • \n
\n \n \n
\n
\n
展开
\n
\n
\n ',V='\n
\n
\n \n 生成热图中…\n
\n \n',J='\n
\n
\n 当前设备类型下暂无热图回数\n
\n',Y={};function X(){y.addEleLable("div","ARK_HEATMAP_HEAT_ARKLOADING","ARK_HEATMAP_HEAT_ARKLOADING",document.body).innerHTML=V,y.addEleLable("div","ARK_HEATMAP_HEAT_ARKNODATA","ARK_HEATMAP_HEAT_ARKNODATA",document.body).innerHTML=J}function Z(t){var e;q(!1),200!==t?(0===t?Y.noDataMSG.innerHTML="暂无数据
小舟建议您选择其他时间范围或过滤条件重试":201===t?(e="暂无数据
当前设备类型下暂无热图回数","depth"===A.type&&(e="暂无数据
当前设备类型下暂无深度线回数"),"element"===A.type&&(e="暂无数据
当前设备类型下暂无元素热图回数"),Y.noDataMSG.innerHTML=e):400===t?Y.noDataMSG.innerHTML="参数错误
请在方舟中重新打开查看该页面热图":402===t?Y.noDataMSG.innerHTML="查询异常
请稍后重试 或 联系管理员检查热图服务":100===t?Y.noDataMSG.innerHTML="获取数据失败
当前打开的链接已失效
请在方舟中重新打开查看该页面热图":500===t?Y.noDataMSG.innerHTML="获取数据失败
当前网站中AppKey与方舟项目中AppKey不一致,请修改SDK集成代码":1302===t&&(Y.noDataMSG.innerHTML="获取数据失败
未开启深度线数据采集"),Y.noDataEle.style.display="block"):Y.noDataEle.style.display="none"}function q(t){Y.loadingEle.style.display=!0===t?"block":"none"}function $(t,e){for(var n=0;n无数据")}var ot=null,rt=15,at=5,st={radius:rt,blur:1,gradient:{0:"#3023ae",.2:"#53a0fd",.41:"#b4ec51",.81:"#ffa301",1:"#fb0000"},backgroundColor:"rgba(0,0,0,0.7)",maxOpacity:.65,minOpacity:.2};function lt(t){t=t||{},this.pointsList=[];var e=y.addEleLable("div","ARK_HEATMAP_AREA","ARK_HEATMAP_AREA");e.style.width=document.documentElement.scrollWidth+"px",e.style.height=document.documentElement.scrollHeight+"px";var n=y.addEleLable("div","ARK_HEATMAP_HEAT","",e);return this.config=y.objMerge({container:n},t),this.heatObj=j.create(this.config),this}function At(){q(!0);var R=function R(t){if(t&&"heatmap"===b.type){var e=t.datas,n=t.code;if(e&&0!==e.length)if(201!==n)if(100!==n){Z(200);for(var i=0,o=e.length,r=[],a=0;ad+s.offsetWidth)&&(p.x=d+s.offsetWidth/2),(u<0||u>c+s.offsetHeight)&&(p.y=c+s.offsetHeight/2),p.x=parseInt(p.x),p.y=parseInt(p.y),r.push(p)))}for(var f,m,E=0;E\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
点击数点击占比
'+St(n)+""+i+"%
\n
\n ";u.innerHTML=E,u.onclick=function(t){return window.event?window.event.cancelBubble=!0:t.stopPropagation(),t.preventDefault(),!1},c.appendChild(u);var T=function(){var t=this.offsetTop-5,e=this.offsetLeft-5;u.style.top=t,u.style.left=e};y.addEvent(t,"mouseover",T)}function kt(i,t,o){var n,r,a,s,e,l=t.uv,A=t.clickNum,d=Math.round(1e4*t.clickNumPercent)/100,c=function(t,e){var n="";if("input"===t.tagName.toLowerCase()?n=t.value||"":"img"===t.tagName.toLowerCase()?n=t.getAttribute("alt")||t.getAttribute("title")||"":"a"===t.tagName.toLowerCase()&&(n=t.getAttribute("title")||""),!n)for(var i=t.childNodes,o=0;o\n "+(c||"-")+"\n "+t.type+"\n "+l+"\n "+St(A)+"\n "+d+"%\n "}var Pt=0;function Gt(t){if("element"===b.type){if(q(!1),Bt=t.datas,0===t.code&&(!Bt||Bt.detail&&0===Bt.detail.length))return Z(0),void it();if(201===t.code)return Z(201),void it();if(100===t.code)return Z(100),void it();var e=Bt.detail;if(!e||0===e.length)return Z(0),void it();for(var n=0,i=[],o=[],r=Pt=0;rPt&&(Pt=o[i.indexOf(a)].clickNum)):(i.push(a),o.push({clickNum:Number(e[r].clickNum)||0,uv:Number(e[r].uv)||0,clickNumPercent:Number(e[r].clickNumPercent)||0,uvPercent:Number(e[r].uvPercent)||0,type:e[r].type})),e[r].clickNum>Pt&&(Pt=e[r].clickNum)))}if(!(0"+n[r]+"";var a="所有用户"!==e?1:0;0'+i+""),0>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);c>2,a=(3&t)<<4|(n=e.charCodeAt(c++))>>4,i=(15&n)<<2|(r=e.charCodeAt(c++))>>6,s=63&r,isNaN(n)?i=s=64:isNaN(r)&&(s=64),l=l+p.charAt(o)+p.charAt(a)+p.charAt(i)+p.charAt(s);return l},e.prototype.decode=function(e){var t,n,r,o,a,i,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&o)<<4|(a=p.indexOf(e.charAt(l++)))>>2,r=(3&a)<<6|(i=p.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==a&&(s+=String.fromCharCode(n)),64!==i&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,o=0,a=0;n>>32-t}function c(e,t){var n=2147483648&e,r=2147483648&t,o=1073741824&e,a=1073741824&t,i=(1073741823&e)+(1073741823&t);return o&a?2147483648^i^n^r:o|a?1073741824&i?3221225472^i^n^r:1073741824^i^n^r:i^n^r}function n(e,t,n,r,o,a,i){var s;return e=c(e,c(c((s=t)&n|~s&r,o),i)),c(l(e,a),t)}function r(e,t,n,r,o,a,i){var s;return e=c(e,c(c(t&(s=r)|n&~s,o),i)),c(l(e,a),t)}function o(e,t,n,r,o,a,i){return e=c(e,c(c(t^n^r,o),i)),c(l(e,a),t)}function a(e,t,n,r,o,a,i){return e=c(e,c(c(n^(t|~r),o),i)),c(l(e,a),t)}function i(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,p,d,u,h=function(e){for(var t,n=e.length,r=n+8,o=16*(1+(r-r%64)/64),a=Array(o-1),i=0,s=0;s>>29,a}(e),g=1732584193,m=4023233417,f=2562383102,A=271733878,v=0;v",JSON.stringify(e,null,2)),"Object"===S.paramType(e)&&(e=JSON.stringify(e)),window.parent.postMessage(e,"*")}T.prototype.get=function(e){var t=[];for(var n in e.data)t.push(n+"="+encodeURIComponent(e.data[n]));var r=-1",JSON.stringify(t,null,2)),n(t)})}function L(e){return e.split("").reverse().join("")}function P(){!0===x.isHybrid&&(B=it.visitorEventList);var e=lt(K.ele),t=U(e.path);K.elePath=t.clickPath,K.path=e.path,K.newPath=e.newPath;for(var n,r,o,a,i=[],s=0;sm.base.webstayDuration)return m.base.webstayDuration}else if(18e6a.length){if(!0===n)return!1;var l=o.length-a.length;o.splice(0,l);for(var c=0;cu.length){for(var h=d.length-u.length,d=d.splice(h),g=c;0")}function Ot(e,t){if(!t)return!!e;var n=JSON.parse(JSON.stringify(e)),r=JSON.parse(JSON.stringify(t));n.reverse(),r.reverse();var o=Rt(n),a=Rt(r);return-1
生效页面
  • 当前页面
  • 全部页面
',Ct='
';var Lt=function Lt(){};Lt.prototype=S,Lt.prototype.isString=function(e){return m.status.errorCode="60001","String"===S.paramType(e)},Lt.prototype.isNumber=function(e){return m.status.errorCode="60002","Number"===S.paramType(e)},Lt.prototype.isBoolean=function(e){return m.status.errorCode="60003","Boolean"===S.paramType(e)},Lt.prototype.isObject=function(e){return"Object"===this.paramType(e)},Lt.prototype.lengthRule=function(e,t,n){this.isNumber(n)||(n=Infinity);var r=!0;return this.isNumber(t)&&e.length&&e.length>t&&e.length编辑中',(e.parentNode||document.body).appendChild(h);var i=r.related||[];if(Mt=i.length,Qt(),0"+t[n].code+"",i.appendChild(r),r.onclick=function(n){return function(){var e=n.dataType,t="字符串";a.value=n.code,i.style.display="none","boolean"===e?(e="bool",t="布尔值"):"number"===e&&(t="数值"),s.value=t,s.setAttribute("data-type",e),s.setAttribute("disabled","disabled")}}(t[n])}i.style.display="block"}},t=+new Date,Zt.push({id:t,callback:o}),I({code:200,type:"pro_like",id:t,key:a.value}))}function en(){for(var e=document.getElementsByClassName("ARK_SHOW_DISPOSE");0"+e.list[n].title+":"+e.list[n].val+"
";return Ut.replace("{TOP}",e.top).replace("{LEFT}",e.left).replace("{LOGLIST}",t)}}(i),m=document.createElement("div");m.innerHTML=g,document.body.appendChild(m.childNodes[0]);var f=document.getElementById("ARK_DEBUG_CHA");S.addEvent(f,"click",In)}function Kn(){var e=document.getElementById("ARKTOOLTIP");e&&((e.parentNode||document.body).removeChild(e),Cn.ele=null)}var Cn={},Ln=null;window.ARK_VISUAL&&S.addEvent(document,"mouseover",function(e){clearTimeout(Ln);var t=(e||window.event).target,n=t.getAttribute("data-ark-tip"),r=t.getAttribute("data-ark-tip-pos")||{};if("String"===S.paramType(r)&&(r=r.replace(/'/g,'"'),r=JSON.parse(r)),n){Cn.ele=t,Kn();try{n=JSON.parse(n)}catch(e){}var o="",a="ARKTOP";"String"===S.paramType(n)&&(o=n),"Object"!==S.paramType(n)&&"Object"!==S.paramType(r)||(o=n.msg||o,"right"!==n.pos&&"right"!==r.pos||(a="ARKRIGHT"),"bottom"!==n.pos&&"bottom"!==r.pos||(a="ARKBOTTOM")),Kn();var i=fn(t,"ARKTOOLTIP","ARKTOOLTIP");"ARKBOTTOM"===a?(i.style.bottom="-44px",i.style.top="unset"):i.style.top=t.offsetTop-44+"px",r.left&&(i.style.left=r.left),r.top&&(i.style.top=r.top),i.style.width="auto",i.style.height="auto",i.innerHTML='
'+o+"",t.parentNode.appendChild(i)}else Ln=setTimeout(function(){!1===ft(t,Cn.ele)&&!1===ft(t,document.getElementById("ARKTOOLTIP"))&&Kn()},200)});var Pn=!0,Bn=!1,Dn=!0;function Un(){S.changeHash(function(){Bn=Dn=!0,wn(),Tn(!0),Vn()})}function Vn(){I({type:"change_page_now",code:200,msg:"跳转埋点页面",url:window.location.href.replace("?visual=true&","?").replace("?visual=true","")})}window.ARK_VISUAL&&Un(),window.AnalysysModule=S.objMerge(window.AnalysysModule||{},{visual:{init:Un,msg:function jn(e){if(Pn){var t,n,r,o,a,i,s,l,c=[];switch(e.type){case"INIT":if(e.appid!==Nt.appid)return I({code:400,type:"INIT",msg:"appkey不相同"}),void(Pn=!1);I({code:200,type:"INIT",isNewVisual:!0}),I({type:"checkUrl",code:200,url:window.location.href,skip:!0}),l=e.isNewVisual||!1,Cn.newVision=l,Vn();break;case"point_list":if(c=e.data||[],!1===Dn)return;if(!(document.documentElement&&0!==document.documentElement.scrollWidth&&"complete"===document.readyState||5e3>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);l>2,o=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),p=p+c.charAt(i)+c.charAt(o)+c.charAt(a)+c.charAt(s);return p},e.prototype.decode=function(e){var t,n,r,i,o,a,s="",p=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");p>4,n=(15&i)<<4|(o=c.indexOf(e.charAt(p++)))>>2,r=(3&o)<<6|(a=c.indexOf(e.charAt(p++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function l(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=l(e,l(l((s=t)&n|~s&r,i),a)),l(p(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=l(e,l(l(t&(s=r)|n&~s,i),a)),l(p(e,o),t)}function i(e,t,n,r,i,o,a){return e=l(e,l(l(t^n^r,i),a)),l(p(e,o),t)}function o(e,t,n,r,i,o,a){return e=l(e,l(l(n^(t|~r),i),a)),l(p(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,u,d,f=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),y=1732584193,h=4023233417,g=2562383102,m=271733878,v=0;v>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);l>2,o=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),p=p+c.charAt(i)+c.charAt(o)+c.charAt(a)+c.charAt(s);return p},e.prototype.decode=function(e){var t,n,r,i,o,a,s="",p=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");p>4,n=(15&i)<<4|(o=c.indexOf(e.charAt(p++)))>>2,r=(3&o)<<6|(a=c.indexOf(e.charAt(p++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function l(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=l(e,l(l((s=t)&n|~s&r,i),a)),l(p(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=l(e,l(l(t&(s=r)|n&~s,i),a)),l(p(e,o),t)}function i(e,t,n,r,i,o,a){return e=l(e,l(l(t^n^r,i),a)),l(p(e,o),t)}function o(e,t,n,r,i,o,a){return e=l(e,l(l(n^(t|~r),i),a)),l(p(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,u,d,f=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),y=1732584193,h=4023233417,g=2562383102,m=271733878,v=0;v>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}(e);l>2,a=(3&t)<<4|(r=e.charCodeAt(l++))>>4,i=(15&r)<<2|(n=e.charCodeAt(l++))>>6,p=63&n,isNaN(r)?i=p=64:isNaN(n)&&(p=64),s=s+c.charAt(o)+c.charAt(a)+c.charAt(i)+c.charAt(p);return s},t.prototype.decode=function(e){var t,r,n,o,a,i,p="",s=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");s>4,r=(15&o)<<4|(a=c.indexOf(e.charAt(s++)))>>2,n=(3&a)<<6|(i=c.indexOf(e.charAt(s++))),p+=String.fromCharCode(t),64!==a&&(p+=String.fromCharCode(r)),64!==i&&(p+=String.fromCharCode(n));return p=function(e){for(var t="",r=0,n=0,o=0,a=0;r>>32-t}function l(e,t){var r=2147483648&e,n=2147483648&t,o=1073741824&e,a=1073741824&t,i=(1073741823&e)+(1073741823&t);return o&a?2147483648^i^r^n:o|a?1073741824&i?3221225472^i^r^n:1073741824^i^r^n:i^r^n}function r(e,t,r,n,o,a,i){var p;return e=l(e,l(l((p=t)&r|~p&n,o),i)),l(s(e,a),t)}function n(e,t,r,n,o,a,i){var p;return e=l(e,l(l(t&(p=n)|r&~p,o),i)),l(s(e,a),t)}function o(e,t,r,n,o,a,i){return e=l(e,l(l(t^r^n,o),i)),l(s(e,a),t)}function a(e,t,r,n,o,a,i){return e=l(e,l(l(r^(t|~n),o),i)),l(s(e,a),t)}function i(e){for(var t="",r="",n=0;n<=3;n++)t+=(r="0"+(e>>>8*n&255).toString(16)).substr(r.length-2,2);return t}for(var p,c,u,h,d=function(e){for(var t,r=e.length,n=r+8,o=16*(1+(n-n%64)/64),a=Array(o-1),i=0,p=0;p>>29,a}(e),f=1732584193,y=4023233417,g=2562383102,v=271733878,m=0;m>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}(e);c>2,a=(3&t)<<4|(r=e.charCodeAt(c++))>>4,i=(15&r)<<2|(n=e.charCodeAt(c++))>>6,p=63&n,isNaN(r)?i=p=64:isNaN(n)&&(p=64),s=s+l.charAt(o)+l.charAt(a)+l.charAt(i)+l.charAt(p);return s},t.prototype.decode=function(e){var t,r,n,o,a,i,p="",s=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");s>4,r=(15&o)<<4|(a=l.indexOf(e.charAt(s++)))>>2,n=(3&a)<<6|(i=l.indexOf(e.charAt(s++))),p+=String.fromCharCode(t),64!==a&&(p+=String.fromCharCode(r)),64!==i&&(p+=String.fromCharCode(n));return p=function(e){for(var t="",r=0,n=0,o=0,a=0;r>>32-t}function c(e,t){var r=2147483648&e,n=2147483648&t,o=1073741824&e,a=1073741824&t,i=(1073741823&e)+(1073741823&t);return o&a?2147483648^i^r^n:o|a?1073741824&i?3221225472^i^r^n:1073741824^i^r^n:i^r^n}function r(e,t,r,n,o,a,i){var p;return e=c(e,c(c((p=t)&r|~p&n,o),i)),c(s(e,a),t)}function n(e,t,r,n,o,a,i){var p;return e=c(e,c(c(t&(p=n)|r&~p,o),i)),c(s(e,a),t)}function o(e,t,r,n,o,a,i){return e=c(e,c(c(t^r^n,o),i)),c(s(e,a),t)}function a(e,t,r,n,o,a,i){return e=c(e,c(c(r^(t|~n),o),i)),c(s(e,a),t)}function i(e){for(var t="",r="",n=0;n<=3;n++)t+=(r="0"+(e>>>8*n&255).toString(16)).substr(r.length-2,2);return t}for(var p,l,u,h,d=function(e){for(var t,r=e.length,n=r+8,o=16*(1+(n-n%64)/64),a=Array(o-1),i=0,p=0;p>>29,a}(e),f=1732584193,y=4023233417,g=2562383102,v=271733878,m=0;m>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - - })); - }); - - var encUtf8 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - - })); - }); - - var encBase64 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64; - - })); - }); - - var md5 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - - })); - }); - - var sha1 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - - })); - }); - - var hmac = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - })); - }); - - var evpkdf = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, sha1, hmac); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - - })); - }); - - var cipherCore = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, evpkdf); - } - }(commonjsGlobal, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined$1) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined$1; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - })); - }); - - var aes = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, encBase64, md5, evpkdf, cipherCore); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - - })); - }); - - var modeEcb = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, cipherCore); - } - }(commonjsGlobal, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - - })); - }); - - var common = createCommonjsModule(function (module, exports) { - - - var TYPED_OK = (typeof Uint8Array !== 'undefined') && - (typeof Uint16Array !== 'undefined') && - (typeof Int32Array !== 'undefined'); - - function _has(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - } - - exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (var p in source) { - if (_has(source, p)) { - obj[p] = source[p]; - } - } - } - - return obj; - }; - - - // reduce buffer size, avoiding mem copy - exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { return buf; } - if (buf.subarray) { return buf.subarray(0, size); } - buf.length = size; - return buf; - }; - - - var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - } - }; - - var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - } - }; - - - // Enable/Disable typed arrays use, for testing - // - exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } - }; - - exports.setTyped(TYPED_OK); - }); - var common_1 = common.assign; - var common_2 = common.shrinkBuf; - var common_3 = common.setTyped; - var common_4 = common.Buf8; - var common_5 = common.Buf16; - var common_6 = common.Buf32; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - /* eslint-disable space-unary-ops */ - - - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - //var Z_FILTERED = 1; - //var Z_HUFFMAN_ONLY = 2; - //var Z_RLE = 3; - var Z_FIXED = 4; - //var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - var Z_BINARY = 0; - var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN = 2; - - /*============================================================================*/ - - - function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - // From zutil.h - - var STORED_BLOCK = 0; - var STATIC_TREES = 1; - var DYN_TREES = 2; - /* The three kinds of block type */ - - var MIN_MATCH = 3; - var MAX_MATCH = 258; - /* The minimum and maximum match lengths */ - - // From deflate.h - /* =========================================================================== - * Internal compression state. - */ - - var LENGTH_CODES = 29; - /* number of length codes, not counting the special END_BLOCK code */ - - var LITERALS = 256; - /* number of literal bytes 0..255 */ - - var L_CODES = LITERALS + 1 + LENGTH_CODES; - /* number of Literal or Length codes, including the END_BLOCK code */ - - var D_CODES = 30; - /* number of distance codes */ - - var BL_CODES = 19; - /* number of codes used to transfer the bit lengths */ - - var HEAP_SIZE = 2 * L_CODES + 1; - /* maximum heap size */ - - var MAX_BITS = 15; - /* All codes must not exceed MAX_BITS bits */ - - var Buf_size = 16; - /* size of bit buffer in bi_buf */ - - - /* =========================================================================== - * Constants - */ - - var MAX_BL_BITS = 7; - /* Bit length codes must not exceed MAX_BL_BITS bits */ - - var END_BLOCK = 256; - /* end of block literal code */ - - var REP_3_6 = 16; - /* repeat previous bit length 3-6 times (2 bits of repeat count) */ - - var REPZ_3_10 = 17; - /* repeat a zero length 3-10 times (3 bits of repeat count) */ - - var REPZ_11_138 = 18; - /* repeat a zero length 11-138 times (7 bits of repeat count) */ - - /* eslint-disable comma-spacing,array-bracket-spacing */ - var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - - var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - - var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - - var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; - /* eslint-enable comma-spacing,array-bracket-spacing */ - - /* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - - /* =========================================================================== - * Local data. These are initialized only once. - */ - - // We pre-fill arrays with 0 to avoid uninitialized gaps - - var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - - // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 - var static_ltree = new Array((L_CODES + 2) * 2); - zero(static_ltree); - /* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - - var static_dtree = new Array(D_CODES * 2); - zero(static_dtree); - /* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - - var _dist_code = new Array(DIST_CODE_LEN); - zero(_dist_code); - /* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - - var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zero(_length_code); - /* length code for each normalized match length (0 == MIN_MATCH) */ - - var base_length = new Array(LENGTH_CODES); - zero(base_length); - /* First normalized length for each code (0 = MIN_MATCH) */ - - var base_dist = new Array(D_CODES); - zero(base_dist); - /* First normalized distance for each code (0 = distance of 1) */ - - - function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; - } - - - var static_l_desc; - var static_d_desc; - var static_bl_desc; - - - function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ - } - - - - function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; - } - - - /* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ - function put_short(s, w) { - // put_byte(s, (uch)((w) & 0xff)); - // put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; - } - - - /* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } - } - - - function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); - } - - - /* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; - } - - - /* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ - function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } - } - - - /* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - function gen_bitlen(s, desc) - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - { - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } - } - - - /* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - function gen_codes(tree, max_code, bl_count) - // ct_data *tree; /* the tree to decorate */ - // int max_code; /* largest code with non zero frequency */ - // ushf *bl_count; /* number of codes at each bit length */ - { - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; - } - - - /* =========================================================================== - * Initialize a new block. - */ - function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; - } - - - /* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ - function bi_windup(s) - { - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; - } - - /* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ - function copy_block(s, buf, len, header) - //DeflateState *s; - //charf *buf; /* the input data */ - //unsigned len; /* its length */ - //int header; /* true if block header must be written */ - { - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } - // while (len--) { - // put_byte(s, *buf++); - // } - common.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; - } - - /* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); - } - - /* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - function pqdownheap(s, tree, k) - // deflate_state *s; - // ct_data *tree; /* the tree to restore */ - // int k; /* node to move down */ - { - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; - } - - - // inlined manually - // var SMALLEST = 1; - - /* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ - function compress_block(s, ltree, dtree) - // deflate_state *s; - // const ct_data *ltree; /* literal tree */ - // const ct_data *dtree; /* distance tree */ - { - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); - } - - - /* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - function build_tree(s, desc) - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - { - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); - } - - - /* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ - function scan_tree(s, tree, max_code) - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - { - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } - } - - - /* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - function send_tree(s, tree, max_code) - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - { - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } - } - - - /* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; - } - - - /* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - function send_all_trees(s, lcodes, dcodes, blcodes) - // deflate_state *s; - // int lcodes, dcodes, blcodes; /* number of codes for each tree */ - { - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); - } - - - /* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ - function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; - } - - - var static_init_done = false; - - /* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ - function _tr_init(s) - { - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); - } - - - /* =========================================================================== - * Send a stored block - */ - function _tr_stored_block(s, buf, stored_len, last) - //DeflateState *s; - //charf *buf; /* input block */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - { - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ - } - - - /* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ - function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); - } - - - /* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - function _tr_flush_block(s, buf, stored_len, last) - //DeflateState *s; - //charf *buf; /* input block, or NULL if too old */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - { - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); - } - - /* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - function _tr_tally(s, dist, lc) - // deflate_state *s; - // unsigned dist; /* distance of matched string */ - // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ - { - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - - //#ifdef TRUNCATE_BLOCK - // /* Try to guess if it is profitable to stop the current block here */ - // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { - // /* Compute an upper bound for the compressed length */ - // out_length = s.last_lit*8; - // in_length = s.strstart - s.block_start; - // - // for (dcode = 0; dcode < D_CODES; dcode++) { - // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); - // } - // out_length >>>= 3; - // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - // // s->last_lit, in_length, out_length, - // // 100L - out_length*100L/in_length)); - // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { - // return true; - // } - // } - //#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - } - - var _tr_init_1 = _tr_init; - var _tr_stored_block_1 = _tr_stored_block; - var _tr_flush_block_1 = _tr_flush_block; - var _tr_tally_1 = _tr_tally; - var _tr_align_1 = _tr_align; - - var trees = { - _tr_init: _tr_init_1, - _tr_stored_block: _tr_stored_block_1, - _tr_flush_block: _tr_flush_block_1, - _tr_tally: _tr_tally_1, - _tr_align: _tr_align_1 - }; - - // Note: adler32 takes 12% for level 0 and 2% for level 6. - // It isn't worth it to make additional optimizations as in original. - // Small size is preferable. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; - } - - - var adler32_1 = adler32; - - // Note: we can't get significant speed boost here. - // So write code to minimize size - no pregenerated tables - // and array tools dependencies. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // Use ordinary array, since untyped makes no boost here - function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; - } - - // Create table on load. Just 255 signed longs. Not a problem. - var crcTable = makeTable(); - - - function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; - } - - - var crc32_1 = crc32; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var messages = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - - - - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - /* Allowed flush values; see deflate() and inflate() below for details */ - var Z_NO_FLUSH = 0; - var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - var Z_BLOCK = 5; - //var Z_TREES = 6; - - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK = 0; - var Z_STREAM_END = 1; - //var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - //var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - //var Z_VERSION_ERROR = -6; - - - /* compression levels */ - //var Z_NO_COMPRESSION = 0; - //var Z_BEST_SPEED = 1; - //var Z_BEST_COMPRESSION = 9; - var Z_DEFAULT_COMPRESSION = -1; - - - var Z_FILTERED = 1; - var Z_HUFFMAN_ONLY = 2; - var Z_RLE = 3; - var Z_FIXED$1 = 4; - var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - //var Z_BINARY = 0; - //var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN$1 = 2; - - - /* The deflate compression method */ - var Z_DEFLATED = 8; - - /*============================================================================*/ - - - var MAX_MEM_LEVEL = 9; - /* Maximum value for memLevel in deflateInit2 */ - var MAX_WBITS = 15; - /* 32K LZ77 window */ - var DEF_MEM_LEVEL = 8; - - - var LENGTH_CODES$1 = 29; - /* number of length codes, not counting the special END_BLOCK code */ - var LITERALS$1 = 256; - /* number of literal bytes 0..255 */ - var L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1; - /* number of Literal or Length codes, including the END_BLOCK code */ - var D_CODES$1 = 30; - /* number of distance codes */ - var BL_CODES$1 = 19; - /* number of codes used to transfer the bit lengths */ - var HEAP_SIZE$1 = 2 * L_CODES$1 + 1; - /* maximum heap size */ - var MAX_BITS$1 = 15; - /* All codes must not exceed MAX_BITS bits */ - - var MIN_MATCH$1 = 3; - var MAX_MATCH$1 = 258; - var MIN_LOOKAHEAD = (MAX_MATCH$1 + MIN_MATCH$1 + 1); - - var PRESET_DICT = 0x20; - - var INIT_STATE = 42; - var EXTRA_STATE = 69; - var NAME_STATE = 73; - var COMMENT_STATE = 91; - var HCRC_STATE = 103; - var BUSY_STATE = 113; - var FINISH_STATE = 666; - - var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ - var BS_BLOCK_DONE = 2; /* block flush performed */ - var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ - var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - - var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - - function err(strm, errorCode) { - strm.msg = messages[errorCode]; - return errorCode; - } - - function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); - } - - function zero$1(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - - /* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ - function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - common.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } - } - - - function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); - } - - - function put_byte(s, b) { - s.pending_buf[s.pending++] = b; - } - - - /* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ - function putShortMSB(s, b) { - // put_byte(s, (Byte)(b >> 8)); - // put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; - } - - - /* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ - function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - common.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32_1(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32_1(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; - } - - - /* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ - function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH$1; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH$1 - (strend - scan); - scan = strend - MAX_MATCH$1; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; - } - - - /* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ - function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - common.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH$1) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; - //#if MIN_MATCH != 3 - // Call update_hash() MIN_MATCH-3 more times - //#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH$1) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - // if (s.high_water < s.window_size) { - // var curr = s.strstart + s.lookahead; - // var init = 0; - // - // if (s.high_water < curr) { - // /* Previous high water mark below current data -- zero WIN_INIT - // * bytes or up to end of window, whichever is less. - // */ - // init = s.window_size - curr; - // if (init > WIN_INIT) - // init = WIN_INIT; - // zmemzero(s->window + curr, (unsigned)init); - // s->high_water = curr + init; - // } - // else if (s->high_water < (ulg)curr + WIN_INIT) { - // /* High water mark at or above current data, but below current data - // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - // * to end of window, whichever is less. - // */ - // init = (ulg)curr + WIN_INIT - s->high_water; - // if (init > s->window_size - s->high_water) - // init = s->window_size - s->high_water; - // zmemzero(s->window + s->high_water, (unsigned)init); - // s->high_water += init; - // } - // } - // - // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - // "not enough room for search"); - } - - /* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ - function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); - // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || - // s.block_start >= s.w_size)) { - // throw new Error("slide too late"); - // } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); - // if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; - } - - /* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH$1) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH$1) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH$1); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH$1) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - - //#if MIN_MATCH != 3 - // Call UPDATE_HASH() MIN_MATCH-3 more times - //#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH$1 - 1)) ? s.strstart : MIN_MATCH$1 - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH$1) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH$1 - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH$1 && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH$1 - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH$1 && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH$1; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH$1); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH$1 - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH$1 - 1 ? s.strstart : MIN_MATCH$1 - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; - } - - - /* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ - function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH$1) { - fill_window(s); - if (s.lookahead <= MAX_MATCH$1 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH$1 && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH$1; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH$1 - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH$1) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH$1); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ - function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; - } - - var configuration_table; - - configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ - ]; - - - /* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ - function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero$1(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH$1 - 1; - s.match_available = 0; - s.ins_h = 0; - } - - - function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new common.Buf16(HEAP_SIZE$1 * 2); - this.dyn_dtree = new common.Buf16((2 * D_CODES$1 + 1) * 2); - this.bl_tree = new common.Buf16((2 * BL_CODES$1 + 1) * 2); - zero$1(this.dyn_ltree); - zero$1(this.dyn_dtree); - zero$1(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new common.Buf16(MAX_BITS$1 + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new common.Buf16(2 * L_CODES$1 + 1); /* heap used to build the Huffman trees */ - zero$1(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new common.Buf16(2 * L_CODES$1 + 1); //uch depth[2*L_CODES+1]; - zero$1(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ - } - - - function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN$1; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; - } - - - function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; - } - - - function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; - } - - - function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED$1) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH$1 - 1) / MIN_MATCH$1); - - s.window = new common.Buf8(s.w_size * 2); - s.head = new common.Buf16(s.hash_size); - s.prev = new common.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new common.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); - } - - function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); - } - - - function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - - //#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } - //#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero$1(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; - } - - function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; - } - - - /* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ - function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero$1(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new common.Buf8(s.w_size); - common.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH$1) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH$1 - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH$1 - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH$1 - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; - } - - - var deflateInit_1 = deflateInit; - var deflateInit2_1 = deflateInit2; - var deflateReset_1 = deflateReset; - var deflateResetKeep_1 = deflateResetKeep; - var deflateSetHeader_1 = deflateSetHeader; - var deflate_2 = deflate; - var deflateEnd_1 = deflateEnd; - var deflateSetDictionary_1 = deflateSetDictionary; - var deflateInfo = 'pako deflate (from Nodeca project)'; - - /* Not implemented - exports.deflateBound = deflateBound; - exports.deflateCopy = deflateCopy; - exports.deflateParams = deflateParams; - exports.deflatePending = deflatePending; - exports.deflatePrime = deflatePrime; - exports.deflateTune = deflateTune; - */ - - var deflate_1 = { - deflateInit: deflateInit_1, - deflateInit2: deflateInit2_1, - deflateReset: deflateReset_1, - deflateResetKeep: deflateResetKeep_1, - deflateSetHeader: deflateSetHeader_1, - deflate: deflate_2, - deflateEnd: deflateEnd_1, - deflateSetDictionary: deflateSetDictionary_1, - deflateInfo: deflateInfo - }; - - // Quick check if we can use fast array to bin string conversion - // - // - apply(Array) can fail on Android 2.2 - // - apply(Uint8Array) can fail on iOS 5.1 Safari - // - var STR_APPLY_OK = true; - var STR_APPLY_UIA_OK = true; - - try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } - try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } - - - // Table with utf8 lengths (calculated by first byte of sequence) - // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, - // because max possible codepoint is 0x10ffff - var _utf8len = new common.Buf8(256); - for (var q = 0; q < 256; q++) { - _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); - } - _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - - // convert string to array (typed, when possible) - var string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new common.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; - }; - - // Helper (used in 2 places) - function buf2binstring(buf, len) { - // On Chrome, the arguments in a function call that are allowed is `65534`. - // If the length of the buffer is smaller than that, we can use this optimization, - // otherwise we will take a slower path. - if (len < 65534) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, common.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; - } - - - // Convert byte array to binary string - var buf2binstring_1 = function (buf) { - return buf2binstring(buf, buf.length); - }; - - - // Convert binary string (typed, when possible) - var binstring2buf = function (str) { - var buf = new common.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; - }; - - - // convert array to string - var buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); - }; - - - // Calculate max possible position in utf8 buffer, - // that will not break sequence. If that's not possible - // - (very small limits) return max size as is. - // - // buf[] - utf8 bytes array - // max - length limit (mandatory); - var utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means buffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; - }; - - var strings = { - string2buf: string2buf, - buf2binstring: buf2binstring_1, - binstring2buf: binstring2buf, - buf2string: buf2string, - utf8border: utf8border - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; - } - - var zstream = ZStream; - - var toString = Object.prototype.toString; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - var Z_NO_FLUSH$1 = 0; - var Z_FINISH$1 = 4; - - var Z_OK$1 = 0; - var Z_STREAM_END$1 = 1; - var Z_SYNC_FLUSH = 2; - - var Z_DEFAULT_COMPRESSION$1 = -1; - - var Z_DEFAULT_STRATEGY$1 = 0; - - var Z_DEFLATED$1 = 8; - - /* ===========================================================================*/ - - - /** - * class Deflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[deflate]], - * [[deflateRaw]] and [[gzip]]. - **/ - - /* internal - * Deflate.chunks -> Array - * - * Chunks of output data, if [[Deflate#onData]] not overridden. - **/ - - /** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - - /** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - - /** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ - function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = common.assign({ - level: Z_DEFAULT_COMPRESSION$1, - method: Z_DEFLATED$1, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY$1, - to: '' - }, options || {}); - - var opt = this.options; - - if (opt.raw && (opt.windowBits > 0)) { - opt.windowBits = -opt.windowBits; - } - - else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new zstream(); - this.strm.avail_out = 0; - - var status = deflate_1.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - - if (status !== Z_OK$1) { - throw new Error(messages[status]); - } - - if (opt.header) { - deflate_1.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === 'string') { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = deflate_1.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK$1) { - throw new Error(messages[status]); - } - - this._dict_set = true; - } - } - - /** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { return false; } - - _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH$1 : Z_NO_FLUSH$1); - - // Convert data if needed - if (typeof data === 'string') { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new common.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = deflate_1.deflate(strm, _mode); /* no bad return value */ - - if (status !== Z_STREAM_END$1 && status !== Z_OK$1) { - this.onEnd(status); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH$1 || _mode === Z_SYNC_FLUSH))) { - if (this.options.to === 'string') { - this.onData(strings.buf2binstring(common.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(common.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END$1); - - // Finalize on the last chunk. - if (_mode === Z_FINISH$1) { - status = deflate_1.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK$1; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK$1); - strm.avail_out = 0; - return true; - } - - return true; - }; - - - /** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): output data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - - /** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK$1) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = common.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - - /** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ - function deflate$1(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { throw deflator.msg || messages[deflator.err]; } - - return deflator.result; - } - - - /** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate$1(input, options); - } - - - /** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ - function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate$1(input, options); - } - - - var Deflate_1 = Deflate; - var deflate_2$1 = deflate$1; - var deflateRaw_1 = deflateRaw; - var gzip_1 = gzip; - - var deflate_1$1 = { - Deflate: Deflate_1, - deflate: deflate_2$1, - deflateRaw: deflateRaw_1, - gzip: gzip_1 - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // See state defs from inflate.js - var BAD = 30; /* got a data error -- remain here until reset */ - var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - - /* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ - var inffast = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ - //#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ - //#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); - //#ifdef INFLATE_STRICT - dmax = state.dmax; - //#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); - //#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - //#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // if (len <= op - whave) { - // do { - // output[_out++] = 0; - // } while (--len); - // continue top; - // } - // len -= op - whave; - // do { - // output[_out++] = 0; - // } while (--op > whave); - // if (op === 0) { - // from = _out - dist; - // do { - // output[_out++] = output[from++]; - // } while (--len); - // continue top; - // } - //#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - var MAXBITS = 15; - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var CODES = 0; - var LENS = 1; - var DISTS = 2; - - var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 - ]; - - var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 - ]; - - var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 - ]; - - var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 - ]; - - var inftrees = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) - { - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; - // var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new common.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new common.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* process all codes and make table entries */ - for (;;) { - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - - - - - var CODES$1 = 0; - var LENS$1 = 1; - var DISTS$1 = 2; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - /* Allowed flush values; see deflate() and inflate() below for details */ - //var Z_NO_FLUSH = 0; - //var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - //var Z_FULL_FLUSH = 3; - var Z_FINISH$2 = 4; - var Z_BLOCK$1 = 5; - var Z_TREES = 6; - - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK$2 = 0; - var Z_STREAM_END$2 = 1; - var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR$1 = -2; - var Z_DATA_ERROR$1 = -3; - var Z_MEM_ERROR = -4; - var Z_BUF_ERROR$1 = -5; - //var Z_VERSION_ERROR = -6; - - /* The deflate compression method */ - var Z_DEFLATED$2 = 8; - - - /* STATES ====================================================================*/ - /* ===========================================================================*/ - - - var HEAD = 1; /* i: waiting for magic header */ - var FLAGS = 2; /* i: waiting for method and flags (gzip) */ - var TIME = 3; /* i: waiting for modification time (gzip) */ - var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ - var EXLEN = 5; /* i: waiting for extra length (gzip) */ - var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ - var NAME = 7; /* i: waiting for end of file name (gzip) */ - var COMMENT = 8; /* i: waiting for end of comment (gzip) */ - var HCRC = 9; /* i: waiting for header crc (gzip) */ - var DICTID = 10; /* i: waiting for dictionary check value */ - var DICT = 11; /* waiting for inflateSetDictionary() call */ - var TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */ - var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ - var STORED = 14; /* i: waiting for stored size (length and complement) */ - var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ - var COPY = 16; /* i/o: waiting for input or output to copy stored block */ - var TABLE = 17; /* i: waiting for dynamic block table lengths */ - var LENLENS = 18; /* i: waiting for code length code lengths */ - var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ - var LEN_ = 20; /* i: same as LEN below, but only first time in */ - var LEN = 21; /* i: waiting for length/lit/eob code */ - var LENEXT = 22; /* i: waiting for length extra bits */ - var DIST = 23; /* i: waiting for distance code */ - var DISTEXT = 24; /* i: waiting for distance extra bits */ - var MATCH = 25; /* o: waiting for output space to copy string */ - var LIT = 26; /* o: waiting for output space to write literal */ - var CHECK = 27; /* i: waiting for 32-bit check value */ - var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ - var DONE = 29; /* finished check, done -- remain here until reset */ - var BAD$1 = 30; /* got a data error -- remain here until reset */ - var MEM = 31; /* got an inflate() memory error -- remain here until reset */ - var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - - /* ===========================================================================*/ - - - - var ENOUGH_LENS$1 = 852; - var ENOUGH_DISTS$1 = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var MAX_WBITS$1 = 15; - /* 32K LZ77 window */ - var DEF_WBITS = MAX_WBITS$1; - - - function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); - } - - - function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new common.Buf16(320); /* temporary storage for code lengths */ - this.work = new common.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ - } - - function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new common.Buf32(ENOUGH_LENS$1); - state.distcode = state.distdyn = new common.Buf32(ENOUGH_DISTS$1); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK$2; - } - - function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - - } - - function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR$1; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); - } - - function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR$1; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK$2) { - strm.state = null/*Z_NULL*/; - } - return ret; - } - - function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); - } - - - /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ - var virgin = true; - - var lenfix, distfix; // We have no pointers in JS, so keep tables separate - - function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new common.Buf32(512); - distfix = new common.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inftrees(LENS$1, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inftrees(DISTS$1, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; - } - - - /* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ - function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new common.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - common.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - common.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - common.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; - } - - function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new common.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR$1; - } - - state = strm.state; - if (state.mode === TYPE$1) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK$2; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD$1; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED$2) { - strm.msg = 'unknown compression method'; - state.mode = BAD$1; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD$1; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE$1; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED$2) { - strm.msg = 'unknown compression method'; - state.mode = BAD$1; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD$1; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32_1(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more convenient processing later - state.head.extra = new Array(state.head.extra_len); - } - common.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE$1; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE$1; - /* falls through */ - case TYPE$1: - if (flush === Z_BLOCK$1 || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD$1; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD$1; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - common.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE$1; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - //#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD$1; - break; - } - //#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inftrees(CODES$1, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD$1; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD$1; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD$1; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD$1) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD$1; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inftrees(LENS$1, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD$1; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inftrees(DISTS$1, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD$1; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inffast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE$1) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE$1; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD$1; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD$1; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break; - } - //#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break; - } - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // Trace((stderr, "inflate.c too far\n")); - // copy -= state.whave; - // if (copy > state.length) { copy = state.length; } - // if (copy > left) { copy = left; } - // left -= copy; - // state.length -= copy; - // do { - // output[put++] = 0; - // } while (--copy); - // if (state.length === 0) { state.mode = LEN; } - // break; - //#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' instead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END$2; - break inf_leave; - case BAD$1: - ret = Z_DATA_ERROR$1; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR$1; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD$1 && - (state.mode < CHECK || flush !== Z_FINISH$2))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ; - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE$1 ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH$2) && ret === Z_OK$2) { - ret = Z_BUF_ERROR$1; - } - return ret; - } - - function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR$1; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK$2; - } - - function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK$2; - } - - function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR$1; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32_1(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR$1; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK$2; - } - - var inflateReset_1 = inflateReset; - var inflateReset2_1 = inflateReset2; - var inflateResetKeep_1 = inflateResetKeep; - var inflateInit_1 = inflateInit; - var inflateInit2_1 = inflateInit2; - var inflate_2 = inflate; - var inflateEnd_1 = inflateEnd; - var inflateGetHeader_1 = inflateGetHeader; - var inflateSetDictionary_1 = inflateSetDictionary; - var inflateInfo = 'pako inflate (from Nodeca project)'; - - /* Not implemented - exports.inflateCopy = inflateCopy; - exports.inflateGetDictionary = inflateGetDictionary; - exports.inflateMark = inflateMark; - exports.inflatePrime = inflatePrime; - exports.inflateSync = inflateSync; - exports.inflateSyncPoint = inflateSyncPoint; - exports.inflateUndermine = inflateUndermine; - */ - - var inflate_1 = { - inflateReset: inflateReset_1, - inflateReset2: inflateReset2_1, - inflateResetKeep: inflateResetKeep_1, - inflateInit: inflateInit_1, - inflateInit2: inflateInit2_1, - inflate: inflate_2, - inflateEnd: inflateEnd_1, - inflateGetHeader: inflateGetHeader_1, - inflateSetDictionary: inflateSetDictionary_1, - inflateInfo: inflateInfo - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var constants = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; - } - - var gzheader = GZheader; - - var toString$1 = Object.prototype.toString; - - /** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - - /* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overridden. - **/ - - /** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - - /** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - - /** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ - function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = common.assign({ - chunkSize: 16384, - windowBits: 0, - to: '' - }, options || {}); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new zstream(); - this.strm.avail_out = 0; - - var status = inflate_1.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== constants.Z_OK) { - throw new Error(messages[status]); - } - - this.header = new gzheader(); - - inflate_1.inflateGetHeader(this.strm, this.header); - - // Setup dictionary - if (opt.dictionary) { - // Convert data if needed - if (typeof opt.dictionary === 'string') { - opt.dictionary = strings.string2buf(opt.dictionary); - } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') { - opt.dictionary = new Uint8Array(opt.dictionary); - } - if (opt.raw) { //In raw mode we need to set the dictionary early - status = inflate_1.inflateSetDictionary(this.strm, opt.dictionary); - if (status !== constants.Z_OK) { - throw new Error(messages[status]); - } - } - } - } - - /** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { return false; } - _mode = (mode === ~~mode) ? mode : ((mode === true) ? constants.Z_FINISH : constants.Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString$1.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new common.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = inflate_1.inflate(strm, constants.Z_NO_FLUSH); /* no bad return value */ - - if (status === constants.Z_NEED_DICT && dictionary) { - status = inflate_1.inflateSetDictionary(this.strm, dictionary); - } - - if (status === constants.Z_BUF_ERROR && allowBufError === true) { - status = constants.Z_OK; - allowBufError = false; - } - - if (status !== constants.Z_STREAM_END && status !== constants.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if (strm.avail_out === 0 || status === constants.Z_STREAM_END || (strm.avail_in === 0 && (_mode === constants.Z_FINISH || _mode === constants.Z_SYNC_FLUSH))) { - - if (this.options.to === 'string') { - - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { common.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } - - this.onData(utf8str); - - } else { - this.onData(common.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== constants.Z_STREAM_END); - - if (status === constants.Z_STREAM_END) { - _mode = constants.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === constants.Z_FINISH) { - status = inflate_1.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === constants.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === constants.Z_SYNC_FLUSH) { - this.onEnd(constants.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; - }; - - - /** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): output data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - - /** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === constants.Z_OK) { - if (this.options.to === 'string') { - // Glue & convert here, until we teach pako to send - // utf8 aligned strings to onData - this.result = this.chunks.join(''); - } else { - this.result = common.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - - /** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ - function inflate$1(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { throw inflator.msg || messages[inflator.err]; } - - return inflator.result; - } - - - /** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate$1(input, options); - } - - - /** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - - var Inflate_1 = Inflate; - var inflate_2$1 = inflate$1; - var inflateRaw_1 = inflateRaw; - var ungzip = inflate$1; - - var inflate_1$1 = { - Inflate: Inflate_1, - inflate: inflate_2$1, - inflateRaw: inflateRaw_1, - ungzip: ungzip - }; - - var assign = common.assign; - - - - - - var pako = {}; - - assign(pako, deflate_1$1, inflate_1$1, constants); - - var pako_1 = pako; - - var byteLength_1 = byteLength; - var toByteArray_1 = toByteArray; - var fromByteArray_1 = fromByteArray; - - var lookup = []; - var revLookup = []; - var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; - - var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; - } - - // Support decoding URL-safe base64 strings, as Node.js does. - // See: https://en.wikipedia.org/wiki/Base64#URL_applications - revLookup['-'.charCodeAt(0)] = 62; - revLookup['_'.charCodeAt(0)] = 63; - - function getLens (b64) { - var len = b64.length; - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('='); - if (validLen === -1) validLen = len; - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4); - - return [validLen, placeHoldersLen] - } - - // base64 is 4/3 + up to two characters of the original data - function byteLength (b64) { - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen - } - - function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen - } - - function toByteArray (b64) { - var tmp; - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); - - var curByte = 0; - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen; - - var i; - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)]; - arr[curByte++] = (tmp >> 16) & 0xFF; - arr[curByte++] = (tmp >> 8) & 0xFF; - arr[curByte++] = tmp & 0xFF; - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4); - arr[curByte++] = tmp & 0xFF; - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2); - arr[curByte++] = (tmp >> 8) & 0xFF; - arr[curByte++] = tmp & 0xFF; - } - - return arr - } - - function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] - } - - function encodeChunk (uint8, start, end) { - var tmp; - var output = []; - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF); - output.push(tripletToBase64(tmp)); - } - return output.join('') - } - - function fromByteArray (uint8) { - var tmp; - var len = uint8.length; - var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes - var parts = []; - var maxChunkLength = 16383; // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1]; - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ); - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1]; - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ); - } - - return parts.join('') - } - - var base64Js = { - byteLength: byteLength_1, - toByteArray: toByteArray_1, - fromByteArray: fromByteArray_1 - }; - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - //# sourceMappingURL=index.js.map - - var globalWindow = window; - //# sourceMappingURL=index.js.map - - var reqt = ''; - function getSpv(lib, appid, lib_version) { - var policyversion = ''; - var appversion = ''; - var spv = lib + '|' + appid + '|' + lib_version + '|' + policyversion + '|' + appversion; - return encodeURIComponent(encode(spv)); - } - function encryptKey(lib, appid, libVersion) { - reqt = +new Date() + ''; - var orgkey = lib + appid + libVersion + reqt; - //MD5+base64+切割为数组 - var base64Str = encode(MD5(orgkey, 32).toUpperCase()).split(''); - var F = libVersion.split('.'); - var F1 = F[F.length - 1]; - var F2 = F[F.length - 2]; - if (!(Number(F2) % 2 == 0)) { - //倒叙 - base64Str = base64Str.reverse(); - } - var key = ''; - for (var i = 0; i < base64Str.length; i++) { - //偶数位 - if (i % 2 === 0 && !(Number(F1) % 2 === 0)) { - key += base64Str[i]; - } else if (!(i % 2 === 0) && Number(F1) % 2 === 0) { - key += base64Str[i]; - } - } - if (key.length < 16) { - key += key.split('').reverse().join(''); - } - return key.slice(0, 16); - } - function getEncryptData(data, lib, appid, libVersion, encryptType) { - var key = encryptKey(lib, appid, libVersion); - key = encUtf8.parse(key); - var encryptData = ''; - if (encryptType === 1) { - encryptData = aes.encrypt(data, key, { - mode: modeEcb - }); - } - if (encryptType === 2) { - var iv = encUtf8.parse('Analysys_315$CBC'); - encryptData = aes.encrypt(data, key, { - iv: iv - }); - } - encryptData = encryptData.ciphertext.toString().toUpperCase(); - var pakoZip = pako_1.gzip(encryptData); - return base64Js.fromByteArray(pakoZip); - } - function uploadData(option) { - var dataArray = option.data; - var lib = dataArray[0].xcontext.$lib; - var appid = dataArray[0].appid; - var libVersion = dataArray[0].xcontext.$lib_version; - option.data = getEncryptData(JSON.stringify(dataArray), lib, appid, libVersion, option.encryptType); - option.url += '&spv=' + getSpv(lib, appid, libVersion) + '&reqt=' + reqt + '&reqv=' + option.encryptType; - return option; - } - globalWindow.AnalysysModule ? globalWindow.AnalysysModule.uploadData = uploadData : globalWindow.AnalysysModule = { uploadData: uploadData }; - //# sourceMappingURL=index.js.map - - exports.uploadData = uploadData; - - return exports; - -}({})); diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js deleted file mode 100644 index 1f223cd..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.amd.min.js +++ /dev/null @@ -1,3471 +0,0 @@ -define(function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - } - - var $lib = 'JS'; - var $lib_version = '5.0.4'; - var $ans = 'JS'; - var storageKey = 'FZ_STROAGE'; - var globalWindow = window; - // sdk配置参数默认值 - function optionsDefault() { - return { - appkey: '', - uploadURL: '', - debugMode: 0, - visitorConfigURL: '', - name: '', - autoStartUp: true, - auto: true, - SDKFileDirectory: '', - autoTrack: false, - autoClickBlackList: '', - userClickProperty: {}, - trackList: [], - autoHeatmap: false, - autoWebstay: true, - webstayDuration: 18000000, - autoProfile: true, - hash: true, - encryptType: 0, - allowTimeCheck: false, - maxDiffTimeInterval: 30, - autoPageViewDuration: false, - sendDataTimeout: 10000, - getDataTimeout: 10000, - sendType: 'img', - crossSubdomain: false - }; - } - //# sourceMappingURL=index.js.map - - var typeMap = {}; - var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; - typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); - }); - function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; - } - function isNumber(value) { - return type(value) === 'number'; - } - function isString(value) { - return type(value) === 'string'; - } - function isArray(value) { - return Array.isArray(value); - } - function isBoolean(value) { - return type(value) === 'boolean'; - } - function isObject(value) { - return type(value) === 'object'; - } - function isFunction(value) { - return type(value) === 'function'; - } - //# sourceMappingURL=index.js.map - - var firstVisitTime = '$first_visit_time'; - // 只读属性,无法被更改 - var readOnlyAttrs = ['$lib', '$lib_version', '$platform', firstVisitTime, '$debug', '$is_login']; - // 公共预制属性,任何事件上报都会带上这些属性 - var publicAttrs = ['$lib', '$lib_version', '$platform', '$is_login', '$debug']; - // 通用属性,行为事件都会上报 - var commonAttrs = ['$screen_width', '$screen_height', '$language', '$time_zone', '$session_id', '$is_time_calibrated', '$web_crawler', '$user_agent', '$title', '$url', '$is_first_day', - // utm相关属性 - '$utm_campaign_id', '$utm_campaign', '$utm_medium', '$utm_source', '$utm_content', '$utm_term']; - // element相关属性 - var elementAttrs = ['$element_type', '$element_path', '$element_content', '$element_id', '$element_name', '$element_target_url', '$element_class_name', '$device_type', '$url_path']; - // 预制事件列表与事件属性 - var events = { - $startup: __spreadArrays(commonAttrs, ['$is_first_time' //首次访问,只在startUp - ]), - $end: __spreadArrays(commonAttrs, ['$duration' //使用时长 - ]), - $pageview: __spreadArrays(commonAttrs, ['$url_domain', '$referrer', '$referrer_domain', '$startup_time' // 此行下面5个只在 pageView 中有 - ]), - page_close: __spreadArrays(commonAttrs, ['$referrer', 'pagestaytime']), - $user_click: __spreadArrays(elementAttrs, commonAttrs), - $web_click: __spreadArrays(commonAttrs, elementAttrs, ['$page_width', '$page_height', '$click_x', '$click_y', '$element_x', '$element_y', '$element_clickable']), - $webstay: __spreadArrays(commonAttrs, ['$referrer', '$referrer_domain', '$viewport_width', '$viewport_position', '$viewport_height', '$event_duration', '$device_type']), - track: __spreadArrays(commonAttrs), - $profile_set_once: [firstVisitTime, '$first_visit_language'], - $alias: ['$original_id'], - $getPresetProperties: __spreadArrays(publicAttrs, commonAttrs, [firstVisitTime]) - }; - //# sourceMappingURL=eventAttrs.js.map - - function keyErr(type) { - return "{FN}:Property value invalid of key[{KEY}], support type: " + type + "\n\tcurrent value: {VALUE}\n\tcurrent type: {VALUETYPE}"; - } - var errorMessage = { - 'common': '', - '60001': keyErr('String'), - '60002': keyErr('Number'), - '60003': keyErr('Boolean'), - '60004': keyErr('Function'), - '60005': '{FN}:The length of the property[{KEY}] value (string[{VALUE}]) needs to be 1-255 !', - '60006': 'Please set appkey first.', - '60007': 'Please set uploadURL first.', - '60008': 'Send message failed.', - '60009': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-125 !', - '600010': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-99 !', - '600012': '{FN}:Property key invalid, nonsupport value: ' + readOnlyAttrs.join('/') + ' \n' + 'current KEY:{KEY}', - '600016': '{FN}: Property value invalid, support type: Object \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '600020': 'DebugMode only can be 0,1,2', - '600022': '{FN}: 属性[{KEY}]的值[{VALUE}]无效,支持类型:String/Number/Boolean/string[],若为字符串,长度范围1-255字符', - '600023': '{FN}: 属性key的名称[{KEY}]无效,属性key是以字母开头的字符串,由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;', - '600025': '{FN}: 事件名称[{VALUE}]无效,事件ID必须字母或者$开头,可包含数字字母与下划线,1-99个字符;' - }; - var successMessage = { - 'common': '', - '20001': 'Send message success', - '20002': '{FN}: set success ({VALUE})', - '20003': '{FN}:({VALUE}) delete success', - '20004': '{FN}:clear success', - '20005': '{FN}:reset success', - '20006': 'set appkey success. current appkey : {VALUE}', - '20007': 'Init Analysysdata ' + $lib + ' sdk success, version : ' + $lib_version + '', - '20008': 'set uploadURL success. current uploadURL : {VALUE}', - '20009': '{FN}:[{KEY}] : get failed', - '20010': '{FN}:[{KEY}] : get success. ({VALUE})', - '20011': '{FN}:({VALUE}) delete failed', - '20012': 'Send Message to Server: {KEY} \n' + 'data:{VALUE}', - '20013': "收到服务器的时间: {VALUE} \n" + "本地时间: {KEY} \n" + "时间相差: {FN} \n" + "数据将会进行时间校准", - '20014': 'aliasID already bound' - }; - function successLog(opt) { - if (config.debugMode === 1 || config.debugMode === 2) { - var msgTemp = successMessage[opt.code] || successMessage.common; - var showMsg = msgTemp.replace(/{FN}/, opt.fn).replace(/{KEY}/g, opt.key || '').replace(/{VALUE}/g, JSON.stringify(opt.value)); - console.log(showMsg); - } - } - function errorLog(opt, isInit) { - var msgTemp = errorMessage[opt.code] || errorMessage.common; - var showMsg = msgTemp.replace(/{FN}/g, opt.fn || '').replace(/{KEY}/g, JSON.stringify(opt.key || '')).replace(/{VALUE}/g, JSON.stringify(opt.value)).replace(/{VALUETYPE}/g, type(opt.value)).replace(/{KEYTYPE}/g, type(opt.key)); - if (config.debugMode === 1 || config.debugMode === 2 || isInit) { - console.warn(showMsg); - } - } - function printLog(msg) { - console.log(msg); - } - //# sourceMappingURL=index.js.map - - /** - * 长度校验 - * @param value - * @param max - * @param min - * @returns - */ - function lengthCheck(value, max, min) { - if (max === void 0) { - max = 255; - } - if (min === void 0) { - min = 1; - } - if (!isString(value)) { - return false; - } - var len = value.length; - return len <= max && len >= min; - } - /** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ - function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; - } - /** - * 自定义属性值校验 - * @param value - */ - function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; - } - /** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ - function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; - } - function errLog(key, value, code) { - errorLog({ - key: key, - code: code, - value: value - }, true); - } - /** - * 初始化布尔类型参数校验 - * @param value - * @param key - * @returns - */ - function booleanCheck(value, key) { - var res = isBoolean(value); - if (!res) { - errLog(key, value, 60003); - } - return res; - } - function functionCheck(value, key) { - var res = isFunction(value); - if (!res) { - errLog(key, value, 60004); - } - return res; - } - function numberCheck(value, key) { - var res = isNumber(value); - if (!res) { - errLog(key, value, 60002); - } - return res; - } - function stringCheck(value, key) { - var res = isString(value); - if (!res) { - errLog(key, value, 60001); - } - return res; - } - function objectCheck(value, key) { - var res = isObject(value); - if (!res) { - errLog(key, value, 600016); - } - return res; - } - /** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ - function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; - } - function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; - } - /** - * 判断当前元素是否为可触控元素 - */ - function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // public method for decoding - var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - // private method for UTF-8 decoding - var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - }; - //# sourceMappingURL=index.js.map - - var document$1 = window.document; - /** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ - function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } - } - //# sourceMappingURL=index.js.map - - function replaceKey(str) { - return str.replace('ANSAPPID', 'ARKAPPID').replace('ANS$DEBUG', 'ARKDEBUG').replace('ANSUPLOADURL', 'ARKUPLOADURL'); - } - var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(replaceKey(decode(data))) : null; - } catch (e) {} - }; - var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} - }; - var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; - }; - var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); - }; - //# sourceMappingURL=index.js.map - - /** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ - function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; - } - //# sourceMappingURL=isSpider.js.map - - function getUrlDomain(url) { - if (url) { - return url.split('?')[0]; - } - return ''; - } - // 单页面模式下监听路径变化 - function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); - } - var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); - }; - //# sourceMappingURL=index.js.map - - var dataBase = 'ANALYSYS_AGENT'; - var tableName = 'FZ_STORAGE'; - var IndexedDb = /** @class */function () { - function IndexedDb() { - this.isOpen = false; - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - _this.isOpen = true; - }; - request.onerror = function (event) { - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - IndexedDb.prototype.getObjectStore = function () { - return this.db.transaction(tableName, 'readwrite').objectStore(tableName); - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.getObjectStore().add(data); - request.onsuccess = function (event) { - successFn && successFn(event); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 删除数据 - IndexedDb.prototype.delete = function () { - var request = this.getObjectStore().delete(1); - request.onsuccess = function (event) {}; - }; - // 更新数据 - IndexedDb.prototype.put = function (data, successFn, errorFn) { - var request = this.getObjectStore().put(data); - request.onsuccess = function (event) { - successFn && successFn(); - }; - request.onerror = function (event) { - errorFn && errorFn(); - }; - }; - return IndexedDb; - }(); - //# sourceMappingURL=index.js.map - - var domainUrl = getDomainFromUrl(true); - var cookieKey = domainUrl ? storageKey + "." + domainUrl : ''; - var storeDb = new IndexedDb(); - var dBhasData = false; - function getStorage(fn) { - var cookieStore = function () { - return cookieKey ? getCookie(cookieKey) : null; - }; - var store = getLocalStorage() || cookieStore() || null; - if (!globalWindow.indexedDB) { - config.crossSubdomain ? fn(cookieStore() || getLocalStorage() || null) : fn(store); - } else { - var get = function () { - storeDb.get(function (res) { - dBhasData = !!res; - var content = res ? res.content : store; - config.crossSubdomain ? fn(cookieStore() || content) : fn(content); - }); - }; - storeDb.isOpen ? get() : storeDb.onConnectSuccess = get; - } - } - function setStorage() { - var data = getCore(); - if (config.crossSubdomain && cookieKey) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - if (globalWindow.indexedDB) { - if (!dBhasData) { - storeDb.add({ - id: 1, - content: data - }); - } else { - storeDb.put({ - id: 1, - content: data - }); - } - } else { - setLocalStorage(storageKey, data); - } - } - // 清空历史cookie,根据场景只保留一个 - function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } - // 如果indexedDb打开成功 删掉Storage - if (storeDb.isOpen) { - globalWindow.localStorage.removeItem(storageKey); - } - } - //# sourceMappingURL=index.js.map - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - //# sourceMappingURL=index.js.map - - function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; - } - function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; - } - //# sourceMappingURL=index.js.map - - // 启动时间 - var startUpTime; - // 初始化时获取启动时间 - function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; - } - // 设置启动时间 - function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); - } - // 清空时间 - function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); - } - //# sourceMappingURL=startUpTime.js.map - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - //# sourceMappingURL=index.js.map - - /** - * 路径相关参数信息存储 - */ - var pathParams = { - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '' - }; - function setPathParams() { - var url = new URL(decodeURI(window.location.href)); - var searchParams = url.searchParams; - pathParams.utm_campaign_id = searchParams.get('campaign_id') || ''; - pathParams.utm_campaign = searchParams.get('utm_campaign') || ''; - pathParams.utm_content = searchParams.get('utm_content') || ''; - pathParams.utm_medium = searchParams.get('utm_medium') || ''; - pathParams.utm_source = searchParams.get('utm_source') || ''; - pathParams.utm_term = searchParams.get('utm_term') || ''; - } - //# sourceMappingURL=pathParams.js.map - - /** - * 返回核心数据默认值 - * @returns object - */ - function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; - } - var core; - /** - * 初始化 - */ - function coreInit(fn) { - setPathParams(); - initStartUpTime(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - getStorage(function (data) { - if (data) { - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - var debug = data.ARKDEBUG; - // data.ARKUPLOADURL !== config.uploadURL - if (config.appkey !== data.ARKAPPID || debug === 1 && debug !== config.debugMode) { - setDefCore(); - } else { - core = data; - } - } else { - setDefCore(); - } - fn && fn(); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); - }); - } - function getCore() { - return core; - } - // 重置缓存数据 - function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); - } - /** - * 设置参数 - */ - function setCoreParam(key, value) { - core[key] = value; - setStorage(); - } - /** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ - function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; - } - /** - * 系统设置匿名id - * @returns - */ - function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); - } - /** - * 获取sessionId - */ - function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var getGmt = function (time) { - return new Date(time + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - }; - var sessionDate = core.SEESIONDATE; - if (!core.SEESIONID || !sessionDate || nowDate - sessionDate > 30 * 60 * 1000 || getGmt(nowDate) !== getGmt(sessionDate)) { - setSessionId(); - } - return core.SEESIONID; - } - /** - * 设置sessionid - */ - function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); - } - /** - * 用户手动设置匿名id - * @param xwho - */ - function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ - function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; - } - // 通用属性 - /** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ - function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return __assign({}, core.ARKSUPER); - } - /** - * 设置通用属性 - * @param property 属性 - */ - function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); - } - /** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ - function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); - } - // 添加上报数据 - function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } - } - // 删除上报数据 - function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); - } - // 获取上报数据 - function getPostData() { - return __spreadArrays(core.POSTDATA); - } - //# sourceMappingURL=core.js.map - - // 类型转换 - /** - * 值转换成字符串 - */ - function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; - } - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - //# sourceMappingURL=transform.js.map - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - //# sourceMappingURL=ajax.js.map - - /** - * 服务器时间,开始时间校准时用到 - */ - // 服务器时间 - var serverTime = 0; - // 是否已获取过服务器时间 - var isGetServerTime = false; - // 服务器时间与本地时间的差值 - var timeDiff = 0; - /** - * 返回校准后的当前时间 - * - */ - function getNow() { - var now = +new Date(); - return now + timeDiff; - } - // 获取服务器时间 - function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function () { - isGetServerTime = true; - fn && fn(serverTime); - }); - } - //# sourceMappingURL=time.js.map - - // 缓存sdk异步加载完成前的函数调用 - var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; - var callbackArr = []; - // 执行缓存函数 - function implementAallbackArr() { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } - } - // sdk初始化前钩子是否执行完成 - var beforeInitReady = false; - var implementBeforeInit = function (fn) { - function next() { - if (!beforeInitReady) { - beforeInitReady = true; - fn(); - } - } - var beforeInit = config.beforeInit; - if (beforeInit) { - var f = beforeInit.call(globalWindow.AnalysysAgent, __assign({}, config), next); - if (f instanceof Promise || f && isFunction(f.then)) { - f.then(function () { - next(); - }); - } - } else { - next(); - } - }; - // sdk是否准备就绪 - var isReady = function () { - return isGetServerTime && isInitConfig && beforeInitReady; - }; - function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isReady()) { - var obj = { - fn: callback, - arg: args, - xwhen: getNow() - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - return callback.apply(callback, args); - } - }; - } - //# sourceMappingURL=index.js.map - - var isHybrid = false; - // hybrid模式下缓存获取类方法用户回调函数 - var nativeCallbackFn = {}; - /** - * 初始化webViewHybrid模式 - */ - function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - } - // let info = AnalysysAgentHybrid.getAppStartInfo - // if (info && isFunction(info)) { - // let webViewHybridData = info() - // console.log('Hybrid模式注入参数', webViewHybridData) - // if (isString(webViewHybridData)) { - // webViewHybridData = JSON.parse(webViewHybridData) - // } - // hybrid.userId = webViewHybridData.userId - // } - } - } - //# sourceMappingURL=hybrid.js.map - - var eventMap = { - '$startup': 'startUp', - '$pageview': 'pageView', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' - }; - // hybrid模式下上报事件 - function callNative(functionName, functionParams, isCallback) { - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: functionParams - }; - // 是否需要native回调js - if (isCallback) { - obj['callbackFunName'] = 'nativeCallback'; - } - // ios - if (globalWindow.webkit && globalWindow.webkit.messageHandlers && globalWindow.webkit.messageHandlers.AnalysysAgent && globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage) { - globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage(obj); - } - // 安卓 - if (globalWindow.AnalysysAgentHybrid && globalWindow.AnalysysAgentHybrid.analysysHybridCallNative) { - globalWindow.AnalysysAgentHybrid.analysysHybridCallNative(JSON.stringify(obj)); - } - } - // hybrid模式下回调类方法 - function callNativeCallback(functionName, functionParams, fn) { - if (fn) { - nativeCallbackFn[functionName] ? nativeCallbackFn[functionName].push(fn) : nativeCallbackFn[functionName] = [fn]; - } - callNative(functionName, functionParams ? [functionParams] : [], true); - } - // 实时同步h5的url给原生端 - function setHybirdWebUrl() { - if (isHybrid) { - callNative('getHybirdWebURL', [{ - url: document.location.href - }]); - } - } - //# sourceMappingURL=hybrid.js.map - - function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } - } - /** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ - function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } - } - /** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ - function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); - } - /** - * 获取单个通用属性 - */ - function getSuperProperty$1(superPropertyName, fn) { - if (isHybrid) { - callNativeCallback('getSuperProperty', superPropertyName, fn); - } else { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; - } - } - /** - * 获取所有通用属性 - */ - function getSuperProperties(fn) { - if (isHybrid) { - callNativeCallback('getSuperProperties', null, fn); - } else { - var value = getSuperProperty(); - fn && fn(value); - return value; - } - } - /** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ - function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); - } - /** - * 删除所有属性 - */ - function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); - } - //# sourceMappingURL=superProperty.js.map - - function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; - } - function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - var uploadURL = config.uploadURL[config.uploadURL.length - 1] !== '/' ? config.uploadURL : config.uploadURL.substring(0, config.uploadURL.length - 1); - validurl = validurl.replace(uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; - } - //# sourceMappingURL=image.js.map - - var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - }, - // 记录事件开始时间 - timeEvent: {} - }; - // 执行事件上报回调函数 - function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } - } - //# sourceMappingURL=eventAttribute.js.map - - function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); - } - //# sourceMappingURL=beacon.js.map - - // 一次最多上报20条 - var MAXLINENUM = 20; - // 上报失败后重试次数 - var RETRNUM = 3; - // 正在上报数据 - var doingList = []; - // 当前重试次数 - var retryCount = 0; - // 发送请求 - function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysModule && isFunction(globalWindow.AnalysysModule.uploadData)) { - // option = globalWindow.AnalysysModule.uploadData(option); - // } - if (globalWindow.AnalysysModal && typeof globalWindow.AnalysysModal === 'function') { - globalWindow.AnalysysModal(option.data); - } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - // 数据上报成功之后执行 - emit('successSend', o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); - } - /** - * img方式上报 - * @param data - */ - function imgGetData(data) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - // 数据上报成功之后执行 - emit('successSend', data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); - } - /** - * 上报数据 - * @param data object - * @param fn 上报成功后回调函数 - * @param isTrack 是否是自定义事件 - */ - function sendData(data, fn, isTrack) { - var xwhat = data.xwhat; - // Hybrid模式下由原生端上报 - if (isHybrid && ['$web_click', '$webstay', '$user_click'].indexOf(xwhat) === -1) { - // hybrid模式下删除这些属性,由原生上报 - var arr = ['$is_first_day', '$session_id', '$is_time_calibrated', '$startup_time', '$lib', '$lib_version', '$platform', '$debug', '$is_login']; - arr.forEach(function (o) { - delete data.xcontext[o]; - }); - var functionParams = [data.xcontext]; - if (xwhat === '$pageview') { - functionParams.unshift(data.xcontext.$title || ''); - } - if (isTrack) { - functionParams.unshift(xwhat); - } - callNative(isTrack ? 'track' : xwhat, functionParams); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 上报之前执行 - emit('afterSend', __assign(__assign({}, data), { xcontext: __assign({}, data.xcontext) })); - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - successLog({ - key: option.url, - value: option.data, - code: 20012 - }); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } - } - //# sourceMappingURL=index.js.map - - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; - } - function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; - } - // 获取元素内容 - function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); - } - // 获取元素路径 - function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); - } - function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - //# sourceMappingURL=element.js.map - - /** - * 全埋点相关属性存储 - */ - var userClickAttrs = {}; - var webClickAttrs = {}; - function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); - } - function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; - } - //# sourceMappingURL=clickElement.js.map - - // 获取设备类型 - function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - } - // 动态加载js - function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } - } - //# sourceMappingURL=index.js.map - - /** - * 获取属性值 - */ - var getAttr = { - xwho: function () { - return getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return (navigator.language || navigator.browserLanguage).toLowerCase(); - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $referrer_domain: function () { - return getUrlDomain(eventAttribute.pageview.prevPath); - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - // 页面URL-去参的页面URL - $url_path: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } - }; - //# sourceMappingURL=getAttr.js.map - - function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; - } - //# sourceMappingURL=index.js.map - - /** - * 页面属性 - */ - var pageProperty = {}; - /** - * 设置页面属性 - * @param properties - */ - function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); - } - /** - * 获取页面属性 - * @returns - */ - function getPageProperty() { - return pageProperty; - } - /** - * 删除页面属性 - */ - function delPageProperty() { - pageProperty = {}; - } - //# sourceMappingURL=pageProperty.js.map - - function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), userObj); - // 执行beforePageView钩子,返回false则停止上报 - var beforePageView = config.beforePageView; - if (beforePageView) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, '$pageview'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageView.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - // 缓存当前pv上报的title - eventAttribute.pageview['$title'] = res.xcontext['$title']; - sendData(res, fn); - return res; - } - //# sourceMappingURL=pageView.js.map - - function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - var pageCloseAttr = eventAttribute.pageClose; - var hideTime = pageCloseAttr.hideTime; - return !pageCloseAttr.hideStartTime ? hideTime : hideTime + (res.xwhen - pageCloseAttr.hideStartTime); - } - // 获取访问时长,排除小于0情况 - var pagestaytime = res.xwhen - eventAttribute.pageview.xwhen - getHideTime(); - var attrs = { - pagestaytime: pagestaytime > 0 ? pagestaytime : res.xwhen - eventAttribute.pageview.xwhen - }; - // 填充当前pv上报的title - var title = eventAttribute.pageview['$title']; - if (title) { - attrs['$title'] = title; - } - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; - // 执行beforePageClose钩子,返回false则停止上报 - var beforePageClose = config.beforePageClose; - if (beforePageClose) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, 'page_close'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageClose.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res); - } - // 触发pageclose - function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; - } - // 设置页面隐藏时间 - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } - function setPageHideTime() { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } - } - //# sourceMappingURL=pageclose.js.map - - function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); - } - /** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ - function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); - } - /** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ - function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); - } - /** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ - function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); - } - /** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ - function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); - } - /** - * 删除当前用户单个属性值 - * @param propertyName - */ - function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); - } - /** - * 删除当前用户所有属性值 - */ - function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); - } - //# sourceMappingURL=profile.js.map - - function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } - } - //# sourceMappingURL=startUp.js.map - - function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - if (aliasId === getId()) { - successLog({ - code: 20014 - }); - fn && isFunction(fn) && fn(); - return; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } - } - //# sourceMappingURL=alias.js.map - - function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); - } - //# sourceMappingURL=userClick.js.map - - function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); - } - //# sourceMappingURL=webClick.js.map - - function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); - } - //# sourceMappingURL=webstay.js.map - - function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); - } - //# sourceMappingURL=reset.js.map - - /** - * 获取预置属性 - * @returns object - */ - function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; - } - //# sourceMappingURL=presetProperties.js.map - - function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData('track'); - var trackAttrs = eventAttrs && !isFunction(eventAttrs) ? attrCheck(eventAttrs, eventName) : {}; - // 增加使用时长属性 - if (eventAttribute.timeEvent[eventName]) { - trackAttrs['$duration'] = getNow() - eventAttribute.timeEvent[eventName]; - delete eventAttribute[eventName]; - } - res.xwhat = eventName; - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - // 执行beforeTrack钩子,返回false则停止上报 - var beforeTrack = config.beforeTrack; - if (beforeTrack) { - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, eventName); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - if (beforeTrack.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res, callback, true); - return res; - } - //# sourceMappingURL=track.js.map - - /** - * 记录自定义事件的持续时长 - * @param eventName 事件名称 - */ - function timeEvent(eventName) { - eventAttribute.timeEvent[eventName] = getNow(); - } - //# sourceMappingURL=timeEvent.js.map - - /** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ - function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ - function getDistinctId(fn) { - if (isHybrid) { - callNativeCallback('getDistinctId', null, fn); - } else { - var id = getAnonymousID(); - fn && fn(id); - return id; - } - } - //# sourceMappingURL=identify.js.map - - /** - * 注册页面自动采集自定义属性 - */ - function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } - } - //# sourceMappingURL=pageProperty.js.map - - // native回调方法 - function nativeCallback(name, params) { - var nativeCallbackNam = nativeCallbackFn[name]; - if (nativeCallbackNam) { - nativeCallbackNam.forEach(function (o) { - o(params); - }); - nativeCallbackFn[name] = []; - } - } - //# sourceMappingURL=nativeCallback.js.map - - var eventMap$1 = { - // before - //afterInit: [], //初始化完成之后,可以获取到sdk实例 - // afterSend: [], //数据上报之前执行,post上报类型时在加入数据缓存队列之前执行 - // beforeSend: [], //数据上报之后 - // successSend: [] //数据上报成功之后 - //errorSend: [] //数据上报失败之后 - }; - function on(eventName, fn) { - eventMap$1[eventName] ? eventMap$1[eventName].push(fn) : eventMap$1[eventName] = [fn]; - } - function emit(eventName) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (eventMap$1[eventName]) { - eventMap$1[eventName].forEach(function (o) { - o.apply(void 0, args); - }); - } - } - //# sourceMappingURL=hooks.js.map - - // 获取dom元素标签名称 - function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; - } - // 返回dom元素父节点 - function getParentNode(el) { - return el.parentNode; - } - // 获取所有兄弟节点(包括自己) - function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; - } - // 获取元素在同级中的下标 - function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; - } - // 遍历节点树 - function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } - } - //# sourceMappingURL=elements.js.map - - var visualMap = null; - var href = globalWindow.location.href; - // 上报可视化数据 - function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } - } - // 获取可视化埋点数据 - function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - printLog('Get Visual Event List from app'); - printLog(JSON.stringify(list, null, 2)); - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } - } - // 动态加载可视化交互文件 - function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } - } - //# sourceMappingURL=visual.js.map - - var scrollTime = null; - // 是否自动采集pv - function triggerPageView() { - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // hybrid模式下实时同步当前url给原生端 - setHybirdWebUrl(); - // 获取可视化数据 - getVisualList(); - } - /** - * sdk自动触发器 - */ - function autoTrigger() { - if (!isHybrid && config.autoStartUp) { - startUp(); - } - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageClose(); - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - document.addEventListener('click', webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 记录页面隐藏时间 - setPageHideTime(); - } - //# sourceMappingURL=index.js.map - - function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } - } - var configRule = { - appkey: { - ck: [stringCheck] - }, - uploadURL: { - ck: [stringCheck] - }, - debugMode: { - ck: [numberCheck] - }, - name: { - ck: [stringCheck] - }, - // 是否自动上报startup事件 - autoStartUp: { - ck: [booleanCheck] - }, - // 是否自动上报页面浏览 - auto: { - ck: [booleanCheck] - }, - autoProfile: { - ck: [booleanCheck] - }, - encryptType: { - ck: [numberCheck] - }, - hash: { - ck: [booleanCheck] - }, - allowTimeCheck: { - ck: [booleanCheck] - }, - maxDiffTimeInterval: { - ck: [numberCheck, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - // 是否自动上报全埋点事件 - autoTrack: { - ck: [booleanCheck] - }, - trackList: { - ck: [nameListCheck] - }, - autoCompleteURL: { - ck: [booleanCheck] - }, - autoPageViewDuration: { - ck: [booleanCheck] - }, - sendDataTimeout: { - ck: [numberCheck] - }, - sendType: { - ck: [stringCheck] - }, - autoClickBlackList: { - ck: [nameListCheck] - }, - autoHeatmap: { - ck: [booleanCheck] - }, - SDKFileDirectory: { - ck: [stringCheck] - }, - visitorConfigURL: { - ck: [stringCheck] - }, - crossSubdomain: { - ck: [booleanCheck] - }, - pageProperty: { - ck: [objectCheck] - }, - pageViewBlackList: { - ck: [nameListCheck] - }, - userClickProperty: { - ck: [objectCheck] - }, - exposure: { - ck: [objectCheck] - }, - // track上报之前执行该函数,返回false则停止上报 - beforeTrack: { - ck: [functionCheck] - }, - // pageView上报之前执行该函数,返回false则停止上报 - beforePageView: { - ck: [functionCheck] - }, - // PageClose上报之前执行该函数,返回false则停止上报 - beforePageClose: { - ck: [functionCheck] - }, - // 通知sdk客户端程序已经准备好了 - beforeInit: { - ck: [functionCheck] - } - }; - var config = optionsDefault(); - // 是否完成初始化参数配置 - var isInitConfig = false; - function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.ck.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.ck.length; i++) { - var fn_1 = rule.ck[i]; - if (!fn_1(value, o)) { - isOk = false; - break; - } - } - if (isOk) { - if (o === 'uploadURL' || o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - if (o === 'pageProperty' && value) { - setPageProperty(value); - } - config[o] = value; - } - } - }); - // 动态加载可视化交互文件 - loadVisual(); - function procedure() { - if (isReady()) { - successLog({ - code: 20007 - }); - // 执行初始化完成之前缓存的上报 - implementAallbackArr(); - // 自动触发生命周期相关钩子 - autoTrigger(); - // 之心生命周期事件监听 - emit('afterInit', __assign({}, config)); - fn && fn(config); - } - } - // 客户端程序是否准备就绪 - implementBeforeInit(procedure); - // 日期校准成功 - getServerTime(procedure); - // 核心内容准备就绪 - coreInit(function () { - isInitConfig = true; - procedure(); - }); - } - //# sourceMappingURL=config.js.map - - webViewHybridInit(); - var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.isHybrid = isHybrid; - this.config = config; - this.appStart = ready(startUp); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = ready(getSuperProperties); - this.unRegisterSuperProperty = ready(unRegisterSuperProperty); - this.clearSuperProperties = ready(clearSuperProperties); - this.profileSetOnce = ready(profileSetOnce); - this.profileSet = ready(profileSet); - this.profileAppend = ready(profileAppend); - this.profileIncrement = ready(profileIncrement); - this.profileDelete = ready(profileDelete); - this.profileUnset = ready(profileUnset); - this.reset = ready(reset); - this.track = ready(track); - this.timeEvent = timeEvent; - this.alias = ready(alias); - this.getPresetProperties = ready(getPresetProperties); - this.identify = ready(identify); - this.getDistinctId = ready(getDistinctId); - this.pageProperty = ready(pageProperty$1); - this.nativeCallback = nativeCallback; - this.on = on; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - if (!config.appkey) throw errorMessage['60006']; - if (!config.uploadURL) throw errorMessage['60007']; - setConfig(config, function (o) { - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; - }(); - var ArkSdk = new ArkJsSdk(); - globalWindow.AnalysysAgent = ArkSdk; - //# sourceMappingURL=index.js.map - - return ArkSdk; - -}); diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js deleted file mode 100644 index 2173f06..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.es6.min.js +++ /dev/null @@ -1,3467 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -} - -var $lib = 'JS'; -var $lib_version = '5.0.4'; -var $ans = 'JS'; -var storageKey = 'FZ_STROAGE'; -var globalWindow = window; -// sdk配置参数默认值 -function optionsDefault() { - return { - appkey: '', - uploadURL: '', - debugMode: 0, - visitorConfigURL: '', - name: '', - autoStartUp: true, - auto: true, - SDKFileDirectory: '', - autoTrack: false, - autoClickBlackList: '', - userClickProperty: {}, - trackList: [], - autoHeatmap: false, - autoWebstay: true, - webstayDuration: 18000000, - autoProfile: true, - hash: true, - encryptType: 0, - allowTimeCheck: false, - maxDiffTimeInterval: 30, - autoPageViewDuration: false, - sendDataTimeout: 10000, - getDataTimeout: 10000, - sendType: 'img', - crossSubdomain: false - }; -} -//# sourceMappingURL=index.js.map - -var typeMap = {}; -var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; -typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); -}); -function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; -} -function isNumber(value) { - return type(value) === 'number'; -} -function isString(value) { - return type(value) === 'string'; -} -function isArray(value) { - return Array.isArray(value); -} -function isBoolean(value) { - return type(value) === 'boolean'; -} -function isObject(value) { - return type(value) === 'object'; -} -function isFunction(value) { - return type(value) === 'function'; -} -//# sourceMappingURL=index.js.map - -var firstVisitTime = '$first_visit_time'; -// 只读属性,无法被更改 -var readOnlyAttrs = ['$lib', '$lib_version', '$platform', firstVisitTime, '$debug', '$is_login']; -// 公共预制属性,任何事件上报都会带上这些属性 -var publicAttrs = ['$lib', '$lib_version', '$platform', '$is_login', '$debug']; -// 通用属性,行为事件都会上报 -var commonAttrs = ['$screen_width', '$screen_height', '$language', '$time_zone', '$session_id', '$is_time_calibrated', '$web_crawler', '$user_agent', '$title', '$url', '$is_first_day', -// utm相关属性 -'$utm_campaign_id', '$utm_campaign', '$utm_medium', '$utm_source', '$utm_content', '$utm_term']; -// element相关属性 -var elementAttrs = ['$element_type', '$element_path', '$element_content', '$element_id', '$element_name', '$element_target_url', '$element_class_name', '$device_type', '$url_path']; -// 预制事件列表与事件属性 -var events = { - $startup: __spreadArrays(commonAttrs, ['$is_first_time' //首次访问,只在startUp - ]), - $end: __spreadArrays(commonAttrs, ['$duration' //使用时长 - ]), - $pageview: __spreadArrays(commonAttrs, ['$url_domain', '$referrer', '$referrer_domain', '$startup_time' // 此行下面5个只在 pageView 中有 - ]), - page_close: __spreadArrays(commonAttrs, ['$referrer', 'pagestaytime']), - $user_click: __spreadArrays(elementAttrs, commonAttrs), - $web_click: __spreadArrays(commonAttrs, elementAttrs, ['$page_width', '$page_height', '$click_x', '$click_y', '$element_x', '$element_y', '$element_clickable']), - $webstay: __spreadArrays(commonAttrs, ['$referrer', '$referrer_domain', '$viewport_width', '$viewport_position', '$viewport_height', '$event_duration', '$device_type']), - track: __spreadArrays(commonAttrs), - $profile_set_once: [firstVisitTime, '$first_visit_language'], - $alias: ['$original_id'], - $getPresetProperties: __spreadArrays(publicAttrs, commonAttrs, [firstVisitTime]) -}; -//# sourceMappingURL=eventAttrs.js.map - -function keyErr(type) { - return "{FN}:Property value invalid of key[{KEY}], support type: " + type + "\n\tcurrent value: {VALUE}\n\tcurrent type: {VALUETYPE}"; -} -var errorMessage = { - 'common': '', - '60001': keyErr('String'), - '60002': keyErr('Number'), - '60003': keyErr('Boolean'), - '60004': keyErr('Function'), - '60005': '{FN}:The length of the property[{KEY}] value (string[{VALUE}]) needs to be 1-255 !', - '60006': 'Please set appkey first.', - '60007': 'Please set uploadURL first.', - '60008': 'Send message failed.', - '60009': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-125 !', - '600010': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-99 !', - '600012': '{FN}:Property key invalid, nonsupport value: ' + readOnlyAttrs.join('/') + ' \n' + 'current KEY:{KEY}', - '600016': '{FN}: Property value invalid, support type: Object \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '600020': 'DebugMode only can be 0,1,2', - '600022': '{FN}: 属性[{KEY}]的值[{VALUE}]无效,支持类型:String/Number/Boolean/string[],若为字符串,长度范围1-255字符', - '600023': '{FN}: 属性key的名称[{KEY}]无效,属性key是以字母开头的字符串,由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;', - '600025': '{FN}: 事件名称[{VALUE}]无效,事件ID必须字母或者$开头,可包含数字字母与下划线,1-99个字符;' -}; -var successMessage = { - 'common': '', - '20001': 'Send message success', - '20002': '{FN}: set success ({VALUE})', - '20003': '{FN}:({VALUE}) delete success', - '20004': '{FN}:clear success', - '20005': '{FN}:reset success', - '20006': 'set appkey success. current appkey : {VALUE}', - '20007': 'Init Analysysdata ' + $lib + ' sdk success, version : ' + $lib_version + '', - '20008': 'set uploadURL success. current uploadURL : {VALUE}', - '20009': '{FN}:[{KEY}] : get failed', - '20010': '{FN}:[{KEY}] : get success. ({VALUE})', - '20011': '{FN}:({VALUE}) delete failed', - '20012': 'Send Message to Server: {KEY} \n' + 'data:{VALUE}', - '20013': "收到服务器的时间: {VALUE} \n" + "本地时间: {KEY} \n" + "时间相差: {FN} \n" + "数据将会进行时间校准", - '20014': 'aliasID already bound' -}; -function successLog(opt) { - if (config.debugMode === 1 || config.debugMode === 2) { - var msgTemp = successMessage[opt.code] || successMessage.common; - var showMsg = msgTemp.replace(/{FN}/, opt.fn).replace(/{KEY}/g, opt.key || '').replace(/{VALUE}/g, JSON.stringify(opt.value)); - console.log(showMsg); - } -} -function errorLog(opt, isInit) { - var msgTemp = errorMessage[opt.code] || errorMessage.common; - var showMsg = msgTemp.replace(/{FN}/g, opt.fn || '').replace(/{KEY}/g, JSON.stringify(opt.key || '')).replace(/{VALUE}/g, JSON.stringify(opt.value)).replace(/{VALUETYPE}/g, type(opt.value)).replace(/{KEYTYPE}/g, type(opt.key)); - if (config.debugMode === 1 || config.debugMode === 2 || isInit) { - console.warn(showMsg); - } -} -function printLog(msg) { - console.log(msg); -} -//# sourceMappingURL=index.js.map - -/** - * 长度校验 - * @param value - * @param max - * @param min - * @returns - */ -function lengthCheck(value, max, min) { - if (max === void 0) { - max = 255; - } - if (min === void 0) { - min = 1; - } - if (!isString(value)) { - return false; - } - var len = value.length; - return len <= max && len >= min; -} -/** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ -function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; -} -/** - * 自定义属性值校验 - * @param value - */ -function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; -} -/** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ -function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; -} -function errLog(key, value, code) { - errorLog({ - key: key, - code: code, - value: value - }, true); -} -/** - * 初始化布尔类型参数校验 - * @param value - * @param key - * @returns - */ -function booleanCheck(value, key) { - var res = isBoolean(value); - if (!res) { - errLog(key, value, 60003); - } - return res; -} -function functionCheck(value, key) { - var res = isFunction(value); - if (!res) { - errLog(key, value, 60004); - } - return res; -} -function numberCheck(value, key) { - var res = isNumber(value); - if (!res) { - errLog(key, value, 60002); - } - return res; -} -function stringCheck(value, key) { - var res = isString(value); - if (!res) { - errLog(key, value, 60001); - } - return res; -} -function objectCheck(value, key) { - var res = isObject(value); - if (!res) { - errLog(key, value, 600016); - } - return res; -} -/** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ -function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; -} -function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; -} -/** - * 判断当前元素是否为可触控元素 - */ -function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; -} - -//base64加密 解密 -/* //1.加密 -let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - -//2.解密 -let result2 = Base.decode(result); //--> '125中文' -*/ -var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -//public method for encoding -var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; -}; -// public method for decoding -var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; -}; -// private method for UTF-8 encoding -var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; -}; -// private method for UTF-8 decoding -var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; -}; -//# sourceMappingURL=index.js.map - -var document$1 = window.document; -/** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ -function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } -} -//# sourceMappingURL=index.js.map - -function replaceKey(str) { - return str.replace('ANSAPPID', 'ARKAPPID').replace('ANS$DEBUG', 'ARKDEBUG').replace('ANSUPLOADURL', 'ARKUPLOADURL'); -} -var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(replaceKey(decode(data))) : null; - } catch (e) {} -}; -var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} -}; -var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; -}; -var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); -}; -//# sourceMappingURL=index.js.map - -/** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ -function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; -} -//# sourceMappingURL=isSpider.js.map - -function getUrlDomain(url) { - if (url) { - return url.split('?')[0]; - } - return ''; -} -// 单页面模式下监听路径变化 -function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); -} -var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); -}; -//# sourceMappingURL=index.js.map - -var dataBase = 'ANALYSYS_AGENT'; -var tableName = 'FZ_STORAGE'; -var IndexedDb = /** @class */function () { - function IndexedDb() { - this.isOpen = false; - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - _this.isOpen = true; - }; - request.onerror = function (event) { - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - IndexedDb.prototype.getObjectStore = function () { - return this.db.transaction(tableName, 'readwrite').objectStore(tableName); - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.getObjectStore().add(data); - request.onsuccess = function (event) { - successFn && successFn(event); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 删除数据 - IndexedDb.prototype.delete = function () { - var request = this.getObjectStore().delete(1); - request.onsuccess = function (event) {}; - }; - // 更新数据 - IndexedDb.prototype.put = function (data, successFn, errorFn) { - var request = this.getObjectStore().put(data); - request.onsuccess = function (event) { - successFn && successFn(); - }; - request.onerror = function (event) { - errorFn && errorFn(); - }; - }; - return IndexedDb; -}(); -//# sourceMappingURL=index.js.map - -var domainUrl = getDomainFromUrl(true); -var cookieKey = domainUrl ? storageKey + "." + domainUrl : ''; -var storeDb = new IndexedDb(); -var dBhasData = false; -function getStorage(fn) { - var cookieStore = function () { - return cookieKey ? getCookie(cookieKey) : null; - }; - var store = getLocalStorage() || cookieStore() || null; - if (!globalWindow.indexedDB) { - config.crossSubdomain ? fn(cookieStore() || getLocalStorage() || null) : fn(store); - } else { - var get = function () { - storeDb.get(function (res) { - dBhasData = !!res; - var content = res ? res.content : store; - config.crossSubdomain ? fn(cookieStore() || content) : fn(content); - }); - }; - storeDb.isOpen ? get() : storeDb.onConnectSuccess = get; - } -} -function setStorage() { - var data = getCore(); - if (config.crossSubdomain && cookieKey) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - if (globalWindow.indexedDB) { - if (!dBhasData) { - storeDb.add({ - id: 1, - content: data - }); - } else { - storeDb.put({ - id: 1, - content: data - }); - } - } else { - setLocalStorage(storageKey, data); - } -} -// 清空历史cookie,根据场景只保留一个 -function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } - // 如果indexedDb打开成功 删掉Storage - if (storeDb.isOpen) { - globalWindow.localStorage.removeItem(storageKey); - } -} -//# sourceMappingURL=index.js.map - -/* -md5.js -*/ -function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); -} -//# sourceMappingURL=index.js.map - -function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; -} -function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; -} -//# sourceMappingURL=index.js.map - -// 启动时间 -var startUpTime; -// 初始化时获取启动时间 -function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; -} -// 设置启动时间 -function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); -} -// 清空时间 -function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); -} -//# sourceMappingURL=startUpTime.js.map - -/** - * 对象浅拷贝 - * - */ -function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; -} -//# sourceMappingURL=index.js.map - -/** - * 路径相关参数信息存储 - */ -var pathParams = { - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '' -}; -function setPathParams() { - var url = new URL(decodeURI(window.location.href)); - var searchParams = url.searchParams; - pathParams.utm_campaign_id = searchParams.get('campaign_id') || ''; - pathParams.utm_campaign = searchParams.get('utm_campaign') || ''; - pathParams.utm_content = searchParams.get('utm_content') || ''; - pathParams.utm_medium = searchParams.get('utm_medium') || ''; - pathParams.utm_source = searchParams.get('utm_source') || ''; - pathParams.utm_term = searchParams.get('utm_term') || ''; -} -//# sourceMappingURL=pathParams.js.map - -/** - * 返回核心数据默认值 - * @returns object - */ -function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; -} -var core; -/** - * 初始化 - */ -function coreInit(fn) { - setPathParams(); - initStartUpTime(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - getStorage(function (data) { - if (data) { - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - var debug = data.ARKDEBUG; - // data.ARKUPLOADURL !== config.uploadURL - if (config.appkey !== data.ARKAPPID || debug === 1 && debug !== config.debugMode) { - setDefCore(); - } else { - core = data; - } - } else { - setDefCore(); - } - fn && fn(); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); - }); -} -function getCore() { - return core; -} -// 重置缓存数据 -function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); -} -/** - * 设置参数 - */ -function setCoreParam(key, value) { - core[key] = value; - setStorage(); -} -/** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ -function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; -} -/** - * 系统设置匿名id - * @returns - */ -function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); -} -/** - * 获取sessionId - */ -function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var getGmt = function (time) { - return new Date(time + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - }; - var sessionDate = core.SEESIONDATE; - if (!core.SEESIONID || !sessionDate || nowDate - sessionDate > 30 * 60 * 1000 || getGmt(nowDate) !== getGmt(sessionDate)) { - setSessionId(); - } - return core.SEESIONID; -} -/** - * 设置sessionid - */ -function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); -} -/** - * 用户手动设置匿名id - * @param xwho - */ -function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); -} -/** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ -function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; -} -// 通用属性 -/** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ -function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return __assign({}, core.ARKSUPER); -} -/** - * 设置通用属性 - * @param property 属性 - */ -function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); -} -/** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ -function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); -} -// 添加上报数据 -function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } -} -// 删除上报数据 -function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); -} -// 获取上报数据 -function getPostData() { - return __spreadArrays(core.POSTDATA); -} -//# sourceMappingURL=core.js.map - -// 类型转换 -/** - * 值转换成字符串 - */ -function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; -} -/** - * json转换为串行字符串 - * @param value - */ -function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); -} -/** - * headers字符串转json - */ -function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; -} -//# sourceMappingURL=transform.js.map - -function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); -} -//# sourceMappingURL=ajax.js.map - -/** - * 服务器时间,开始时间校准时用到 - */ -// 服务器时间 -var serverTime = 0; -// 是否已获取过服务器时间 -var isGetServerTime = false; -// 服务器时间与本地时间的差值 -var timeDiff = 0; -/** - * 返回校准后的当前时间 - * - */ -function getNow() { - var now = +new Date(); - return now + timeDiff; -} -// 获取服务器时间 -function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function () { - isGetServerTime = true; - fn && fn(serverTime); - }); -} -//# sourceMappingURL=time.js.map - -// 缓存sdk异步加载完成前的函数调用 -var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; -var callbackArr = []; -// 执行缓存函数 -function implementAallbackArr() { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } -} -// sdk初始化前钩子是否执行完成 -var beforeInitReady = false; -var implementBeforeInit = function (fn) { - function next() { - if (!beforeInitReady) { - beforeInitReady = true; - fn(); - } - } - var beforeInit = config.beforeInit; - if (beforeInit) { - var f = beforeInit.call(globalWindow.AnalysysAgent, __assign({}, config), next); - if (f instanceof Promise || f && isFunction(f.then)) { - f.then(function () { - next(); - }); - } - } else { - next(); - } -}; -// sdk是否准备就绪 -var isReady = function () { - return isGetServerTime && isInitConfig && beforeInitReady; -}; -function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isReady()) { - var obj = { - fn: callback, - arg: args, - xwhen: getNow() - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - return callback.apply(callback, args); - } - }; -} -//# sourceMappingURL=index.js.map - -var isHybrid = false; -// hybrid模式下缓存获取类方法用户回调函数 -var nativeCallbackFn = {}; -/** - * 初始化webViewHybrid模式 - */ -function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - } - // let info = AnalysysAgentHybrid.getAppStartInfo - // if (info && isFunction(info)) { - // let webViewHybridData = info() - // console.log('Hybrid模式注入参数', webViewHybridData) - // if (isString(webViewHybridData)) { - // webViewHybridData = JSON.parse(webViewHybridData) - // } - // hybrid.userId = webViewHybridData.userId - // } - } -} -//# sourceMappingURL=hybrid.js.map - -var eventMap = { - '$startup': 'startUp', - '$pageview': 'pageView', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' -}; -// hybrid模式下上报事件 -function callNative(functionName, functionParams, isCallback) { - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: functionParams - }; - // 是否需要native回调js - if (isCallback) { - obj['callbackFunName'] = 'nativeCallback'; - } - // ios - if (globalWindow.webkit && globalWindow.webkit.messageHandlers && globalWindow.webkit.messageHandlers.AnalysysAgent && globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage) { - globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage(obj); - } - // 安卓 - if (globalWindow.AnalysysAgentHybrid && globalWindow.AnalysysAgentHybrid.analysysHybridCallNative) { - globalWindow.AnalysysAgentHybrid.analysysHybridCallNative(JSON.stringify(obj)); - } -} -// hybrid模式下回调类方法 -function callNativeCallback(functionName, functionParams, fn) { - if (fn) { - nativeCallbackFn[functionName] ? nativeCallbackFn[functionName].push(fn) : nativeCallbackFn[functionName] = [fn]; - } - callNative(functionName, functionParams ? [functionParams] : [], true); -} -// 实时同步h5的url给原生端 -function setHybirdWebUrl() { - if (isHybrid) { - callNative('getHybirdWebURL', [{ - url: document.location.href - }]); - } -} -//# sourceMappingURL=hybrid.js.map - -function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } -} -/** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ -function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } -} -/** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ -function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); -} -/** - * 获取单个通用属性 - */ -function getSuperProperty$1(superPropertyName, fn) { - if (isHybrid) { - callNativeCallback('getSuperProperty', superPropertyName, fn); - } else { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; - } -} -/** - * 获取所有通用属性 - */ -function getSuperProperties(fn) { - if (isHybrid) { - callNativeCallback('getSuperProperties', null, fn); - } else { - var value = getSuperProperty(); - fn && fn(value); - return value; - } -} -/** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ -function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); -} -/** - * 删除所有属性 - */ -function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); -} -//# sourceMappingURL=superProperty.js.map - -function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; -} -function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - var uploadURL = config.uploadURL[config.uploadURL.length - 1] !== '/' ? config.uploadURL : config.uploadURL.substring(0, config.uploadURL.length - 1); - validurl = validurl.replace(uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; -} -//# sourceMappingURL=image.js.map - -var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - }, - // 记录事件开始时间 - timeEvent: {} -}; -// 执行事件上报回调函数 -function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } -} -//# sourceMappingURL=eventAttribute.js.map - -function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); -} -//# sourceMappingURL=beacon.js.map - -// 一次最多上报20条 -var MAXLINENUM = 20; -// 上报失败后重试次数 -var RETRNUM = 3; -// 正在上报数据 -var doingList = []; -// 当前重试次数 -var retryCount = 0; -// 发送请求 -function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysModule && isFunction(globalWindow.AnalysysModule.uploadData)) { - // option = globalWindow.AnalysysModule.uploadData(option); - // } - if (globalWindow.AnalysysModal && typeof globalWindow.AnalysysModal === 'function') { - globalWindow.AnalysysModal(option.data); - } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - // 数据上报成功之后执行 - emit('successSend', o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); -} -/** - * img方式上报 - * @param data - */ -function imgGetData(data) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - // 数据上报成功之后执行 - emit('successSend', data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); -} -/** - * 上报数据 - * @param data object - * @param fn 上报成功后回调函数 - * @param isTrack 是否是自定义事件 - */ -function sendData(data, fn, isTrack) { - var xwhat = data.xwhat; - // Hybrid模式下由原生端上报 - if (isHybrid && ['$web_click', '$webstay', '$user_click'].indexOf(xwhat) === -1) { - // hybrid模式下删除这些属性,由原生上报 - var arr = ['$is_first_day', '$session_id', '$is_time_calibrated', '$startup_time', '$lib', '$lib_version', '$platform', '$debug', '$is_login']; - arr.forEach(function (o) { - delete data.xcontext[o]; - }); - var functionParams = [data.xcontext]; - if (xwhat === '$pageview') { - functionParams.unshift(data.xcontext.$title || ''); - } - if (isTrack) { - functionParams.unshift(xwhat); - } - callNative(isTrack ? 'track' : xwhat, functionParams); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 上报之前执行 - emit('afterSend', __assign(__assign({}, data), { xcontext: __assign({}, data.xcontext) })); - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - successLog({ - key: option.url, - value: option.data, - code: 20012 - }); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } -} -//# sourceMappingURL=index.js.map - -/** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ -function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } -} -/** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ -function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } -} -function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; -} -function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; -} -// 获取元素内容 -function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); -} -// 获取元素路径 -function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); -} -function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; -} -/** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ -function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; -} -//# sourceMappingURL=element.js.map - -/** - * 全埋点相关属性存储 - */ -var userClickAttrs = {}; -var webClickAttrs = {}; -function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); -} -function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; -} -//# sourceMappingURL=clickElement.js.map - -// 获取设备类型 -function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; -} -// 动态加载js -function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } -} -//# sourceMappingURL=index.js.map - -/** - * 获取属性值 - */ -var getAttr = { - xwho: function () { - return getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return (navigator.language || navigator.browserLanguage).toLowerCase(); - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $referrer_domain: function () { - return getUrlDomain(eventAttribute.pageview.prevPath); - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - // 页面URL-去参的页面URL - $url_path: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } -}; -//# sourceMappingURL=getAttr.js.map - -function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; -} -//# sourceMappingURL=index.js.map - -/** - * 页面属性 - */ -var pageProperty = {}; -/** - * 设置页面属性 - * @param properties - */ -function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); -} -/** - * 获取页面属性 - * @returns - */ -function getPageProperty() { - return pageProperty; -} -/** - * 删除页面属性 - */ -function delPageProperty() { - pageProperty = {}; -} -//# sourceMappingURL=pageProperty.js.map - -function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), userObj); - // 执行beforePageView钩子,返回false则停止上报 - var beforePageView = config.beforePageView; - if (beforePageView) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, '$pageview'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageView.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - // 缓存当前pv上报的title - eventAttribute.pageview['$title'] = res.xcontext['$title']; - sendData(res, fn); - return res; -} -//# sourceMappingURL=pageView.js.map - -function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - var pageCloseAttr = eventAttribute.pageClose; - var hideTime = pageCloseAttr.hideTime; - return !pageCloseAttr.hideStartTime ? hideTime : hideTime + (res.xwhen - pageCloseAttr.hideStartTime); - } - // 获取访问时长,排除小于0情况 - var pagestaytime = res.xwhen - eventAttribute.pageview.xwhen - getHideTime(); - var attrs = { - pagestaytime: pagestaytime > 0 ? pagestaytime : res.xwhen - eventAttribute.pageview.xwhen - }; - // 填充当前pv上报的title - var title = eventAttribute.pageview['$title']; - if (title) { - attrs['$title'] = title; - } - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; - // 执行beforePageClose钩子,返回false则停止上报 - var beforePageClose = config.beforePageClose; - if (beforePageClose) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, 'page_close'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageClose.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res); -} -// 触发pageclose -function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; -} -// 设置页面隐藏时间 -if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); -} -function setPageHideTime() { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } -} -//# sourceMappingURL=pageclose.js.map - -function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); -} -/** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ -function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); -} -/** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ -function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); -} -/** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ -function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); -} -/** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ -function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); -} -/** - * 删除当前用户单个属性值 - * @param propertyName - */ -function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); -} -/** - * 删除当前用户所有属性值 - */ -function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); -} -//# sourceMappingURL=profile.js.map - -function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } -} -//# sourceMappingURL=startUp.js.map - -function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - if (aliasId === getId()) { - successLog({ - code: 20014 - }); - fn && isFunction(fn) && fn(); - return; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } -} -//# sourceMappingURL=alias.js.map - -function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); -} -//# sourceMappingURL=userClick.js.map - -function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); -} -//# sourceMappingURL=webClick.js.map - -function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); -} -//# sourceMappingURL=webstay.js.map - -function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); -} -//# sourceMappingURL=reset.js.map - -/** -* 获取预置属性 -* @returns object -*/ -function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; -} -//# sourceMappingURL=presetProperties.js.map - -function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData('track'); - var trackAttrs = eventAttrs && !isFunction(eventAttrs) ? attrCheck(eventAttrs, eventName) : {}; - // 增加使用时长属性 - if (eventAttribute.timeEvent[eventName]) { - trackAttrs['$duration'] = getNow() - eventAttribute.timeEvent[eventName]; - delete eventAttribute[eventName]; - } - res.xwhat = eventName; - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - // 执行beforeTrack钩子,返回false则停止上报 - var beforeTrack = config.beforeTrack; - if (beforeTrack) { - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, eventName); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - if (beforeTrack.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res, callback, true); - return res; -} -//# sourceMappingURL=track.js.map - -/** - * 记录自定义事件的持续时长 - * @param eventName 事件名称 - */ -function timeEvent(eventName) { - eventAttribute.timeEvent[eventName] = getNow(); -} -//# sourceMappingURL=timeEvent.js.map - -/** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ -function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } -} -/** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ -function getDistinctId(fn) { - if (isHybrid) { - callNativeCallback('getDistinctId', null, fn); - } else { - var id = getAnonymousID(); - fn && fn(id); - return id; - } -} -//# sourceMappingURL=identify.js.map - -/** - * 注册页面自动采集自定义属性 - */ -function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } -} -//# sourceMappingURL=pageProperty.js.map - -// native回调方法 -function nativeCallback(name, params) { - var nativeCallbackNam = nativeCallbackFn[name]; - if (nativeCallbackNam) { - nativeCallbackNam.forEach(function (o) { - o(params); - }); - nativeCallbackFn[name] = []; - } -} -//# sourceMappingURL=nativeCallback.js.map - -var eventMap$1 = { - // before - //afterInit: [], //初始化完成之后,可以获取到sdk实例 - // afterSend: [], //数据上报之前执行,post上报类型时在加入数据缓存队列之前执行 - // beforeSend: [], //数据上报之后 - // successSend: [] //数据上报成功之后 - //errorSend: [] //数据上报失败之后 -}; -function on(eventName, fn) { - eventMap$1[eventName] ? eventMap$1[eventName].push(fn) : eventMap$1[eventName] = [fn]; -} -function emit(eventName) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (eventMap$1[eventName]) { - eventMap$1[eventName].forEach(function (o) { - o.apply(void 0, args); - }); - } -} -//# sourceMappingURL=hooks.js.map - -// 获取dom元素标签名称 -function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; -} -// 返回dom元素父节点 -function getParentNode(el) { - return el.parentNode; -} -// 获取所有兄弟节点(包括自己) -function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; -} -// 获取元素在同级中的下标 -function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; -} -// 遍历节点树 -function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } -} -//# sourceMappingURL=elements.js.map - -var visualMap = null; -var href = globalWindow.location.href; -// 上报可视化数据 -function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } -} -// 获取可视化埋点数据 -function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - printLog('Get Visual Event List from app'); - printLog(JSON.stringify(list, null, 2)); - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } -} -// 动态加载可视化交互文件 -function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } -} -//# sourceMappingURL=visual.js.map - -var scrollTime = null; -// 是否自动采集pv -function triggerPageView() { - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // hybrid模式下实时同步当前url给原生端 - setHybirdWebUrl(); - // 获取可视化数据 - getVisualList(); -} -/** - * sdk自动触发器 - */ -function autoTrigger() { - if (!isHybrid && config.autoStartUp) { - startUp(); - } - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageClose(); - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - document.addEventListener('click', webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 记录页面隐藏时间 - setPageHideTime(); -} -//# sourceMappingURL=index.js.map - -function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } -} -var configRule = { - appkey: { - ck: [stringCheck] - }, - uploadURL: { - ck: [stringCheck] - }, - debugMode: { - ck: [numberCheck] - }, - name: { - ck: [stringCheck] - }, - // 是否自动上报startup事件 - autoStartUp: { - ck: [booleanCheck] - }, - // 是否自动上报页面浏览 - auto: { - ck: [booleanCheck] - }, - autoProfile: { - ck: [booleanCheck] - }, - encryptType: { - ck: [numberCheck] - }, - hash: { - ck: [booleanCheck] - }, - allowTimeCheck: { - ck: [booleanCheck] - }, - maxDiffTimeInterval: { - ck: [numberCheck, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - // 是否自动上报全埋点事件 - autoTrack: { - ck: [booleanCheck] - }, - trackList: { - ck: [nameListCheck] - }, - autoCompleteURL: { - ck: [booleanCheck] - }, - autoPageViewDuration: { - ck: [booleanCheck] - }, - sendDataTimeout: { - ck: [numberCheck] - }, - sendType: { - ck: [stringCheck] - }, - autoClickBlackList: { - ck: [nameListCheck] - }, - autoHeatmap: { - ck: [booleanCheck] - }, - SDKFileDirectory: { - ck: [stringCheck] - }, - visitorConfigURL: { - ck: [stringCheck] - }, - crossSubdomain: { - ck: [booleanCheck] - }, - pageProperty: { - ck: [objectCheck] - }, - pageViewBlackList: { - ck: [nameListCheck] - }, - userClickProperty: { - ck: [objectCheck] - }, - exposure: { - ck: [objectCheck] - }, - // track上报之前执行该函数,返回false则停止上报 - beforeTrack: { - ck: [functionCheck] - }, - // pageView上报之前执行该函数,返回false则停止上报 - beforePageView: { - ck: [functionCheck] - }, - // PageClose上报之前执行该函数,返回false则停止上报 - beforePageClose: { - ck: [functionCheck] - }, - // 通知sdk客户端程序已经准备好了 - beforeInit: { - ck: [functionCheck] - } -}; -var config = optionsDefault(); -// 是否完成初始化参数配置 -var isInitConfig = false; -function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.ck.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.ck.length; i++) { - var fn_1 = rule.ck[i]; - if (!fn_1(value, o)) { - isOk = false; - break; - } - } - if (isOk) { - if (o === 'uploadURL' || o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - if (o === 'pageProperty' && value) { - setPageProperty(value); - } - config[o] = value; - } - } - }); - // 动态加载可视化交互文件 - loadVisual(); - function procedure() { - if (isReady()) { - successLog({ - code: 20007 - }); - // 执行初始化完成之前缓存的上报 - implementAallbackArr(); - // 自动触发生命周期相关钩子 - autoTrigger(); - // 之心生命周期事件监听 - emit('afterInit', __assign({}, config)); - fn && fn(config); - } - } - // 客户端程序是否准备就绪 - implementBeforeInit(procedure); - // 日期校准成功 - getServerTime(procedure); - // 核心内容准备就绪 - coreInit(function () { - isInitConfig = true; - procedure(); - }); -} -//# sourceMappingURL=config.js.map - -webViewHybridInit(); -var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.isHybrid = isHybrid; - this.config = config; - this.appStart = ready(startUp); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = ready(getSuperProperties); - this.unRegisterSuperProperty = ready(unRegisterSuperProperty); - this.clearSuperProperties = ready(clearSuperProperties); - this.profileSetOnce = ready(profileSetOnce); - this.profileSet = ready(profileSet); - this.profileAppend = ready(profileAppend); - this.profileIncrement = ready(profileIncrement); - this.profileDelete = ready(profileDelete); - this.profileUnset = ready(profileUnset); - this.reset = ready(reset); - this.track = ready(track); - this.timeEvent = timeEvent; - this.alias = ready(alias); - this.getPresetProperties = ready(getPresetProperties); - this.identify = ready(identify); - this.getDistinctId = ready(getDistinctId); - this.pageProperty = ready(pageProperty$1); - this.nativeCallback = nativeCallback; - this.on = on; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - if (!config.appkey) throw errorMessage['60006']; - if (!config.uploadURL) throw errorMessage['60007']; - setConfig(config, function (o) { - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; -}(); -var ArkSdk = new ArkJsSdk(); -globalWindow.AnalysysAgent = ArkSdk; -//# sourceMappingURL=index.js.map - -export default ArkSdk; diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js deleted file mode 100644 index 84654be..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK.min.js +++ /dev/null @@ -1,3475 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof arkDefine === 'function' && arkDefine.amd ? arkDefine(factory) : - (global = global || self, global.AnalysysAgent = factory()); -}(this, (function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - } - - var $lib = 'JS'; - var $lib_version = '5.0.4'; - var $ans = 'JS'; - var storageKey = 'FZ_STROAGE'; - var globalWindow = window; - // sdk配置参数默认值 - function optionsDefault() { - return { - appkey: '', - uploadURL: '', - debugMode: 0, - visitorConfigURL: '', - name: '', - autoStartUp: true, - auto: true, - SDKFileDirectory: '', - autoTrack: false, - autoClickBlackList: '', - userClickProperty: {}, - trackList: [], - autoHeatmap: false, - autoWebstay: true, - webstayDuration: 18000000, - autoProfile: true, - hash: true, - encryptType: 0, - allowTimeCheck: false, - maxDiffTimeInterval: 30, - autoPageViewDuration: false, - sendDataTimeout: 10000, - getDataTimeout: 10000, - sendType: 'img', - crossSubdomain: false - }; - } - //# sourceMappingURL=index.js.map - - var typeMap = {}; - var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; - typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); - }); - function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; - } - function isNumber(value) { - return type(value) === 'number'; - } - function isString(value) { - return type(value) === 'string'; - } - function isArray(value) { - return Array.isArray(value); - } - function isBoolean(value) { - return type(value) === 'boolean'; - } - function isObject(value) { - return type(value) === 'object'; - } - function isFunction(value) { - return type(value) === 'function'; - } - //# sourceMappingURL=index.js.map - - var firstVisitTime = '$first_visit_time'; - // 只读属性,无法被更改 - var readOnlyAttrs = ['$lib', '$lib_version', '$platform', firstVisitTime, '$debug', '$is_login']; - // 公共预制属性,任何事件上报都会带上这些属性 - var publicAttrs = ['$lib', '$lib_version', '$platform', '$is_login', '$debug']; - // 通用属性,行为事件都会上报 - var commonAttrs = ['$screen_width', '$screen_height', '$language', '$time_zone', '$session_id', '$is_time_calibrated', '$web_crawler', '$user_agent', '$title', '$url', '$is_first_day', - // utm相关属性 - '$utm_campaign_id', '$utm_campaign', '$utm_medium', '$utm_source', '$utm_content', '$utm_term']; - // element相关属性 - var elementAttrs = ['$element_type', '$element_path', '$element_content', '$element_id', '$element_name', '$element_target_url', '$element_class_name', '$device_type', '$url_path']; - // 预制事件列表与事件属性 - var events = { - $startup: __spreadArrays(commonAttrs, ['$is_first_time' //首次访问,只在startUp - ]), - $end: __spreadArrays(commonAttrs, ['$duration' //使用时长 - ]), - $pageview: __spreadArrays(commonAttrs, ['$url_domain', '$referrer', '$referrer_domain', '$startup_time' // 此行下面5个只在 pageView 中有 - ]), - page_close: __spreadArrays(commonAttrs, ['$referrer', 'pagestaytime']), - $user_click: __spreadArrays(elementAttrs, commonAttrs), - $web_click: __spreadArrays(commonAttrs, elementAttrs, ['$page_width', '$page_height', '$click_x', '$click_y', '$element_x', '$element_y', '$element_clickable']), - $webstay: __spreadArrays(commonAttrs, ['$referrer', '$referrer_domain', '$viewport_width', '$viewport_position', '$viewport_height', '$event_duration', '$device_type']), - track: __spreadArrays(commonAttrs), - $profile_set_once: [firstVisitTime, '$first_visit_language'], - $alias: ['$original_id'], - $getPresetProperties: __spreadArrays(publicAttrs, commonAttrs, [firstVisitTime]) - }; - //# sourceMappingURL=eventAttrs.js.map - - function keyErr(type) { - return "{FN}:Property value invalid of key[{KEY}], support type: " + type + "\n\tcurrent value: {VALUE}\n\tcurrent type: {VALUETYPE}"; - } - var errorMessage = { - 'common': '', - '60001': keyErr('String'), - '60002': keyErr('Number'), - '60003': keyErr('Boolean'), - '60004': keyErr('Function'), - '60005': '{FN}:The length of the property[{KEY}] value (string[{VALUE}]) needs to be 1-255 !', - '60006': 'Please set appkey first.', - '60007': 'Please set uploadURL first.', - '60008': 'Send message failed.', - '60009': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-125 !', - '600010': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-99 !', - '600012': '{FN}:Property key invalid, nonsupport value: ' + readOnlyAttrs.join('/') + ' \n' + 'current KEY:{KEY}', - '600016': '{FN}: Property value invalid, support type: Object \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '600020': 'DebugMode only can be 0,1,2', - '600022': '{FN}: 属性[{KEY}]的值[{VALUE}]无效,支持类型:String/Number/Boolean/string[],若为字符串,长度范围1-255字符', - '600023': '{FN}: 属性key的名称[{KEY}]无效,属性key是以字母开头的字符串,由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;', - '600025': '{FN}: 事件名称[{VALUE}]无效,事件ID必须字母或者$开头,可包含数字字母与下划线,1-99个字符;' - }; - var successMessage = { - 'common': '', - '20001': 'Send message success', - '20002': '{FN}: set success ({VALUE})', - '20003': '{FN}:({VALUE}) delete success', - '20004': '{FN}:clear success', - '20005': '{FN}:reset success', - '20006': 'set appkey success. current appkey : {VALUE}', - '20007': 'Init Analysysdata ' + $lib + ' sdk success, version : ' + $lib_version + '', - '20008': 'set uploadURL success. current uploadURL : {VALUE}', - '20009': '{FN}:[{KEY}] : get failed', - '20010': '{FN}:[{KEY}] : get success. ({VALUE})', - '20011': '{FN}:({VALUE}) delete failed', - '20012': 'Send Message to Server: {KEY} \n' + 'data:{VALUE}', - '20013': "收到服务器的时间: {VALUE} \n" + "本地时间: {KEY} \n" + "时间相差: {FN} \n" + "数据将会进行时间校准", - '20014': 'aliasID already bound' - }; - function successLog(opt) { - if (config.debugMode === 1 || config.debugMode === 2) { - var msgTemp = successMessage[opt.code] || successMessage.common; - var showMsg = msgTemp.replace(/{FN}/, opt.fn).replace(/{KEY}/g, opt.key || '').replace(/{VALUE}/g, JSON.stringify(opt.value)); - console.log(showMsg); - } - } - function errorLog(opt, isInit) { - var msgTemp = errorMessage[opt.code] || errorMessage.common; - var showMsg = msgTemp.replace(/{FN}/g, opt.fn || '').replace(/{KEY}/g, JSON.stringify(opt.key || '')).replace(/{VALUE}/g, JSON.stringify(opt.value)).replace(/{VALUETYPE}/g, type(opt.value)).replace(/{KEYTYPE}/g, type(opt.key)); - if (config.debugMode === 1 || config.debugMode === 2 || isInit) { - console.warn(showMsg); - } - } - function printLog(msg) { - console.log(msg); - } - //# sourceMappingURL=index.js.map - - /** - * 长度校验 - * @param value - * @param max - * @param min - * @returns - */ - function lengthCheck(value, max, min) { - if (max === void 0) { - max = 255; - } - if (min === void 0) { - min = 1; - } - if (!isString(value)) { - return false; - } - var len = value.length; - return len <= max && len >= min; - } - /** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ - function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; - } - /** - * 自定义属性值校验 - * @param value - */ - function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; - } - /** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ - function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; - } - function errLog(key, value, code) { - errorLog({ - key: key, - code: code, - value: value - }, true); - } - /** - * 初始化布尔类型参数校验 - * @param value - * @param key - * @returns - */ - function booleanCheck(value, key) { - var res = isBoolean(value); - if (!res) { - errLog(key, value, 60003); - } - return res; - } - function functionCheck(value, key) { - var res = isFunction(value); - if (!res) { - errLog(key, value, 60004); - } - return res; - } - function numberCheck(value, key) { - var res = isNumber(value); - if (!res) { - errLog(key, value, 60002); - } - return res; - } - function stringCheck(value, key) { - var res = isString(value); - if (!res) { - errLog(key, value, 60001); - } - return res; - } - function objectCheck(value, key) { - var res = isObject(value); - if (!res) { - errLog(key, value, 600016); - } - return res; - } - /** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ - function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; - } - function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; - } - /** - * 判断当前元素是否为可触控元素 - */ - function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // public method for decoding - var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - // private method for UTF-8 decoding - var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - }; - //# sourceMappingURL=index.js.map - - var document$1 = window.document; - /** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ - function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } - } - //# sourceMappingURL=index.js.map - - function replaceKey(str) { - return str.replace('ANSAPPID', 'ARKAPPID').replace('ANS$DEBUG', 'ARKDEBUG').replace('ANSUPLOADURL', 'ARKUPLOADURL'); - } - var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(replaceKey(decode(data))) : null; - } catch (e) {} - }; - var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} - }; - var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; - }; - var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); - }; - //# sourceMappingURL=index.js.map - - /** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ - function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; - } - //# sourceMappingURL=isSpider.js.map - - function getUrlDomain(url) { - if (url) { - return url.split('?')[0]; - } - return ''; - } - // 单页面模式下监听路径变化 - function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); - } - var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); - }; - //# sourceMappingURL=index.js.map - - var dataBase = 'ANALYSYS_AGENT'; - var tableName = 'FZ_STORAGE'; - var IndexedDb = /** @class */function () { - function IndexedDb() { - this.isOpen = false; - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - _this.isOpen = true; - }; - request.onerror = function (event) { - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - IndexedDb.prototype.getObjectStore = function () { - return this.db.transaction(tableName, 'readwrite').objectStore(tableName); - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.getObjectStore().add(data); - request.onsuccess = function (event) { - successFn && successFn(event); - }; - request.onerror = function (event) { - errorFn && errorFn(event); - }; - }; - // 删除数据 - IndexedDb.prototype.delete = function () { - var request = this.getObjectStore().delete(1); - request.onsuccess = function (event) {}; - }; - // 更新数据 - IndexedDb.prototype.put = function (data, successFn, errorFn) { - var request = this.getObjectStore().put(data); - request.onsuccess = function (event) { - successFn && successFn(); - }; - request.onerror = function (event) { - errorFn && errorFn(); - }; - }; - return IndexedDb; - }(); - //# sourceMappingURL=index.js.map - - var domainUrl = getDomainFromUrl(true); - var cookieKey = domainUrl ? storageKey + "." + domainUrl : ''; - var storeDb = new IndexedDb(); - var dBhasData = false; - function getStorage(fn) { - var cookieStore = function () { - return cookieKey ? getCookie(cookieKey) : null; - }; - var store = getLocalStorage() || cookieStore() || null; - if (!globalWindow.indexedDB) { - config.crossSubdomain ? fn(cookieStore() || getLocalStorage() || null) : fn(store); - } else { - var get = function () { - storeDb.get(function (res) { - dBhasData = !!res; - var content = res ? res.content : store; - config.crossSubdomain ? fn(cookieStore() || content) : fn(content); - }); - }; - storeDb.isOpen ? get() : storeDb.onConnectSuccess = get; - } - } - function setStorage() { - var data = getCore(); - if (config.crossSubdomain && cookieKey) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - if (globalWindow.indexedDB) { - if (!dBhasData) { - storeDb.add({ - id: 1, - content: data - }); - } else { - storeDb.put({ - id: 1, - content: data - }); - } - } else { - setLocalStorage(storageKey, data); - } - } - // 清空历史cookie,根据场景只保留一个 - function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } - // 如果indexedDb打开成功 删掉Storage - if (storeDb.isOpen) { - globalWindow.localStorage.removeItem(storageKey); - } - } - //# sourceMappingURL=index.js.map - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - //# sourceMappingURL=index.js.map - - function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; - } - function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; - } - //# sourceMappingURL=index.js.map - - // 启动时间 - var startUpTime; - // 初始化时获取启动时间 - function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; - } - // 设置启动时间 - function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); - } - // 清空时间 - function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); - } - //# sourceMappingURL=startUpTime.js.map - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - //# sourceMappingURL=index.js.map - - /** - * 路径相关参数信息存储 - */ - var pathParams = { - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '' - }; - function setPathParams() { - var url = new URL(decodeURI(window.location.href)); - var searchParams = url.searchParams; - pathParams.utm_campaign_id = searchParams.get('campaign_id') || ''; - pathParams.utm_campaign = searchParams.get('utm_campaign') || ''; - pathParams.utm_content = searchParams.get('utm_content') || ''; - pathParams.utm_medium = searchParams.get('utm_medium') || ''; - pathParams.utm_source = searchParams.get('utm_source') || ''; - pathParams.utm_term = searchParams.get('utm_term') || ''; - } - //# sourceMappingURL=pathParams.js.map - - /** - * 返回核心数据默认值 - * @returns object - */ - function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; - } - var core; - /** - * 初始化 - */ - function coreInit(fn) { - setPathParams(); - initStartUpTime(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - getStorage(function (data) { - if (data) { - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - var debug = data.ARKDEBUG; - // data.ARKUPLOADURL !== config.uploadURL - if (config.appkey !== data.ARKAPPID || debug === 1 && debug !== config.debugMode) { - setDefCore(); - } else { - core = data; - } - } else { - setDefCore(); - } - fn && fn(); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); - }); - } - function getCore() { - return core; - } - // 重置缓存数据 - function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); - } - /** - * 设置参数 - */ - function setCoreParam(key, value) { - core[key] = value; - setStorage(); - } - /** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ - function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; - } - /** - * 系统设置匿名id - * @returns - */ - function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); - } - /** - * 获取sessionId - */ - function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var getGmt = function (time) { - return new Date(time + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - }; - var sessionDate = core.SEESIONDATE; - if (!core.SEESIONID || !sessionDate || nowDate - sessionDate > 30 * 60 * 1000 || getGmt(nowDate) !== getGmt(sessionDate)) { - setSessionId(); - } - return core.SEESIONID; - } - /** - * 设置sessionid - */ - function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); - } - /** - * 用户手动设置匿名id - * @param xwho - */ - function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ - function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; - } - // 通用属性 - /** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ - function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return __assign({}, core.ARKSUPER); - } - /** - * 设置通用属性 - * @param property 属性 - */ - function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); - } - /** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ - function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); - } - // 添加上报数据 - function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } - } - // 删除上报数据 - function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); - } - // 获取上报数据 - function getPostData() { - return __spreadArrays(core.POSTDATA); - } - //# sourceMappingURL=core.js.map - - // 类型转换 - /** - * 值转换成字符串 - */ - function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; - } - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - //# sourceMappingURL=transform.js.map - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - //# sourceMappingURL=ajax.js.map - - /** - * 服务器时间,开始时间校准时用到 - */ - // 服务器时间 - var serverTime = 0; - // 是否已获取过服务器时间 - var isGetServerTime = false; - // 服务器时间与本地时间的差值 - var timeDiff = 0; - /** - * 返回校准后的当前时间 - * - */ - function getNow() { - var now = +new Date(); - return now + timeDiff; - } - // 获取服务器时间 - function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function () { - isGetServerTime = true; - fn && fn(serverTime); - }); - } - //# sourceMappingURL=time.js.map - - // 缓存sdk异步加载完成前的函数调用 - var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; - var callbackArr = []; - // 执行缓存函数 - function implementAallbackArr() { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } - } - // sdk初始化前钩子是否执行完成 - var beforeInitReady = false; - var implementBeforeInit = function (fn) { - function next() { - if (!beforeInitReady) { - beforeInitReady = true; - fn(); - } - } - var beforeInit = config.beforeInit; - if (beforeInit) { - var f = beforeInit.call(globalWindow.AnalysysAgent, __assign({}, config), next); - if (f instanceof Promise || f && isFunction(f.then)) { - f.then(function () { - next(); - }); - } - } else { - next(); - } - }; - // sdk是否准备就绪 - var isReady = function () { - return isGetServerTime && isInitConfig && beforeInitReady; - }; - function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isReady()) { - var obj = { - fn: callback, - arg: args, - xwhen: getNow() - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - return callback.apply(callback, args); - } - }; - } - //# sourceMappingURL=index.js.map - - var isHybrid = false; - // hybrid模式下缓存获取类方法用户回调函数 - var nativeCallbackFn = {}; - /** - * 初始化webViewHybrid模式 - */ - function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - } - // let info = AnalysysAgentHybrid.getAppStartInfo - // if (info && isFunction(info)) { - // let webViewHybridData = info() - // console.log('Hybrid模式注入参数', webViewHybridData) - // if (isString(webViewHybridData)) { - // webViewHybridData = JSON.parse(webViewHybridData) - // } - // hybrid.userId = webViewHybridData.userId - // } - } - } - //# sourceMappingURL=hybrid.js.map - - var eventMap = { - '$startup': 'startUp', - '$pageview': 'pageView', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' - }; - // hybrid模式下上报事件 - function callNative(functionName, functionParams, isCallback) { - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: functionParams - }; - // 是否需要native回调js - if (isCallback) { - obj['callbackFunName'] = 'nativeCallback'; - } - // ios - if (globalWindow.webkit && globalWindow.webkit.messageHandlers && globalWindow.webkit.messageHandlers.AnalysysAgent && globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage) { - globalWindow.webkit.messageHandlers.AnalysysAgent.postMessage(obj); - } - // 安卓 - if (globalWindow.AnalysysAgentHybrid && globalWindow.AnalysysAgentHybrid.analysysHybridCallNative) { - globalWindow.AnalysysAgentHybrid.analysysHybridCallNative(JSON.stringify(obj)); - } - } - // hybrid模式下回调类方法 - function callNativeCallback(functionName, functionParams, fn) { - if (fn) { - nativeCallbackFn[functionName] ? nativeCallbackFn[functionName].push(fn) : nativeCallbackFn[functionName] = [fn]; - } - callNative(functionName, functionParams ? [functionParams] : [], true); - } - // 实时同步h5的url给原生端 - function setHybirdWebUrl() { - if (isHybrid) { - callNative('getHybirdWebURL', [{ - url: document.location.href - }]); - } - } - //# sourceMappingURL=hybrid.js.map - - function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } - } - /** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ - function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } - } - /** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ - function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); - } - /** - * 获取单个通用属性 - */ - function getSuperProperty$1(superPropertyName, fn) { - if (isHybrid) { - callNativeCallback('getSuperProperty', superPropertyName, fn); - } else { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; - } - } - /** - * 获取所有通用属性 - */ - function getSuperProperties(fn) { - if (isHybrid) { - callNativeCallback('getSuperProperties', null, fn); - } else { - var value = getSuperProperty(); - fn && fn(value); - return value; - } - } - /** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ - function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); - } - /** - * 删除所有属性 - */ - function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); - } - //# sourceMappingURL=superProperty.js.map - - function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; - } - function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - var uploadURL = config.uploadURL[config.uploadURL.length - 1] !== '/' ? config.uploadURL : config.uploadURL.substring(0, config.uploadURL.length - 1); - validurl = validurl.replace(uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; - } - //# sourceMappingURL=image.js.map - - var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - }, - // 记录事件开始时间 - timeEvent: {} - }; - // 执行事件上报回调函数 - function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } - } - //# sourceMappingURL=eventAttribute.js.map - - function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); - } - //# sourceMappingURL=beacon.js.map - - // 一次最多上报20条 - var MAXLINENUM = 20; - // 上报失败后重试次数 - var RETRNUM = 3; - // 正在上报数据 - var doingList = []; - // 当前重试次数 - var retryCount = 0; - // 发送请求 - function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysModule && isFunction(globalWindow.AnalysysModule.uploadData)) { - // option = globalWindow.AnalysysModule.uploadData(option); - // } - if (globalWindow.AnalysysModal && typeof globalWindow.AnalysysModal === 'function') { - globalWindow.AnalysysModal(option.data); - } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - // 数据上报成功之后执行 - emit('successSend', o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); - } - /** - * img方式上报 - * @param data - */ - function imgGetData(data) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - // 数据上报成功之后执行 - emit('successSend', data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); - } - /** - * 上报数据 - * @param data object - * @param fn 上报成功后回调函数 - * @param isTrack 是否是自定义事件 - */ - function sendData(data, fn, isTrack) { - var xwhat = data.xwhat; - // Hybrid模式下由原生端上报 - if (isHybrid && ['$web_click', '$webstay', '$user_click'].indexOf(xwhat) === -1) { - // hybrid模式下删除这些属性,由原生上报 - var arr = ['$is_first_day', '$session_id', '$is_time_calibrated', '$startup_time', '$lib', '$lib_version', '$platform', '$debug', '$is_login']; - arr.forEach(function (o) { - delete data.xcontext[o]; - }); - var functionParams = [data.xcontext]; - if (xwhat === '$pageview') { - functionParams.unshift(data.xcontext.$title || ''); - } - if (isTrack) { - functionParams.unshift(xwhat); - } - callNative(isTrack ? 'track' : xwhat, functionParams); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 上报之前执行 - emit('afterSend', __assign(__assign({}, data), { xcontext: __assign({}, data.xcontext) })); - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + 'up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - successLog({ - key: option.url, - value: option.data, - code: 20012 - }); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } - } - //# sourceMappingURL=index.js.map - - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; - } - function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; - } - // 获取元素内容 - function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); - } - // 获取元素路径 - function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); - } - function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - //# sourceMappingURL=element.js.map - - /** - * 全埋点相关属性存储 - */ - var userClickAttrs = {}; - var webClickAttrs = {}; - function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); - } - function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; - } - //# sourceMappingURL=clickElement.js.map - - // 获取设备类型 - function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - } - // 动态加载js - function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } - } - //# sourceMappingURL=index.js.map - - /** - * 获取属性值 - */ - var getAttr = { - xwho: function () { - return getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return (navigator.language || navigator.browserLanguage).toLowerCase(); - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $referrer_domain: function () { - return getUrlDomain(eventAttribute.pageview.prevPath); - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - // 页面URL-去参的页面URL - $url_path: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return getUrlDomain(eventAttribute.pageview.path); - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } - }; - //# sourceMappingURL=getAttr.js.map - - function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; - } - //# sourceMappingURL=index.js.map - - /** - * 页面属性 - */ - var pageProperty = {}; - /** - * 设置页面属性 - * @param properties - */ - function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); - } - /** - * 获取页面属性 - * @returns - */ - function getPageProperty() { - return pageProperty; - } - /** - * 删除页面属性 - */ - function delPageProperty() { - pageProperty = {}; - } - //# sourceMappingURL=pageProperty.js.map - - function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), userObj); - // 执行beforePageView钩子,返回false则停止上报 - var beforePageView = config.beforePageView; - if (beforePageView) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, '$pageview'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageView.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - // 缓存当前pv上报的title - eventAttribute.pageview['$title'] = res.xcontext['$title']; - sendData(res, fn); - return res; - } - //# sourceMappingURL=pageView.js.map - - function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - var pageCloseAttr = eventAttribute.pageClose; - var hideTime = pageCloseAttr.hideTime; - return !pageCloseAttr.hideStartTime ? hideTime : hideTime + (res.xwhen - pageCloseAttr.hideStartTime); - } - // 获取访问时长,排除小于0情况 - var pagestaytime = res.xwhen - eventAttribute.pageview.xwhen - getHideTime(); - var attrs = { - pagestaytime: pagestaytime > 0 ? pagestaytime : res.xwhen - eventAttribute.pageview.xwhen - }; - // 填充当前pv上报的title - var title = eventAttribute.pageview['$title']; - if (title) { - attrs['$title'] = title; - } - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; - // 执行beforePageClose钩子,返回false则停止上报 - var beforePageClose = config.beforePageClose; - if (beforePageClose) { - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, 'page_close'); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - if (beforePageClose.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res); - } - // 触发pageclose - function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; - } - // 设置页面隐藏时间 - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } - function setPageHideTime() { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } - } - //# sourceMappingURL=pageclose.js.map - - function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); - } - /** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ - function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); - } - /** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ - function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); - } - /** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ - function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); - } - /** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ - function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); - } - /** - * 删除当前用户单个属性值 - * @param propertyName - */ - function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); - } - /** - * 删除当前用户所有属性值 - */ - function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); - } - //# sourceMappingURL=profile.js.map - - function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } - } - //# sourceMappingURL=startUp.js.map - - function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - if (aliasId === getId()) { - successLog({ - code: 20014 - }); - fn && isFunction(fn) && fn(); - return; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } - } - //# sourceMappingURL=alias.js.map - - function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); - } - //# sourceMappingURL=userClick.js.map - - function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); - } - //# sourceMappingURL=webClick.js.map - - function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); - } - //# sourceMappingURL=webstay.js.map - - function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); - } - //# sourceMappingURL=reset.js.map - - /** - * 获取预置属性 - * @returns object - */ - function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; - } - //# sourceMappingURL=presetProperties.js.map - - function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData('track'); - var trackAttrs = eventAttrs && !isFunction(eventAttrs) ? attrCheck(eventAttrs, eventName) : {}; - // 增加使用时长属性 - if (eventAttribute.timeEvent[eventName]) { - trackAttrs['$duration'] = getNow() - eventAttribute.timeEvent[eventName]; - delete eventAttribute[eventName]; - } - res.xwhat = eventName; - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - // 执行beforeTrack钩子,返回false则停止上报 - var beforeTrack = config.beforeTrack; - if (beforeTrack) { - // 设置属性 - var setAttrs = function (attrs) { - var obj = attrCheck(attrs, eventName); - res.xcontext = assign({}, res.xcontext, obj); - return res.xcontext; - }; - var obj = __assign(__assign({}, res), { xcontext: __assign({}, res.xcontext) }); - if (beforeTrack.call(globalWindow.AnalysysAgent, obj, setAttrs) === false) { - return res; - } - } - sendData(res, callback, true); - return res; - } - //# sourceMappingURL=track.js.map - - /** - * 记录自定义事件的持续时长 - * @param eventName 事件名称 - */ - function timeEvent(eventName) { - eventAttribute.timeEvent[eventName] = getNow(); - } - //# sourceMappingURL=timeEvent.js.map - - /** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ - function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ - function getDistinctId(fn) { - if (isHybrid) { - callNativeCallback('getDistinctId', null, fn); - } else { - var id = getAnonymousID(); - fn && fn(id); - return id; - } - } - //# sourceMappingURL=identify.js.map - - /** - * 注册页面自动采集自定义属性 - */ - function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } - } - //# sourceMappingURL=pageProperty.js.map - - // native回调方法 - function nativeCallback(name, params) { - var nativeCallbackNam = nativeCallbackFn[name]; - if (nativeCallbackNam) { - nativeCallbackNam.forEach(function (o) { - o(params); - }); - nativeCallbackFn[name] = []; - } - } - //# sourceMappingURL=nativeCallback.js.map - - var eventMap$1 = { - // before - //afterInit: [], //初始化完成之后,可以获取到sdk实例 - // afterSend: [], //数据上报之前执行,post上报类型时在加入数据缓存队列之前执行 - // beforeSend: [], //数据上报之后 - // successSend: [] //数据上报成功之后 - //errorSend: [] //数据上报失败之后 - }; - function on(eventName, fn) { - eventMap$1[eventName] ? eventMap$1[eventName].push(fn) : eventMap$1[eventName] = [fn]; - } - function emit(eventName) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (eventMap$1[eventName]) { - eventMap$1[eventName].forEach(function (o) { - o.apply(void 0, args); - }); - } - } - //# sourceMappingURL=hooks.js.map - - // 获取dom元素标签名称 - function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; - } - // 返回dom元素父节点 - function getParentNode(el) { - return el.parentNode; - } - // 获取所有兄弟节点(包括自己) - function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; - } - // 获取元素在同级中的下标 - function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; - } - // 遍历节点树 - function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } - } - //# sourceMappingURL=elements.js.map - - var visualMap = null; - var href = globalWindow.location.href; - // 上报可视化数据 - function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } - } - // 获取可视化埋点数据 - function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - printLog('Get Visual Event List from app'); - printLog(JSON.stringify(list, null, 2)); - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } - } - // 动态加载可视化交互文件 - function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } - } - //# sourceMappingURL=visual.js.map - - var scrollTime = null; - // 是否自动采集pv - function triggerPageView() { - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // hybrid模式下实时同步当前url给原生端 - setHybirdWebUrl(); - // 获取可视化数据 - getVisualList(); - } - /** - * sdk自动触发器 - */ - function autoTrigger() { - if (!isHybrid && config.autoStartUp) { - startUp(); - } - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageClose(); - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - document.addEventListener('click', webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 记录页面隐藏时间 - setPageHideTime(); - } - //# sourceMappingURL=index.js.map - - function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } - } - var configRule = { - appkey: { - ck: [stringCheck] - }, - uploadURL: { - ck: [stringCheck] - }, - debugMode: { - ck: [numberCheck] - }, - name: { - ck: [stringCheck] - }, - // 是否自动上报startup事件 - autoStartUp: { - ck: [booleanCheck] - }, - // 是否自动上报页面浏览 - auto: { - ck: [booleanCheck] - }, - autoProfile: { - ck: [booleanCheck] - }, - encryptType: { - ck: [numberCheck] - }, - hash: { - ck: [booleanCheck] - }, - allowTimeCheck: { - ck: [booleanCheck] - }, - maxDiffTimeInterval: { - ck: [numberCheck, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - // 是否自动上报全埋点事件 - autoTrack: { - ck: [booleanCheck] - }, - trackList: { - ck: [nameListCheck] - }, - autoCompleteURL: { - ck: [booleanCheck] - }, - autoPageViewDuration: { - ck: [booleanCheck] - }, - sendDataTimeout: { - ck: [numberCheck] - }, - sendType: { - ck: [stringCheck] - }, - autoClickBlackList: { - ck: [nameListCheck] - }, - autoHeatmap: { - ck: [booleanCheck] - }, - SDKFileDirectory: { - ck: [stringCheck] - }, - visitorConfigURL: { - ck: [stringCheck] - }, - crossSubdomain: { - ck: [booleanCheck] - }, - pageProperty: { - ck: [objectCheck] - }, - pageViewBlackList: { - ck: [nameListCheck] - }, - userClickProperty: { - ck: [objectCheck] - }, - exposure: { - ck: [objectCheck] - }, - // track上报之前执行该函数,返回false则停止上报 - beforeTrack: { - ck: [functionCheck] - }, - // pageView上报之前执行该函数,返回false则停止上报 - beforePageView: { - ck: [functionCheck] - }, - // PageClose上报之前执行该函数,返回false则停止上报 - beforePageClose: { - ck: [functionCheck] - }, - // 通知sdk客户端程序已经准备好了 - beforeInit: { - ck: [functionCheck] - } - }; - var config = optionsDefault(); - // 是否完成初始化参数配置 - var isInitConfig = false; - function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.ck.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.ck.length; i++) { - var fn_1 = rule.ck[i]; - if (!fn_1(value, o)) { - isOk = false; - break; - } - } - if (isOk) { - if (o === 'uploadURL' || o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - if (o === 'pageProperty' && value) { - setPageProperty(value); - } - config[o] = value; - } - } - }); - // 动态加载可视化交互文件 - loadVisual(); - function procedure() { - if (isReady()) { - successLog({ - code: 20007 - }); - // 执行初始化完成之前缓存的上报 - implementAallbackArr(); - // 自动触发生命周期相关钩子 - autoTrigger(); - // 之心生命周期事件监听 - emit('afterInit', __assign({}, config)); - fn && fn(config); - } - } - // 客户端程序是否准备就绪 - implementBeforeInit(procedure); - // 日期校准成功 - getServerTime(procedure); - // 核心内容准备就绪 - coreInit(function () { - isInitConfig = true; - procedure(); - }); - } - //# sourceMappingURL=config.js.map - - webViewHybridInit(); - var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.isHybrid = isHybrid; - this.config = config; - this.appStart = ready(startUp); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = ready(getSuperProperties); - this.unRegisterSuperProperty = ready(unRegisterSuperProperty); - this.clearSuperProperties = ready(clearSuperProperties); - this.profileSetOnce = ready(profileSetOnce); - this.profileSet = ready(profileSet); - this.profileAppend = ready(profileAppend); - this.profileIncrement = ready(profileIncrement); - this.profileDelete = ready(profileDelete); - this.profileUnset = ready(profileUnset); - this.reset = ready(reset); - this.track = ready(track); - this.timeEvent = timeEvent; - this.alias = ready(alias); - this.getPresetProperties = ready(getPresetProperties); - this.identify = ready(identify); - this.getDistinctId = ready(getDistinctId); - this.pageProperty = ready(pageProperty$1); - this.nativeCallback = nativeCallback; - this.on = on; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - if (!config.appkey) throw errorMessage['60006']; - if (!config.uploadURL) throw errorMessage['60007']; - setConfig(config, function (o) { - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; - }(); - var ArkSdk = new ArkJsSdk(); - globalWindow.AnalysysAgent = ArkSdk; - //# sourceMappingURL=index.js.map - - return ArkSdk; - -}))); diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css deleted file mode 100644 index b03cf0a..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.css +++ /dev/null @@ -1,455 +0,0 @@ -.ark-heatmap-location { - position: absolute !important; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 10000; } - -.ark-headmap-body-location-none .ark-heatmap-location { - display: none; } - -.ark-heat-click-element { - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 100%; - background-color: #ff0000; - color: #fff; - text-align: center; - font-size: 12px; - z-index: 10000; - line-height: 22px; } - .ark-heat-click-element .ark-heat-click-element-text { - display: block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - position: absolute; - width: 100%; - top: 50%; - margin-top: -11px; - text-align: center; } - .ark-heat-click-element:hover .ark-heat-click-element-tips { - display: block; } - .ark-heat-click-element .ark-heat-click-element-tips { - position: absolute; - background-color: #252d39; - font-size: 12px; - display: none; - top: 100%; - top: calc(100% + 5px); - font-size: 14px; - padding: 10px 0; - border-radius: 4px; - left: 50%; - transform: translate(-50%, 0); - white-space: nowrap; } - .ark-heat-click-element .ark-heat-click-element-tips::after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - top: 5px; - left: 50%; - margin-top: -10px; - border-width: 0 7px 5px; - border-bottom-color: #252d39; - margin-left: -7px; } - .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent { - display: inline-block; - text-align: right; - padding: 0 10px; } - .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num label, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent label { - display: block; - color: #9cacbf; } - -.ark-headmap-body-element-none .ark-heat-click-element { - display: none; } - -.ark-page-line { - z-index: 5002; - position: absolute; - width: 100%; - height: 1px; - left: 0; - border-bottom: dashed 1px #262d39; } - .ark-page-line.ark-mouse-lines { - border-bottom-style: solid; } - .ark-page-line .ark-page-line-value { - background-color: #262d39; - font-size: 14px; - padding: 8px 16px; - border-radius: 0 4px 0 0; - position: absolute; - left: 0; - bottom: -1px; - color: #fff; } - .ark-page-line .ark-page-mouse-line-value { - left: 50%; - border-radius: 4px 4px 0 0; - padding: 8px 0; - width: 190px; - text-align: center; - margin-left: -95px; } - -.ark-headmap-body-line-none .ark-page-line { - display: none; } - -.ark-heatmap-head { - position: fixed; - left: 0; - top: 0; - background-color: rgba(0, 0, 0, 0.8); - z-index: 10001; - width: 100%; - height: 64px; - font-size: 16px; - color: #9cacbf; - transition: all 0.3s; } - .ark-heatmap-head .ark-icon { - display: inline-block; - background-size: 100% 100%; - width: 14px; - height: 14px; - margin-right: 10px; } - .ark-heatmap-head .ark-icon.ark-icon-point { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQFJREFUOBGlUjEKwlAMTVR0cRGsQ1HP4QFcPIfgZl28gINDi4t2EzyHV/AcrXQRdNBFUWPTNiWUFsV+KC8vfXk/PwSg5MFf68110H/cnzskHBDSod6ojYOZ6VXEoOP4i7btnRklp5GLgWBIQE3GiIeC1OBNNA15K0FdG8V8s04KTw0qiG4ouCSotVHMbeuk8NIzyDUwVv6IXrDlG7EKk9O8t9e36zh9gk7GxdQFoK4Y6f86zjXQgm9xrgG3HTZ/5C+Oi21yZ5CVFy0R66IODMdbGrZ/ZcwWMy9aIv4XP4HQijcMLU5mjyyN5DVPZkAuAt4AaSMijbI0ktO89AzE9G/8AFToh10DAaI4AAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-ele { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQZJREFUOBGtUsEOwUAQnZn4AKTc9A8dERJt1IkmDuoLy0ka9QW7ZpZlrUUqNml23ryZ2bdvC/CP1V8dsmhd1lFezkPzJC98f71f+DxKQkjQ0PbJAK6rSdx18y0DEDY8ICPE7DgepG6BxHKy0jpBotzn7jhalfoOAsE7ngK1H1O+H9crfGx5kEaFumIFeshR2kgBG4hAkMiIJz+MLPYg9ExSLHk53T6z60ezZ0Q4V+O4IwOMGh5urkCaCmBS5FlCdvux3BnX1gS4FUVflysxVOzyLyb28sNUmux9/QE2b3fjgVvE00+MO24uGN/8ePkPCGinUA3Zk001ipd+syjUSo3Yj8LnfsIXR3J0GEi1vfgAAAAASUVORK5CYII=) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-dep { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAA10lEQVQ4y63SsU3DQBjF8Z9RBqBxaYkN7JoGMwEMgBRGSOWatK7cUgEbsEGSDZKGOpJLN9ngaA5EEfsima+6+77TvXf/e1kIwZy6MrMWkLf9HuXImcPQFFXKQTkhUiYdpCpv+7OghqbIsrkQFxeoV+hw96f9gdXQFKcshDAG8YBnbOP+HV+4xTLO6ymIJV7iusYer/HC+zhfpXLwEJVPeMMa3dAUW+xQT0LM2/4zqt/gMbKocY0N1ikHP084osJT5LKJDLoxiL/pu/QXwrmQzMrBWPr+PYnfX8xTYCBLOCIAAAAASUVORK5CYII=) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-element { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMlJREFUOBFjYBhowAhywP///9uBlD4QhzAyMn4D8s2AbGEgxgdeAdWeZQQqBhnyEohFgdgAKHgRKHYKyJYAYnzgPlCtPVgBUIMhEPvjU01bOaDtLEDMT44tsEA8B9SsDsQaQH89BhrWBGSLETDwCVBtCwtU0T8g/R+KQUJ/oBjExgVAaiAAaCMzEPPC+PSngbabAHEwOTbDEtIroGYRIDYEBswFoGGgQCUmIVmzADUA1f+fAdQASso3gRgEUoFYCMzCTbzGLUVPGQAuSE4Qo6rhyQAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-content { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALRJREFUOBFjYKAQMML0////XxfI9gdiFpgYDvoPUHwTIyPjJRR5oAE3gZhY8ACmmQnGANLXkNiEmBcwFACt5gTiHUQ44TRQDS+GASABoAQbEK/HY8hVoJwwVs0wQaACFiBeisWQe0AxKZg6vDRQIRMQL0Ay5BWQrYRXE7okUIMPkgEH0OVhfORYgImRRA9uA44B/XKXkH9wegGY1t8BNTsD8WMg/k/IIJzyoOgDYk+cCiiVAABBtddgMn4BogAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-set { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOBG1kz9LglEUh71WaGM55OrSB3DtE1RLFg3qUpOOgbhE3yHdCmqJPkIE0WpETurWpksQbTWEUb09v/vea68IKoIHHs655/zuee+/NxabhwVBsAJd8NYjWJ34LUSLEuE33cwivuDibVezmpFmiHLwDQ/wBG9eRPwKTVDtB/Z8Le66LuPrcAsvsAA58LZLYEC1G6jRRHNCY1CBD0hHcgeMHx2HkfwauXeoKmdXgE9CAnZAZ5DHXUIH2nBBroCXSeP1NqEJBk5BloI7uA6rtuEV43vQ7cjqoC0NVuC1s3m6HcMXlNUBnwed9jmcudhugbgEfTgZfI3BzIdo90EDXckztKAPGTgyxjTwWtEGrgY9WIIsrFP/xIeGSA9Jy570kH7R7Pt5Q57CuKe8JTGa/wc0NDsyQKTr6oK36X6mSI+pwz+2s2sE4j6K/AAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-refresh { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQ1JREFUOBG1ks8KAVEUxmckFijkAWztZqMsLJQsPIc8hLLyIKws5Dk8AClZsLFkIRZIGb8zXN07l/wpt36dc77vu3eaO+M4/1y+76cg8dUz2BCHDqxgDXNYQuvtQYQKMIMu5NUG+iR4an5aCcRgAo2ngbuIX4G0lUFsw9AyNAE/BzvYQlWzHAdhCjVDDA34JRjACDKGjXCwRCNxG8ikYaOsiGqoe7ho86vWxXh82uAATkwijqFPX361864XqQsjwya5WbkYuaCcYYYG/CG0Q3JwifJuFcvQBPwGyKeOabLdEvBAXitY9HmQn0t+soLSpUb1Qevr9E3CZ2oWjtADz3XdE/WzxQEJSH2W/jF1BQYvzfgwrEoEAAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-help { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAWdJREFUOBGNk79Kw1AUhxuX0qGLjo5SXEyXgiK1dFBcXNRdV7fiWwgurVudVPoAxReQPIOTUAc76SAUg7goxO8XcpPjjUovfLnn/M6f5ObeW6l4I0mSEPpwD3GGbGmhl164BKswhE8YwSGo2RrswxUoppxqUYklASJ4hM6PoHGItWECyi2a4KiriusuH3s90y+ZN41ex1fuMNUwmqBPy9+M3YUPuIFzeIdd06SDr5ow4DEgsBgEwbFJuMWeovWkkXPG1MTfk6+BNmJ6XeCxA2Ow4w7nwggz7C/jy1TNtjppq/7cHmIteIN8CapWDcT/NiBhGV7gVEV2oKUNtIQpNGzQ2CfYEWvXf/LHCsKT+4lLJB35GbxlFS0m9vxL7BptpiWUttElE3uALee7Ga0N6TamGk7pICmAvgE1V5hpOkgT1eQ6zrxHWQdIpzBSTd4g6+xfpgOS9KeFbF0wfXb5MtlOJKhg7uv8DahvoK6C+lwsAAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-down { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALpJREFUOBFjYBi+4P///1xAvAGIY0n2JVCTIBAfBeJNQPwEiIuINgSoWBqIrwDxJCBmAmI5IL4GxB0EDQEqUgPi+0BciawYyAe56BAQzwViZmQ5OBsoYQLEz4A4ESQIpFHCAMhnB+JVQAwKFw64RhgDKukN1Yw1DIBqGIG4D4jDYfowaKAkLAwmA9lkhcEDoMYqZJOBfKLD4DlQcRKyZhgbKE4wDHYBFfnCNGCjgfK4wwAoyYRN0+AXAwDWDeuTwsPrDwAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-crowd { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAATtJREFUOBHVUbFKA0EQnd0cKCh+gaKVX5BKbSwsRBIJyGGpgViJiLGxS2Vjgm0IKFHs0iWCoHX+wyJ/kEbU2+fMrnts7oK2OrA3b2bnzc2bJfr3prIKStX6NkAdyStFR4Pb1lO2JoyjMBBsycCixaSk0ZLg8kF9S3y/23oR70178JMvVc9PDeFZjuCwNtdAxubZR3Is5moYFD0pxJLLSfjWbMf2pCii6+ST1iUuMPZ58ekSK7Wz1eRDnYCwo7S+k0sYcwjSx4/d5kDiaWYbsK4YMPcEmkmLWEKB1B7rXuPNxtzoUmmscE3M/+3NLs+3e43Gu5MANCfI3EVrvW9McsGvsuuamgcyNAdWwbNtvL2ONzlfsUsEMKFZCP2bqyGTy45svwuO7DIs1TbOvUJAEJjuKJP/7W5K+Z9NfQHcMWh6c1UmgAAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-heatmap-switch { - display: inline-block; - width: 36px; - height: 18px; - border-radius: 9px; - position: relative; - background-color: #4c6072; - cursor: pointer; - vertical-align: sub; - margin-right: 5px; } - .ark-heatmap-head .ark-heatmap-switch.ark-switch-act { - background-color: #0095e3; } - .ark-heatmap-head .ark-heatmap-switch.ark-switch-act::before { - left: 20px; } - .ark-heatmap-head .ark-heatmap-switch::before { - content: ''; - position: absolute; - top: 2px; - left: 2px; - width: 14px; - height: 14px; - display: inline-block; - border-radius: 20px; - background-color: #fff; - z-index: 20; - -webkit-transition: all 0.5s; - transition: all 0.5s; } - .ark-heatmap-head .ark-head-hide { - display: none; - position: absolute; - width: 64px; - height: 32px; - line-height: 32px; - right: 56px; - top: 64px; - background-color: rgba(20, 137, 226, 0.8); - text-align: center; - cursor: pointer; } - .ark-heatmap-head .ark-head-hide i { - cursor: pointer; - margin-right: 0; - transform: rotate(180deg); } - -.ark-heatmap-head-menu { - float: left; - margin-left: 20px; } - -.ark-heatmap-head-menu-item { - float: left; - line-height: 64px; - text-align: center; - margin-right: 10px; - cursor: pointer; - position: relative; } - .ark-heatmap-head-menu-item:hover, .ark-heatmap-head-menu-item.ark-active { - color: #1489e2; } - .ark-heatmap-head-menu-item:hover::after, .ark-heatmap-head-menu-item.ark-active::after { - content: ''; - height: 2px; - position: absolute; - left: 0; - bottom: 0; - background-color: #1489e2; - width: 100%; } - @media (max-width: 880px) { - .ark-heatmap-head-menu-item i { - margin-left: 10px; } - .ark-heatmap-head-menu-item span { - display: none; } } - -.ark-heatmap-head-handle { - float: right; - margin-right: 20px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item { - float: left; - padding: 0 10px; - margin-right: 10px; - position: relative; - line-height: 64px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-handle-hover { - color: #fff; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-tips { - display: inline-block; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-handle-hover { - cursor: pointer; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i { - cursor: pointer; - width: 16px; - height: 16px; - float: left; - margin-top: 23px; - opacity: .8; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i:hover { - opacity: 1; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box .ark-pop-tips { - top: 50px; - left: -5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips { - display: none; - position: absolute; - background-color: #fff; - padding: 10px; - box-shadow: 2px 0px 4px #252d3933; - border: 1px solid #D8E0E9; - border-radius: 4px; - top: 64px; - left: -100px; - line-height: 12px; - font-size: 12px; - color: #333; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box::after, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips::after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - top: 5px; - left: 50%; - margin-top: -10px; - border-width: 0 7px 5px; - border-bottom-color: #fff; - margin-left: -7px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box { - padding: 20px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list { - width: 500px; - left: -200px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-hd { - font-size: 16px; - color: #252d39; - padding-bottom: 5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - text-align: center; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd td { - height: 40px; - line-height: 40px; - font-size: 14px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd thead td { - border-bottom: 2px solid #e4eaf1; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody { - max-height: 400px; - overflow-y: auto; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody td { - border-bottom: 1px solid #e4eaf1; - color: #4c6072; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody .ark-element-content { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding: 0 5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition { - width: 300px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-title { - color: #6d859e; - font-size: 13px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd { - padding: 17px 0; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd i { - margin-right: 5px; - vertical-align: bottom; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs { - position: relative; - margin-top: 20px; - padding-top: 10px; - padding-left: 20px; - border-left: solid #e4eaf1 1px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-item { - padding-bottom: 15px; - color: #354359; - font-size: 12px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-relation { - position: absolute; - width: 20px; - height: 20px; - border: solid 1px #c5ced8; - border-radius: 10px; - font-size: 12px; - color: #9cacbf; - text-align: center; - line-height: 20px; - left: -10px; - top: 50%; - margin-top: -10px; - background-color: #fff; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set { - width: 280px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item { - position: relative; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-name { - width: 120px; - font-size: 14px; - position: absolute; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content { - padding-left: 120px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box { - position: relative; - height: 4px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-left-track { - position: absolute; - background-color: #9cacbf; - height: 100%; - left: 0; - width: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-left-trigger { - left: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-middle-track { - position: absolute; - height: 100%; - left: 0px; - background: linear-gradient(to right, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%); - right: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-right-track { - position: absolute; - height: 100%; - right: 0; - width: 0px; - background-color: #fb0000; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-right-trigger { - left: calc(100% - 10px); } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-trigger { - z-index: 2; - position: absolute; - cursor: pointer; - width: 10px; - height: 10px; - top: -4px; - background-color: #e4eaf1; - border: solid 1px #9cacbf; - border-radius: 4px; - left: 30%; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box { - position: relative; - background-color: #9cacbf; - border-radius: 2px; - height: 4px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box .ark-slider-rate { - position: absolute; - background-color: #0095e3; - left: 0; - height: 100%; - width: 30%; - border-radius: 2px; } - @media (max-width: 880px) { - .ark-heatmap-head-handle { - margin-right: 0; } - .ark-heatmap-head-handle #arkHeatmapSwitch, .ark-heatmap-head-handle #arkHotEleList, .ark-heatmap-head-handle #arkHeatDisplayConfig, .ark-heatmap-head-handle #arkConditionList { - display: none !important; } } - -.ark-headmap-loading, .ark-headmap-nodata { - position: fixed; - top: 0; - right: 0; - width: 100%; - height: 100%; - background-color: rgba(255, 255, 255, 0.5); - text-align: center; - z-index: 10000; - display: none; } - .ark-headmap-loading .ark-loading-box, .ark-headmap-nodata .ark-loading-box { - width: 260px; - height: 182px; - margin: 0 auto; - top: 50%; - margin-top: -91px; - position: relative; - background-color: rgba(0, 0, 0, 0.8); - border-radius: 4px; } - .ark-headmap-loading .ark-loading-box .ark-loading-img, .ark-headmap-nodata .ark-loading-box .ark-loading-img { - width: 64px; - height: 64px; - margin: 0 auto; - top: 40px; - position: relative; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAAAXNSR0IArs4c6QAACXNJREFUaAXtG1tsVMd1Hte7XnsNBnv9XD9rC4iJaCAqRFBhKlVKmzRVpQS1UtWqkWpURYnyABPSj25/oOYRChFSo0qVWqn9AFIVJelnsUNThSiOmghDSI29Xq+N7TVg/N69OzM9Y9jttblz72xiO+vKV1rdmfOac87MnHvmsRgt81NxfLDY5CwEze5GSDQKgboRRu9R7AkNHygbWWZ1oOllfEqP9W/nAr0jhChe2CxG+BbG5PsjrZXvL8QtZX3ZHPDY68LXnezvgh6vUxuEI7k5aGP05aoZNc3iYsjiilNL6xUDO5yNl7yiOiHYI2opi49ZNgcIxhp11BfcCOrQLRaNkamgyrZoEHrpOYTxTujRUoT4IHjxXVGQ97vYcyWTKnkC0VmgVaHTcCwES1cUBYghuPLXN32G1/QyQYmX5CVJ3q3Z7hca4woWJTijEVDeFnk0gVi7QOinoEQDDNkChPAGjvDLYmLmHxUnBqqULVHcrcRZEJTwsKX6QLE5dNEoOz4cSPiShdME++KUe8fxZP7YjLco+Hr/eumcB5gcANoOKG6LVJgC/Rl6PU8hL5hg7A0FDu2uqrgMkf4DFX4OjtFHu16p/reKRhp3LX/TesYTtiN31hS5VSej61T8dnBtB0Bv773X43Zi7sO4+EZpW+8OO4pzezGjHuNH8OHttMODcz4hyPvDcxgrp4Ac9irjUzKlE7a9KXJSdbe3rSftmGBc7YSh7/owjDcDkW1PD71UHn7mrNje3hv5ASJ4Kxa4RhAUQRx/3Fxb+VfpJKcG5JxPaKQufWOjuSDHdJKVwmk7AIZfAuZ7ik/5JoI4yrxv5HkQIH/p51y6pC5wL8EI5uFiPhlMAWI7dBcqQxHvWAhbrPqsmavVq55C03EkWfXRdoDfy/6AMVJ+5qRQjHHHzYO116wNLGZ588wV1wyReL1soKXclS6ll7YDwi/VjSGBnoVJMJVitr4B/jHy5/7cClvscntoT9Jfwm47yV1DSsagI7TnifukXtBa4GhvmUCkBZrYBXFhDSxgwvDlvVCzduR8575HtYboApEZV5vOCs/YyEBBfIp7U8xeRuJlRUPjy6VDqt2v9C3zAviqUPn+ShVZbXwFeyA9dGpDvblTPvIkJmQzF9gPcSRiYPPCzf31fSvYPhQKhcjb5U/S2XXbcOBqO7/4q2bI1f4XJOccUHG8d6PJ6G9hJi3YqcEMI/6XWGvNqZXmBBkXSk+NlKBZs4wLlk7ODIxm81Ay2vPq1+5Km3Dl4WhR3OBvQdmvMpIgcnqkNfgnFT4b4RW/uQGbK0ZApRus6Hoih2ruENPgPwMipfFSgMBin5wiKmHZBt/Q9lmBk/FS31nMqkMhQQhkDA+7GQDDyTtd4NnqRpct+Kmc/DVuunBBjXMPXTUI5K9FbsQSL8ykdtaoI28paShjHh35gak8GAECdekQU8GjOnTZQGPGk0kdPaITSQHrS/GOGzGku5eHDtWF3eiyBZ8bWD/uqgvNET9+vsEksdbqS7Ab80cHhkEvFYcd8FmHutGybtxDDMeVK8XT0RDGfG5ex1qr3oBYsB8jkt64hFRhBkbHeRD0LBxUDGSdlQ4KyURnZ9373RShOwvJMOWMcBYdPtAwdww3lwhZiSreHMxj48Q/tL80Zs2YrDQrqdx8URgoHDYmEl5SEi9n259Hpuz5lWTDqq6rHlj1wKoHlswD874CgTNdfjrhr0kaKJcYLDryYv3wkrWcJYLnHFARGswzfeYzcO7xPUiN0xuN8rjKoMnfr9RNkeojfeumc1A9ZahQcEwR5pOcod7RX9beTPkfNhXP0vbwjhCs+L6eAlrfkAxNEpL7Gtzf6bXCs71ceqSvHnZzmuz0pJyPDB2q/VDmOaSj77GnVMZLZoGwn/H4L+wEZSus4vj1YpXxUmdGSEn5icgmWSacs12y4PJsChwdKXOhyRp0MuF1vY3COKmVox9Wg7hSR3NixJXbSzr8y0qDSYFbe4Jz+q/uhwvlhsioG/EcnuU4rq60ZCwTkYCLRjpN+fyGSZBgrqe+EAhjKykIUso1OlXw4O3oNEH+/HMwDWJqj8HKCRun1fjswxBq9iDoWifNPIbnhjxsJfJmFyGJVyHef76QAT4TowTTo7HWoPLezkKebKgP7t8wajB+RekEjG+2TJbP2TsvEyw9FtkMn71GAPo4M6Ml9TMfdO1tgpshK/MJhLr8yJvfCNdwCqlMhAwywQwWib1YM/T/sNexMntlVess88C8GKCjW3lbeFMS0W9DjG1AGC4nYDxMMf5ncE3lpc59eFluiNSevFM4Hb/7EKdoHWzewmVZElvLfJ9dPxiY0LHBSpORA4qPRZ9AXDxlFZAqw/Zyd6AueKprL17SoFlyIrqFM7Y91W7qDesaBq54D3a4/5OC6by1j7tKT/bVq4yXDcE2a8NwOPoTnUa/KA3822SjnfFSHpyGU4H4ntJjQyWZyNd2AI/j77gKFmJbw+lbrgeTrnJsCOR5f0IkXA9ogeoRG3YlSNsBkFRUKKWkEZjcnZ2pT1cXsRA8M7Aezukdj/Flc+CnYCbNai0a7gnEWs6ihDrGALkEvXRjx1aYsLWQghdBGL1FBen7Zl2w0/GusDzt09AWFkJwIKT/aBklxUG0veImFiJqgvloREUnt6g6ena0JJF4AhL1Jo5EGYSupiTn3+3o6W+pPHxNeVTv889MgsNcT30JFg7rmgc103aAF4mLcFXW+R8ZFHeo/jUie34ao6e5EKUPqgFBFOBxkve0vPdnh5f/BoFV6XU7nBXGiaF13J/i0XZA/8HqwRxBzsheTjFb37D4+qS6YOiCFWYtX+rZvhFyB+fNF4HKO/qitvt4Utaa3MRHhBDlUhfuMHw6+krwc2u7buWM8gApTEb58Zmpb3FC4LPI8+F6/AgsNi67rRgDR3ofhyu2tn+msCoJ/xn6MPZa7d+tMGu5OSSMK/7IFogbG5jgEBQJJ4Ldhqn/aexQVfp028rjVNYIK/PZu18okuHob/Oh7jXIGKnzCv2eDEKd/2/QHpqLA3ITp1Oe/DZ3IB4KffHT3owd4G6qPQUE0UHHHYr7bIwL7bsI7Xtwst2+OW2odgzQlqggXJtvXoUg+sCFhfnk+K4/zjMKYvP5M68tmwNkFPfgxFsQxKbs1CSYTHs89Hw4VDdrh18qWMZB8MsqIm+gmHfYbli81MCUKIKpcRuuavURfLtj+MAWW+d82Tad+P8LufZiufSFSrMAAAAASUVORK5CYII=) no-repeat; - background-size: 100% 100%; - animation: ark-around linear 2s infinite; } - .ark-headmap-loading .ark-loading-box .ark-loading-text, .ark-headmap-nodata .ark-loading-box .ark-loading-text { - padding-top: 65px; - color: #fff; - font-size: 14px; } - .ark-headmap-loading .ark-nodata-box, .ark-headmap-nodata .ark-nodata-box { - width: 280px; - height: 200px; - margin: 0 auto; - top: 50%; - margin-top: -100px; - position: relative; } - .ark-headmap-loading .ark-nodata-box .ark-nodata-img, .ark-headmap-nodata .ark-nodata-box .ark-nodata-img { - width: 110px; - height: 72px; - margin: 0 auto; - top: 32px; - position: relative; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABICAYAAAAXrsDQAAAFu0lEQVR42u2dXWgcVRTHo4IP6oM+iGC0rRalKoo09UHFvgiKiIgPYqX6oCL4IErrmw/2pfWl9UGwIJiIgqJVm1oFsQht+pHZzSaZOx872bl3dvYr2c2mNgnWoFJr13uStJu5u7M7s7szO82egT8M87m5vznnnnvumUlfHy5X93JGNrdJxMyPyvTiqGxWUK2IXoQ2hLYME9p/2PCdEbRlKPBWLA0bvMPw8oGDQ/cYjNsMARw2dBBCcAgOwSE4VDTAFQq/347qnBAcgkNwCA6F4BAcgkNwKASH4BAcgkNwCA6F4AJSJrO4MU6sTyRCyyBYh20ILuICUGLyF7YhuIgLrKy2rICWERyC611wx09rA18cOXVkaHikDIJ12IauMsLgANDg4ZGFwR9OVBzi2zoBD4OTgATWVQNtVbAPhwMRBQeu0Q0c7ENwCA7BoatEcIEHJwjuKh0OhK2EZr8WI+y35aEHoTbXj3FiPo8D8IjKsGbvl2Q26f4SCD1kGGdvQnARkl1a2CARU/LwIsi3CC5KiWyVfey5wlmlOxBcM0uwz94zplkfSQrTuUUsLYuvwzbY14l7aKn8gCTTvxxuUaGnNFbYLhu5Z7iLtASXmTGMyvUIzkUThvWiJJvTrn0O3wfHtHufmEIPCddeLBTmNl/eT1K5x/i9Lqw9hp+zG8G5QSP0UvO3RumlduDJhv0kv4bjFewJzdpdB+6g8LbqvKblb1nX4L4/ltg5NHyyCIJ1L+6xkaXVs7xW3SYHMOK4HqHmzMz8HeJxVn72Ae5O/xCs7sC6BgfAqimwk8Vmx0P/5fd1KDjHt7UlszvE60zqmVdcf5fO9gqQ/4mR7CYEd9kKFJb0/aI9D1j8/Kbp6XP94n34oPt0o3NyufJd3K3OCC7za3SVVfe11MIXEpZ8ZUdU+12xr1RShaean5d+RzwvrqUHMDgJARzLz93NG7wo9FeHfViq7nSZ5nEEt+Iq9SBdZUK1PhT7qqQ9+8jaYyY1eyfABcG643wl/VLNbyDs2a6A61Z5QNjByUp06LTouGodrFOgVFzjDmv65RgxTwjwk5VK5brQwXWrICfs4UBcYZ8LLnaB0tKWelM6a+Vl/Bcj9M3QwXWrBC7MAThkQMQvMI2p1h63ubhG4FYfgm+E40qqWr6xp8EFkfLi1nXMeQ2Wd+sOvIBTp3Jba3KcMv2gZ12lS5I52U6SeTKZeU78+yZ09laj2e9m4OrOKhDzz7ieua0ng5MgxPsf1elNmNysbMELuJQ9cy/ff07wBJ/ifFwHNK5n3qhJbU3lXugEuOUoWKXv13ysVKNbEFwbKhbn7xQH2zyo+NVLoZBXcKv3SAvnHEVwbVmbJViD+a9KC090EpybVY9qbDuCa0HQ/0gKPe8MuOiXXkvz/IBbjcwTQlSe4IPyaxCc34BEpQfFfKZuTj8UFLh6kWvT+hQEV3eMdcFpbWy/j3Ftw5RXgzKIn33VpyA4MfxnR2uTCdU6kqbW0yDJ3Cw7U6c+ZReC815H4kiXJZT0e6HNbshsSKxPISR7swu4VNlgMw8jOGg4c9xLHUlQWp6BIM6giMPb7/Z/B76DmohehzapZ2vmyviQ4FXf12nRVVYH5dY+cc5vdCqzsRacQvv5AXMAr1ctb3l2mtCc0LedaTHp3lJw0miWfZSYX9W3Og4PLA/cJn4I+0odydPdAOdW1xJTra19uFQXGOjyh5YJ0dxwyy63TVfpVknmORXWK8uYZj3arI4kCn0uzJq7Rpi9uEiK9bpQRvBLdKJc50sjY7q9DYmtLlDv4XST7KcIfRnJck7gWpuR2BVw5uPinNi4ln47m53d1C1gjJXui6vWAXF2YqJUugGJVYOTa/mTbUQ+2iX0M6QlBii874AnOrrQzPMThr0BSdULUmT2Mn+qFyMILi9p9oNIqGGESfvBJUFjdfc/WdK/eUQ5xS1tryxbtyKZdbL8D1VmQJH/LyQBAAAAAElFTkSuQmCC) no-repeat; - background-size: 100% 100%; } - .ark-headmap-loading .ark-nodata-box .ark-nodata-text, .ark-headmap-nodata .ark-nodata-box .ark-nodata-text { - padding-top: 65px; - color: #fff; - font-size: 14px; } - -.ark-headmap-nodata { - background-color: rgba(0, 0, 0, 0.8); } - -@keyframes ark-around { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); } } diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js deleted file mode 100644 index c0f516f..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_HEATMAP.min.js +++ /dev/null @@ -1,1978 +0,0 @@ -(function () { - 'use strict'; - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z = ".ark-heatmap-location {\n position: absolute !important;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10000; }\n\n.ark-headmap-body-location-none .ark-heatmap-location {\n display: none; }\n"; - styleInject(css_248z); - - var typeMap = {}; - var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; - typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); - }); - function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; - } - function isString(value) { - return type(value) === 'string'; - } - function isObject(value) { - return type(value) === 'object'; - } - - function createElement(tag, attrs, el) { - if (attrs === void 0) { - attrs = {}; - } - var node = document.createElement(tag); - if (attrs.id) { - node.id = attrs.id; - } - if (attrs.class) { - node.className = attrs.class; - } - if (attrs.style && isObject(attrs.style)) { - for (var key in attrs.style) { - node.style[key] = attrs.style[key]; - } - } - if (attrs.content) { - node.innerHTML = attrs.content; - } - var ele = el ? el : document.querySelector('body'); - ele.appendChild(node); - return node; - } - // 根据元素路径获取dom - function getPathEle(path) { - var pathList = parserDom(path); - if (pathList.length) { - var eleStr = ''; - for (var i = pathList.length - 3; i >= 0; i--) { - var item = pathList[i]; - if (item.elePath.indexOf('#') > -1) { - eleStr += item.elePath; - } else { - eleStr += item.elePath + ":nth-child(" + (item.index - 0 + 1) + ")"; - } - if (i > 0) { - eleStr += ' > '; - } - } - var ele = eleStr ? document.querySelector(eleStr) : null; - return ele; - } - } - /** - * [parserDom description] - * @param {[type]} path [description] - * @return {[type]} [description] - */ - function parserDom(path) { - var eleList = []; - if (path.indexOf('<') < 0) { - return [{ - elePath: path.split('|')[0], - index: path.split('|')[1] - }]; - } - var pathObj = path.split('<'); - for (var i = 0; i < pathObj.length; i++) { - var elelPath = pathObj[i].split('|')[0]; - var eleIndex = pathObj[i].split('|')[1]; - eleList.push({ - elePath: elelPath, - index: eleIndex - }); - } - return eleList; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getEleOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (typeof property === 'string') { - return getConstantStyle(element, property); - } else if (Array.isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - - var globalWindow = window; - - function CheckChinese(val) { - var reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); - if (reg.test(val)) { - return true; - } - return false; - } - function getUrlParam(paraName) { - var url = document.location.toString(); - var wName = window.name; - if (isString(wName) && wName.indexOf(paraName) > -1) { - url = wName; - } - var arrObj = url.split('?'); - if (arrObj.length > 1) { - var arrPara = []; // arrObj[1].split("&") - for (var i = 1; i < arrObj.length; i++) { - arrPara.push.apply(arrPara, arrObj[i].split('&')); - } - var arr = void 0; - for (var index = 0; index < arrPara.length; index++) { - arr = arrPara[index].split('='); - if (arr != null && arr[0] === paraName) { - var value = arr[1]; - if (arr[1].indexOf('#') > -1) { - value = value.split('#')[0]; - } - if (value.indexOf('%') > -1) { - try { - var utfValue = decodeURI(value); - if (CheckChinese(utfValue)) { - return utfValue; - } - } catch (e) {} - if (globalWindow.AnalysysModule && globalWindow.AnalysysModule.decodeGBK) { - try { - var gbkValue = globalWindow.AnalysysModule.decodeGBK(value, 'gbk'); - return gbkValue; - } catch (e) {} - } - } - return value; - } - } - return ''; - } else { - return ''; - } - } - - // 类型转换 - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - - // uba传递过来的查询条件 - var arkcontent = null; - var arkcontentText = { - crowds: '', - filter: { - conditions: [], - relation: '且' - } - }; - // 设置参数 - function setArkcontent(content) { - arkcontent = content; - } - // 查询参数 - var queryParameters = function () { - var query = { - content: JSON.stringify(arkcontent), - times: +new Date() - }; - return jsonToString(query); - }; - function getUrlArkcontentText() { - var contentText = unescape(getUrlParam('arkcontentText')); - if (contentText) { - try { - arkcontentText = JSON.parse(contentText); - console.log(arkcontentText); - } catch (e) {} - } - } - // 获取url上面的arkcontent - function getUrlArkcontent() { - var content = unescape(getUrlParam('arkcontent')); - if (content) { - try { - arkcontent = JSON.parse(content); - } catch (e) {} - } - } - - var heatConfig = { - // 当下展示热图类型 Location Element lines - heatMapType: 'location', - // 热图是否显示 - heatMapShow: true, - // 是否打开 - isOpen: true, - // 帮助文档 - helpDoc: '', - loading: false, - nodata: false, - max: 10 - }; - // 显示配置 - var displayConfig = { - // 显示深度线 - lineShow: false, - // 颜色范围 - colorRange: '', - max: 100, - min: 0, - // 背景透明度 - backgroundTransparent: 0.3 - }; - // 初始化 - function storeInit() { - getUrlArkcontent(); - } - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - - var css_248z$1 = ".ark-headmap-loading, .ark-headmap-nodata {\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.5);\n text-align: center;\n z-index: 10000;\n display: none; }\n .ark-headmap-loading .ark-loading-box, .ark-headmap-nodata .ark-loading-box {\n width: 260px;\n height: 182px;\n margin: 0 auto;\n top: 50%;\n margin-top: -91px;\n position: relative;\n background-color: rgba(0, 0, 0, 0.8);\n border-radius: 4px; }\n .ark-headmap-loading .ark-loading-box .ark-loading-img, .ark-headmap-nodata .ark-loading-box .ark-loading-img {\n width: 64px;\n height: 64px;\n margin: 0 auto;\n top: 40px;\n position: relative;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAAAXNSR0IArs4c6QAACXNJREFUaAXtG1tsVMd1Hte7XnsNBnv9XD9rC4iJaCAqRFBhKlVKmzRVpQS1UtWqkWpURYnyABPSj25/oOYRChFSo0qVWqn9AFIVJelnsUNThSiOmghDSI29Xq+N7TVg/N69OzM9Y9jttblz72xiO+vKV1rdmfOac87MnHvmsRgt81NxfLDY5CwEze5GSDQKgboRRu9R7AkNHygbWWZ1oOllfEqP9W/nAr0jhChe2CxG+BbG5PsjrZXvL8QtZX3ZHPDY68LXnezvgh6vUxuEI7k5aGP05aoZNc3iYsjiilNL6xUDO5yNl7yiOiHYI2opi49ZNgcIxhp11BfcCOrQLRaNkamgyrZoEHrpOYTxTujRUoT4IHjxXVGQ97vYcyWTKnkC0VmgVaHTcCwES1cUBYghuPLXN32G1/QyQYmX5CVJ3q3Z7hca4woWJTijEVDeFnk0gVi7QOinoEQDDNkChPAGjvDLYmLmHxUnBqqULVHcrcRZEJTwsKX6QLE5dNEoOz4cSPiShdME++KUe8fxZP7YjLco+Hr/eumcB5gcANoOKG6LVJgC/Rl6PU8hL5hg7A0FDu2uqrgMkf4DFX4OjtFHu16p/reKRhp3LX/TesYTtiN31hS5VSej61T8dnBtB0Bv773X43Zi7sO4+EZpW+8OO4pzezGjHuNH8OHttMODcz4hyPvDcxgrp4Ac9irjUzKlE7a9KXJSdbe3rSftmGBc7YSh7/owjDcDkW1PD71UHn7mrNje3hv5ASJ4Kxa4RhAUQRx/3Fxb+VfpJKcG5JxPaKQufWOjuSDHdJKVwmk7AIZfAuZ7ik/5JoI4yrxv5HkQIH/p51y6pC5wL8EI5uFiPhlMAWI7dBcqQxHvWAhbrPqsmavVq55C03EkWfXRdoDfy/6AMVJ+5qRQjHHHzYO116wNLGZ588wV1wyReL1soKXclS6ll7YDwi/VjSGBnoVJMJVitr4B/jHy5/7cClvscntoT9Jfwm47yV1DSsagI7TnifukXtBa4GhvmUCkBZrYBXFhDSxgwvDlvVCzduR8575HtYboApEZV5vOCs/YyEBBfIp7U8xeRuJlRUPjy6VDqt2v9C3zAviqUPn+ShVZbXwFeyA9dGpDvblTPvIkJmQzF9gPcSRiYPPCzf31fSvYPhQKhcjb5U/S2XXbcOBqO7/4q2bI1f4XJOccUHG8d6PJ6G9hJi3YqcEMI/6XWGvNqZXmBBkXSk+NlKBZs4wLlk7ODIxm81Ay2vPq1+5Km3Dl4WhR3OBvQdmvMpIgcnqkNfgnFT4b4RW/uQGbK0ZApRus6Hoih2ruENPgPwMipfFSgMBin5wiKmHZBt/Q9lmBk/FS31nMqkMhQQhkDA+7GQDDyTtd4NnqRpct+Kmc/DVuunBBjXMPXTUI5K9FbsQSL8ykdtaoI28paShjHh35gak8GAECdekQU8GjOnTZQGPGk0kdPaITSQHrS/GOGzGku5eHDtWF3eiyBZ8bWD/uqgvNET9+vsEksdbqS7Ab80cHhkEvFYcd8FmHutGybtxDDMeVK8XT0RDGfG5ex1qr3oBYsB8jkt64hFRhBkbHeRD0LBxUDGSdlQ4KyURnZ9373RShOwvJMOWMcBYdPtAwdww3lwhZiSreHMxj48Q/tL80Zs2YrDQrqdx8URgoHDYmEl5SEi9n259Hpuz5lWTDqq6rHlj1wKoHlswD874CgTNdfjrhr0kaKJcYLDryYv3wkrWcJYLnHFARGswzfeYzcO7xPUiN0xuN8rjKoMnfr9RNkeojfeumc1A9ZahQcEwR5pOcod7RX9beTPkfNhXP0vbwjhCs+L6eAlrfkAxNEpL7Gtzf6bXCs71ceqSvHnZzmuz0pJyPDB2q/VDmOaSj77GnVMZLZoGwn/H4L+wEZSus4vj1YpXxUmdGSEn5icgmWSacs12y4PJsChwdKXOhyRp0MuF1vY3COKmVox9Wg7hSR3NixJXbSzr8y0qDSYFbe4Jz+q/uhwvlhsioG/EcnuU4rq60ZCwTkYCLRjpN+fyGSZBgrqe+EAhjKykIUso1OlXw4O3oNEH+/HMwDWJqj8HKCRun1fjswxBq9iDoWifNPIbnhjxsJfJmFyGJVyHef76QAT4TowTTo7HWoPLezkKebKgP7t8wajB+RekEjG+2TJbP2TsvEyw9FtkMn71GAPo4M6Ml9TMfdO1tgpshK/MJhLr8yJvfCNdwCqlMhAwywQwWib1YM/T/sNexMntlVess88C8GKCjW3lbeFMS0W9DjG1AGC4nYDxMMf5ncE3lpc59eFluiNSevFM4Hb/7EKdoHWzewmVZElvLfJ9dPxiY0LHBSpORA4qPRZ9AXDxlFZAqw/Zyd6AueKprL17SoFlyIrqFM7Y91W7qDesaBq54D3a4/5OC6by1j7tKT/bVq4yXDcE2a8NwOPoTnUa/KA3822SjnfFSHpyGU4H4ntJjQyWZyNd2AI/j77gKFmJbw+lbrgeTrnJsCOR5f0IkXA9ogeoRG3YlSNsBkFRUKKWkEZjcnZ2pT1cXsRA8M7Aezukdj/Flc+CnYCbNai0a7gnEWs6ihDrGALkEvXRjx1aYsLWQghdBGL1FBen7Zl2w0/GusDzt09AWFkJwIKT/aBklxUG0veImFiJqgvloREUnt6g6ena0JJF4AhL1Jo5EGYSupiTn3+3o6W+pPHxNeVTv889MgsNcT30JFg7rmgc103aAF4mLcFXW+R8ZFHeo/jUie34ao6e5EKUPqgFBFOBxkve0vPdnh5f/BoFV6XU7nBXGiaF13J/i0XZA/8HqwRxBzsheTjFb37D4+qS6YOiCFWYtX+rZvhFyB+fNF4HKO/qitvt4Utaa3MRHhBDlUhfuMHw6+krwc2u7buWM8gApTEb58Zmpb3FC4LPI8+F6/AgsNi67rRgDR3ofhyu2tn+msCoJ/xn6MPZa7d+tMGu5OSSMK/7IFogbG5jgEBQJJ4Ldhqn/aexQVfp028rjVNYIK/PZu18okuHob/Oh7jXIGKnzCv2eDEKd/2/QHpqLA3ITp1Oe/DZ3IB4KffHT3owd4G6qPQUE0UHHHYr7bIwL7bsI7Xtwst2+OW2odgzQlqggXJtvXoUg+sCFhfnk+K4/zjMKYvP5M68tmwNkFPfgxFsQxKbs1CSYTHs89Hw4VDdrh18qWMZB8MsqIm+gmHfYbli81MCUKIKpcRuuavURfLtj+MAWW+d82Tad+P8LufZiufSFSrMAAAAASUVORK5CYII=) no-repeat;\n background-size: 100% 100%;\n animation: ark-around linear 2s infinite; }\n .ark-headmap-loading .ark-loading-box .ark-loading-text, .ark-headmap-nodata .ark-loading-box .ark-loading-text {\n padding-top: 65px;\n color: #fff;\n font-size: 14px; }\n .ark-headmap-loading .ark-nodata-box, .ark-headmap-nodata .ark-nodata-box {\n width: 280px;\n height: 200px;\n margin: 0 auto;\n top: 50%;\n margin-top: -100px;\n position: relative; }\n .ark-headmap-loading .ark-nodata-box .ark-nodata-img, .ark-headmap-nodata .ark-nodata-box .ark-nodata-img {\n width: 110px;\n height: 72px;\n margin: 0 auto;\n top: 32px;\n position: relative;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABICAYAAAAXrsDQAAAFu0lEQVR42u2dXWgcVRTHo4IP6oM+iGC0rRalKoo09UHFvgiKiIgPYqX6oCL4IErrmw/2pfWl9UGwIJiIgqJVm1oFsQht+pHZzSaZOx872bl3dvYr2c2mNgnWoFJr13uStJu5u7M7s7szO82egT8M87m5vznnnnvumUlfHy5X93JGNrdJxMyPyvTiqGxWUK2IXoQ2hLYME9p/2PCdEbRlKPBWLA0bvMPw8oGDQ/cYjNsMARw2dBBCcAgOwSE4VDTAFQq/347qnBAcgkNwCA6F4BAcgkNwKASH4BAcgkNwCA6F4AJSJrO4MU6sTyRCyyBYh20ILuICUGLyF7YhuIgLrKy2rICWERyC611wx09rA18cOXVkaHikDIJ12IauMsLgANDg4ZGFwR9OVBzi2zoBD4OTgATWVQNtVbAPhwMRBQeu0Q0c7ENwCA7BoatEcIEHJwjuKh0OhK2EZr8WI+y35aEHoTbXj3FiPo8D8IjKsGbvl2Q26f4SCD1kGGdvQnARkl1a2CARU/LwIsi3CC5KiWyVfey5wlmlOxBcM0uwz94zplkfSQrTuUUsLYuvwzbY14l7aKn8gCTTvxxuUaGnNFbYLhu5Z7iLtASXmTGMyvUIzkUThvWiJJvTrn0O3wfHtHufmEIPCddeLBTmNl/eT1K5x/i9Lqw9hp+zG8G5QSP0UvO3RumlduDJhv0kv4bjFewJzdpdB+6g8LbqvKblb1nX4L4/ltg5NHyyCIJ1L+6xkaXVs7xW3SYHMOK4HqHmzMz8HeJxVn72Ae5O/xCs7sC6BgfAqimwk8Vmx0P/5fd1KDjHt7UlszvE60zqmVdcf5fO9gqQ/4mR7CYEd9kKFJb0/aI9D1j8/Kbp6XP94n34oPt0o3NyufJd3K3OCC7za3SVVfe11MIXEpZ8ZUdU+12xr1RShaean5d+RzwvrqUHMDgJARzLz93NG7wo9FeHfViq7nSZ5nEEt+Iq9SBdZUK1PhT7qqQ9+8jaYyY1eyfABcG643wl/VLNbyDs2a6A61Z5QNjByUp06LTouGodrFOgVFzjDmv65RgxTwjwk5VK5brQwXWrICfs4UBcYZ8LLnaB0tKWelM6a+Vl/Bcj9M3QwXWrBC7MAThkQMQvMI2p1h63ubhG4FYfgm+E40qqWr6xp8EFkfLi1nXMeQ2Wd+sOvIBTp3Jba3KcMv2gZ12lS5I52U6SeTKZeU78+yZ09laj2e9m4OrOKhDzz7ieua0ng5MgxPsf1elNmNysbMELuJQ9cy/ff07wBJ/ifFwHNK5n3qhJbU3lXugEuOUoWKXv13ysVKNbEFwbKhbn7xQH2zyo+NVLoZBXcKv3SAvnHEVwbVmbJViD+a9KC090EpybVY9qbDuCa0HQ/0gKPe8MuOiXXkvz/IBbjcwTQlSe4IPyaxCc34BEpQfFfKZuTj8UFLh6kWvT+hQEV3eMdcFpbWy/j3Ftw5RXgzKIn33VpyA4MfxnR2uTCdU6kqbW0yDJ3Cw7U6c+ZReC815H4kiXJZT0e6HNbshsSKxPISR7swu4VNlgMw8jOGg4c9xLHUlQWp6BIM6giMPb7/Z/B76DmohehzapZ2vmyviQ4FXf12nRVVYH5dY+cc5vdCqzsRacQvv5AXMAr1ctb3l2mtCc0LedaTHp3lJw0miWfZSYX9W3Og4PLA/cJn4I+0odydPdAOdW1xJTra19uFQXGOjyh5YJ0dxwyy63TVfpVknmORXWK8uYZj3arI4kCn0uzJq7Rpi9uEiK9bpQRvBLdKJc50sjY7q9DYmtLlDv4XST7KcIfRnJck7gWpuR2BVw5uPinNi4ln47m53d1C1gjJXui6vWAXF2YqJUugGJVYOTa/mTbUQ+2iX0M6QlBii874AnOrrQzPMThr0BSdULUmT2Mn+qFyMILi9p9oNIqGGESfvBJUFjdfc/WdK/eUQ5xS1tryxbtyKZdbL8D1VmQJH/LyQBAAAAAElFTkSuQmCC) no-repeat;\n background-size: 100% 100%; }\n .ark-headmap-loading .ark-nodata-box .ark-nodata-text, .ark-headmap-nodata .ark-nodata-box .ark-nodata-text {\n padding-top: 65px;\n color: #fff;\n font-size: 14px; }\n\n.ark-headmap-nodata {\n background-color: rgba(0, 0, 0, 0.8); }\n\n@keyframes ark-around {\n 0% {\n -webkit-transform: rotate(0deg);\n -ms-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n transform: rotate(360deg); } }\n"; - styleInject(css_248z$1); - - var html = "\n
\n
\n
\u751F\u6210\u70ED\u56FE\u4E2D\u2026
\n
\n"; - function loading () { - createElement('div', { - id: 'arkHeadmapLoading', - class: 'ark-headmap-loading', - content: html - }, document.getElementById('arkHeadmapBody')); - } - // 显示或隐藏 - function loadingDisply() { - var loading = document.getElementById('arkHeadmapLoading'); - loading.style.display = heatConfig.loading ? 'block' : 'none'; - } - - var html$1 = "\n
\n
\n
\n
\n"; - function tips () { - createElement('div', { - id: 'arkHeadmapNodata', - class: 'ark-headmap-nodata', - content: html$1 - }, document.getElementById('arkHeadmapBody')); - } - // 显示或隐藏 - function nodataDisply(nodataText) { - var nodata = document.getElementById('arkHeadmapNodata'); - nodata.style.display = heatConfig.nodata ? 'block' : 'none'; - setNodataText(nodataText); - } - // 设置文案 - function setNodataText(text) { - document.getElementById('arkHeadmapNodata').querySelector('.ark-nodata-text').innerHTML = text || ''; - } - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var css_248z$2 = ".ark-heat-click-element {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n width: 100%;\n background-color: #ff0000;\n color: #fff;\n text-align: center;\n font-size: 12px;\n z-index: 10000;\n line-height: 22px; }\n .ark-heat-click-element .ark-heat-click-element-text {\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n position: absolute;\n width: 100%;\n top: 50%;\n margin-top: -11px;\n text-align: center; }\n .ark-heat-click-element:hover .ark-heat-click-element-tips {\n display: block; }\n .ark-heat-click-element .ark-heat-click-element-tips {\n position: absolute;\n background-color: #252d39;\n font-size: 12px;\n display: none;\n top: 100%;\n top: calc(100% + 5px);\n font-size: 14px;\n padding: 10px 0;\n border-radius: 4px;\n left: 50%;\n transform: translate(-50%, 0);\n white-space: nowrap; }\n .ark-heat-click-element .ark-heat-click-element-tips::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 7px 5px;\n border-bottom-color: #252d39;\n margin-left: -7px; }\n .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent {\n display: inline-block;\n text-align: right;\n padding: 0 10px; }\n .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num label, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent label {\n display: block;\n color: #9cacbf; }\n\n.ark-headmap-body-element-none .ark-heat-click-element {\n display: none; }\n"; - styleInject(css_248z$2); - - var css_248z$3 = ".ark-heatmap-head {\n position: fixed;\n left: 0;\n top: 0;\n background-color: rgba(0, 0, 0, 0.8);\n z-index: 10001;\n width: 100%;\n height: 64px;\n font-size: 16px;\n color: #9cacbf;\n transition: all 0.3s; }\n .ark-heatmap-head .ark-icon {\n display: inline-block;\n background-size: 100% 100%;\n width: 14px;\n height: 14px;\n margin-right: 10px; }\n .ark-heatmap-head .ark-icon.ark-icon-point {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQFJREFUOBGlUjEKwlAMTVR0cRGsQ1HP4QFcPIfgZl28gINDi4t2EzyHV/AcrXQRdNBFUWPTNiWUFsV+KC8vfXk/PwSg5MFf68110H/cnzskHBDSod6ojYOZ6VXEoOP4i7btnRklp5GLgWBIQE3GiIeC1OBNNA15K0FdG8V8s04KTw0qiG4ouCSotVHMbeuk8NIzyDUwVv6IXrDlG7EKk9O8t9e36zh9gk7GxdQFoK4Y6f86zjXQgm9xrgG3HTZ/5C+Oi21yZ5CVFy0R66IODMdbGrZ/ZcwWMy9aIv4XP4HQijcMLU5mjyyN5DVPZkAuAt4AaSMijbI0ktO89AzE9G/8AFToh10DAaI4AAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-ele {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQZJREFUOBGtUsEOwUAQnZn4AKTc9A8dERJt1IkmDuoLy0ka9QW7ZpZlrUUqNml23ryZ2bdvC/CP1V8dsmhd1lFezkPzJC98f71f+DxKQkjQ0PbJAK6rSdx18y0DEDY8ICPE7DgepG6BxHKy0jpBotzn7jhalfoOAsE7ngK1H1O+H9crfGx5kEaFumIFeshR2kgBG4hAkMiIJz+MLPYg9ExSLHk53T6z60ezZ0Q4V+O4IwOMGh5urkCaCmBS5FlCdvux3BnX1gS4FUVflysxVOzyLyb28sNUmux9/QE2b3fjgVvE00+MO24uGN/8ePkPCGinUA3Zk001ipd+syjUSo3Yj8LnfsIXR3J0GEi1vfgAAAAASUVORK5CYII=) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-dep {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAA10lEQVQ4y63SsU3DQBjF8Z9RBqBxaYkN7JoGMwEMgBRGSOWatK7cUgEbsEGSDZKGOpJLN9ngaA5EEfsima+6+77TvXf/e1kIwZy6MrMWkLf9HuXImcPQFFXKQTkhUiYdpCpv+7OghqbIsrkQFxeoV+hw96f9gdXQFKcshDAG8YBnbOP+HV+4xTLO6ymIJV7iusYer/HC+zhfpXLwEJVPeMMa3dAUW+xQT0LM2/4zqt/gMbKocY0N1ikHP084osJT5LKJDLoxiL/pu/QXwrmQzMrBWPr+PYnfX8xTYCBLOCIAAAAASUVORK5CYII=) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-element {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMlJREFUOBFjYBhowAhywP///9uBlD4QhzAyMn4D8s2AbGEgxgdeAdWeZQQqBhnyEohFgdgAKHgRKHYKyJYAYnzgPlCtPVgBUIMhEPvjU01bOaDtLEDMT44tsEA8B9SsDsQaQH89BhrWBGSLETDwCVBtCwtU0T8g/R+KQUJ/oBjExgVAaiAAaCMzEPPC+PSngbabAHEwOTbDEtIroGYRIDYEBswFoGGgQCUmIVmzADUA1f+fAdQASso3gRgEUoFYCMzCTbzGLUVPGQAuSE4Qo6rhyQAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-content {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALRJREFUOBFjYKAQMML0////XxfI9gdiFpgYDvoPUHwTIyPjJRR5oAE3gZhY8ACmmQnGANLXkNiEmBcwFACt5gTiHUQ44TRQDS+GASABoAQbEK/HY8hVoJwwVs0wQaACFiBeisWQe0AxKZg6vDRQIRMQL0Ay5BWQrYRXE7okUIMPkgEH0OVhfORYgImRRA9uA44B/XKXkH9wegGY1t8BNTsD8WMg/k/IIJzyoOgDYk+cCiiVAABBtddgMn4BogAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-set {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOBG1kz9LglEUh71WaGM55OrSB3DtE1RLFg3qUpOOgbhE3yHdCmqJPkIE0WpETurWpksQbTWEUb09v/vea68IKoIHHs655/zuee+/NxabhwVBsAJd8NYjWJ34LUSLEuE33cwivuDibVezmpFmiHLwDQ/wBG9eRPwKTVDtB/Z8Le66LuPrcAsvsAA58LZLYEC1G6jRRHNCY1CBD0hHcgeMHx2HkfwauXeoKmdXgE9CAnZAZ5DHXUIH2nBBroCXSeP1NqEJBk5BloI7uA6rtuEV43vQ7cjqoC0NVuC1s3m6HcMXlNUBnwed9jmcudhugbgEfTgZfI3BzIdo90EDXckztKAPGTgyxjTwWtEGrgY9WIIsrFP/xIeGSA9Jy570kH7R7Pt5Q57CuKe8JTGa/wc0NDsyQKTr6oK36X6mSI+pwz+2s2sE4j6K/AAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-refresh {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQ1JREFUOBG1ks8KAVEUxmckFijkAWztZqMsLJQsPIc8hLLyIKws5Dk8AClZsLFkIRZIGb8zXN07l/wpt36dc77vu3eaO+M4/1y+76cg8dUz2BCHDqxgDXNYQuvtQYQKMIMu5NUG+iR4an5aCcRgAo2ngbuIX4G0lUFsw9AyNAE/BzvYQlWzHAdhCjVDDA34JRjACDKGjXCwRCNxG8ikYaOsiGqoe7ho86vWxXh82uAATkwijqFPX361864XqQsjwya5WbkYuaCcYYYG/CG0Q3JwifJuFcvQBPwGyKeOabLdEvBAXitY9HmQn0t+soLSpUb1Qevr9E3CZ2oWjtADz3XdE/WzxQEJSH2W/jF1BQYvzfgwrEoEAAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-help {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAWdJREFUOBGNk79Kw1AUhxuX0qGLjo5SXEyXgiK1dFBcXNRdV7fiWwgurVudVPoAxReQPIOTUAc76SAUg7goxO8XcpPjjUovfLnn/M6f5ObeW6l4I0mSEPpwD3GGbGmhl164BKswhE8YwSGo2RrswxUoppxqUYklASJ4hM6PoHGItWECyi2a4KiriusuH3s90y+ZN41ex1fuMNUwmqBPy9+M3YUPuIFzeIdd06SDr5ow4DEgsBgEwbFJuMWeovWkkXPG1MTfk6+BNmJ6XeCxA2Ow4w7nwggz7C/jy1TNtjppq/7cHmIteIN8CapWDcT/NiBhGV7gVEV2oKUNtIQpNGzQ2CfYEWvXf/LHCsKT+4lLJB35GbxlFS0m9vxL7BptpiWUttElE3uALee7Ga0N6TamGk7pICmAvgE1V5hpOkgT1eQ6zrxHWQdIpzBSTd4g6+xfpgOS9KeFbF0wfXb5MtlOJKhg7uv8DahvoK6C+lwsAAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-down {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALpJREFUOBFjYBi+4P///1xAvAGIY0n2JVCTIBAfBeJNQPwEiIuINgSoWBqIrwDxJCBmAmI5IL4GxB0EDQEqUgPi+0BciawYyAe56BAQzwViZmQ5OBsoYQLEz4A4ESQIpFHCAMhnB+JVQAwKFw64RhgDKukN1Yw1DIBqGIG4D4jDYfowaKAkLAwmA9lkhcEDoMYqZJOBfKLD4DlQcRKyZhgbKE4wDHYBFfnCNGCjgfK4wwAoyYRN0+AXAwDWDeuTwsPrDwAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-crowd {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAATtJREFUOBHVUbFKA0EQnd0cKCh+gaKVX5BKbSwsRBIJyGGpgViJiLGxS2Vjgm0IKFHs0iWCoHX+wyJ/kEbU2+fMrnts7oK2OrA3b2bnzc2bJfr3prIKStX6NkAdyStFR4Pb1lO2JoyjMBBsycCixaSk0ZLg8kF9S3y/23oR70178JMvVc9PDeFZjuCwNtdAxubZR3Is5moYFD0pxJLLSfjWbMf2pCii6+ST1iUuMPZ58ekSK7Wz1eRDnYCwo7S+k0sYcwjSx4/d5kDiaWYbsK4YMPcEmkmLWEKB1B7rXuPNxtzoUmmscE3M/+3NLs+3e43Gu5MANCfI3EVrvW9McsGvsuuamgcyNAdWwbNtvL2ONzlfsUsEMKFZCP2bqyGTy45svwuO7DIs1TbOvUJAEJjuKJP/7W5K+Z9NfQHcMWh6c1UmgAAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-heatmap-switch {\n display: inline-block;\n width: 36px;\n height: 18px;\n border-radius: 9px;\n position: relative;\n background-color: #4c6072;\n cursor: pointer;\n vertical-align: sub;\n margin-right: 5px; }\n .ark-heatmap-head .ark-heatmap-switch.ark-switch-act {\n background-color: #0095e3; }\n .ark-heatmap-head .ark-heatmap-switch.ark-switch-act::before {\n left: 20px; }\n .ark-heatmap-head .ark-heatmap-switch::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n display: inline-block;\n border-radius: 20px;\n background-color: #fff;\n z-index: 20;\n -webkit-transition: all 0.5s;\n transition: all 0.5s; }\n .ark-heatmap-head .ark-head-hide {\n display: none;\n position: absolute;\n width: 64px;\n height: 32px;\n line-height: 32px;\n right: 56px;\n top: 64px;\n background-color: rgba(20, 137, 226, 0.8);\n text-align: center;\n cursor: pointer; }\n .ark-heatmap-head .ark-head-hide i {\n cursor: pointer;\n margin-right: 0;\n transform: rotate(180deg); }\n\n.ark-heatmap-head-menu {\n float: left;\n margin-left: 20px; }\n\n.ark-heatmap-head-menu-item {\n float: left;\n line-height: 64px;\n text-align: center;\n margin-right: 10px;\n cursor: pointer;\n position: relative; }\n .ark-heatmap-head-menu-item:hover, .ark-heatmap-head-menu-item.ark-active {\n color: #1489e2; }\n .ark-heatmap-head-menu-item:hover::after, .ark-heatmap-head-menu-item.ark-active::after {\n content: '';\n height: 2px;\n position: absolute;\n left: 0;\n bottom: 0;\n background-color: #1489e2;\n width: 100%; }\n @media (max-width: 880px) {\n .ark-heatmap-head-menu-item i {\n margin-left: 10px; }\n .ark-heatmap-head-menu-item span {\n display: none; } }\n\n.ark-heatmap-head-handle {\n float: right;\n margin-right: 20px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item {\n float: left;\n padding: 0 10px;\n margin-right: 10px;\n position: relative;\n line-height: 64px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-handle-hover {\n color: #fff; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-tips {\n display: inline-block; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-handle-hover {\n cursor: pointer; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i {\n cursor: pointer;\n width: 16px;\n height: 16px;\n float: left;\n margin-top: 23px;\n opacity: .8; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i:hover {\n opacity: 1; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box .ark-pop-tips {\n top: 50px;\n left: -5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips {\n display: none;\n position: absolute;\n background-color: #fff;\n padding: 10px;\n box-shadow: 2px 0px 4px #252d3933;\n border: 1px solid #D8E0E9;\n border-radius: 4px;\n top: 64px;\n left: -100px;\n line-height: 12px;\n font-size: 12px;\n color: #333; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box::after, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 7px 5px;\n border-bottom-color: #fff;\n margin-left: -7px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box {\n padding: 20px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list {\n width: 500px;\n left: -200px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-hd {\n font-size: 16px;\n color: #252d39;\n padding-bottom: 5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: center; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd td {\n height: 40px;\n line-height: 40px;\n font-size: 14px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd thead td {\n border-bottom: 2px solid #e4eaf1; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody {\n max-height: 400px;\n overflow-y: auto; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody td {\n border-bottom: 1px solid #e4eaf1;\n color: #4c6072; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody .ark-element-content {\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding: 0 5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition {\n width: 300px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-title {\n color: #6d859e;\n font-size: 13px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd {\n padding: 17px 0; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd i {\n margin-right: 5px;\n vertical-align: bottom; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs {\n position: relative;\n margin-top: 20px;\n padding-top: 10px;\n padding-left: 20px;\n border-left: solid #e4eaf1 1px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-item {\n padding-bottom: 15px;\n color: #354359;\n font-size: 12px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-relation {\n position: absolute;\n width: 20px;\n height: 20px;\n border: solid 1px #c5ced8;\n border-radius: 10px;\n font-size: 12px;\n color: #9cacbf;\n text-align: center;\n line-height: 20px;\n left: -10px;\n top: 50%;\n margin-top: -10px;\n background-color: #fff; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set {\n width: 280px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item {\n position: relative; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-name {\n width: 120px;\n font-size: 14px;\n position: absolute; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content {\n padding-left: 120px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box {\n position: relative;\n height: 4px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-left-track {\n position: absolute;\n background-color: #9cacbf;\n height: 100%;\n left: 0;\n width: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-left-trigger {\n left: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-middle-track {\n position: absolute;\n height: 100%;\n left: 0px;\n background: linear-gradient(to right, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n right: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-right-track {\n position: absolute;\n height: 100%;\n right: 0;\n width: 0px;\n background-color: #fb0000; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-right-trigger {\n left: calc(100% - 10px); }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-trigger {\n z-index: 2;\n position: absolute;\n cursor: pointer;\n width: 10px;\n height: 10px;\n top: -4px;\n background-color: #e4eaf1;\n border: solid 1px #9cacbf;\n border-radius: 4px;\n left: 30%; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box {\n position: relative;\n background-color: #9cacbf;\n border-radius: 2px;\n height: 4px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box .ark-slider-rate {\n position: absolute;\n background-color: #0095e3;\n left: 0;\n height: 100%;\n width: 30%;\n border-radius: 2px; }\n @media (max-width: 880px) {\n .ark-heatmap-head-handle {\n margin-right: 0; }\n .ark-heatmap-head-handle #arkHeatmapSwitch, .ark-heatmap-head-handle #arkHotEleList, .ark-heatmap-head-handle #arkHeatDisplayConfig, .ark-heatmap-head-handle #arkConditionList {\n display: none !important; } }\n"; - styleInject(css_248z$3); - - var html$2 = "\n
\n
\n \n \u70B9\u51FB\u4F4D\u7F6E\u70ED\u56FE\n
\n
\n \n \u70B9\u51FB\u5143\u7D20\u70ED\u56FE\n
\n
\n \n \u6D4F\u89C8\u6DF1\u5EA6\u7EBF\n
\n
\n\n
\n
\n
\u70ED\u95E8\u5143\u7D20\u5217\u8868
\n
\n
\u70ED\u95E8\u70B9\u51FB\u5143\u7D20
\n \n \n \n \n \n \n \n \n \n \n \n\n \n
\u5143\u7D20\u5185\u5BB9\u5143\u7D20\u7C7B\u578B\u7528\u6237\u6570\u70B9\u51FB\u6B21\u6570\u70B9\u51FB\u6B21\u6570\u5360\u6BD4
\n
\n
\n
\n
\u8FC7\u6EE4\u6761\u4EF6
\n
\n
\u5206\u6790\u7528\u6237\u7FA4
\n
\n \n
\n
\u8FC7\u6EE4\u6761\u4EF6
\n
\n
\n
\n
\n
\n
\u663E\u793A\u8BBE\u7F6E
\n
\n
\n
\u663E\u793A\u6D4F\u89C8\u6DF1\u5EA6\u7EBF
\n
\n \n
\n
\n
\n
\u8C03\u6574\u989C\u8272\u8303\u56F4
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\u8C03\u6574\u80CC\u666F\u900F\u660E\u5EA6
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \u70ED\u56FE\u663E\u793A\n
\n
\n
\n \n
\u5237\u65B0
\n
\n
\n
\n
\n \n
\u5E2E\u52A9
\n
\n
\n
\n
\n \n
\u6536\u8D77
\n
\n
\n
\n \n \n \n"; - function nav () { - createElement('div', { - id: 'arkHeatmapHead', - class: 'ark-heatmap-head', - content: html$2 - }, document.getElementById('arkHeadmapBody')); - setSelected(); - heatSwitch(); - toolDisplay(); - opacitySlider(); - renderCondition(); - colorSlider(); - } - var eleMap = { - location: 'arkNavLocation', - element: 'arkNavElement', - lines: 'arkNavLines' - }; - // 清空当前选中的菜单 - function emptySelected() { - var ele = document.getElementById(eleMap[heatConfig.heatMapType]); - ele.className = 'ark-heatmap-head-menu-item'; - } - // 选中当前type - function setSelected() { - var ele = document.getElementById(eleMap[heatConfig.heatMapType]); - ele.className = 'ark-heatmap-head-menu-item ark-active'; - } - // 热图开关 - function heatSwitch() { - var state = heatConfig.heatMapShow; - document.getElementById('arkHeatmapSwitch').querySelector('.ark-heatmap-switch').className = state ? 'ark-heatmap-switch ark-switch-act' : 'ark-heatmap-switch'; - } - function displayDepth() { - var state = displayConfig.lineShow; - document.getElementById('arkDisplayDepth').className = state ? 'ark-heatmap-switch ark-switch-act' : 'ark-heatmap-switch'; - } - // nav open or hide - function navOpen() { - document.getElementById('arkHeatmapHead').style.top = heatConfig.isOpen ? '0px' : '-64px'; - document.querySelector('.ark-head-hide').style.display = heatConfig.isOpen ? 'none' : 'block'; - } - // 工具栏显示与隐藏 - function toolDisplay() { - var element = document.getElementById('arkHotEleList'); - element.style.display = heatConfig.heatMapType === 'element' ? 'block' : 'none'; - var arkHeatmapSwitch = document.getElementById('arkHeatmapSwitch'); - var arkHeatDisplayConfig = document.getElementById('arkHeatDisplayConfig'); - if (heatConfig.heatMapType !== 'lines') { - arkHeatmapSwitch.style.display = 'block'; - arkHeatDisplayConfig.style.display = 'block'; - } else { - arkHeatmapSwitch.style.display = 'none'; - arkHeatDisplayConfig.style.display = 'none'; - } - if (heatConfig.heatMapType === 'location') { - document.getElementById('arkSetColorRange').style.display = 'block'; - document.getElementById('arkSetOpacity').style.display = 'block'; - } else { - document.getElementById('arkSetColorRange').style.display = 'none'; - document.getElementById('arkSetOpacity').style.display = 'none'; - } - } - // 条件列表渲染 - function renderCondition() { - document.querySelector('.ark-filter-condition-crowd span').innerHTML = arkcontentText.crowds; - // ark-filter-condition-attrs - var items = ''; - var conditions = arkcontentText.filter.conditions; - if (conditions.length) { - conditions.forEach(function (o) { - items += "
" + o + "
"; - }); - if (conditions.length > 1) { - items += "" + arkcontentText.filter.relation + ""; - } - } else { - items = '
'; - } - document.querySelector('.ark-filter-condition-attrs').innerHTML = items; - } - function renderElementList(elementList) { - var arkElementList = document.getElementById('arkElementList'); - if (arkElementList) { - var trs_1 = ''; - if (elementList && elementList.length) { - elementList.forEach(function (o) { - trs_1 += "\n \n
" + (o.content || '-') + "
\n " + o.type + "\n " + o.uv + "\n " + o.clickNum + "\n " + (o.clickNumPercent * 100).toFixed(2) + "%\n \n "; - }); - } - arkElementList.innerHTML = trs_1; - } - } - // 滑块 - function slider(el, options) { - this.downX = null; - this.moveX = null; - this.max = options.max; - this.min = options.min; - var self = this; - el.addEventListener('mousedown', function (e) { - self.downX = e.clientX; - var width = options.trackEl.offsetWidth - 10; - var left = el.offsetLeft; - function move(event) { - if (self.downX) { - self.moveX = left + (event.clientX - self.downX); - var max = self.max || width; - var min = self.min || 0; - if (self.moveX > max) { - self.moveX = max; - } - if (self.moveX < min) { - self.moveX = min; - } - options && options.onMove(self.moveX, width); - el.style.left = self.moveX + 'px'; - } - } - function up() { - self.downX = null; - window.removeEventListener('mousemove', move); - window.removeEventListener('mouseup', up); - options && options.onUp(self.moveX, width); - } - window.addEventListener('mousemove', move); - window.addEventListener('mouseup', up); - }); - } - // 透明度滑块 - function opacitySlider() { - var arkOpacitySlider = document.getElementById('arkOpacitySlider'); - new slider(arkOpacitySlider.querySelector('.ark-slider-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v) { - arkOpacitySlider.querySelector('.ark-slider-rate').style.width = v + 'px'; - }, - onUp: function (v, width) { - displayConfig.backgroundTransparent = v / width; - setHeatMapConfig(); - } - }); - } - // 颜色滑块 - function colorSlider() { - var arkOpacitySlider = document.getElementById('arkColors'); - var leftSlider = new slider(arkOpacitySlider.querySelector('.ark-left-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v) { - rightSlider.min = v + 10; - arkOpacitySlider.querySelector('.ark-color-middle-track').style.left = v + 'px'; - arkOpacitySlider.querySelector('.ark-color-left-track').style.width = v + 'px'; - }, - onUp: function (v, width) { - displayConfig.min = v / width * 100; - setHeatMapConfig(); - } - }); - var rightSlider = new slider(arkOpacitySlider.querySelector('.ark-right-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v, width) { - leftSlider.max = v - 10; - var w = width - v; - arkOpacitySlider.querySelector('.ark-color-middle-track').style.right = w + 'px'; - arkOpacitySlider.querySelector('.ark-color-right-track').style.width = w + 'px'; - }, - onUp: function (v, width) { - displayConfig.max = v / width * 100; - setHeatMapConfig(); - } - }); - } - - var htmlTpl = function (clickNum, clickNumPercent) { - var percent = (clickNumPercent * 100).toFixed(2); - return "\n " + percent + "%\n \n \n \n " + clickNum + "\n \n \n \n " + percent + "%\n \n \n "; - }; - var max = 0; - var colors = ['63,81,181', '33,150,243', '0,188,212', '87,201,92', '205,220,57', '255,235,59', '255,152,0', '255,87,34', '229,57,53', '183,28,28']; - function renderElement(data) { - emptyElement(); - var list = data.detail; - var elementList = []; - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var ele = getPathEle(item.path); - var targetEle = null; - if (ele) { - if (item.clickNum > max) { - max = item.clickNum; - } - var colorIndex = Math.ceil(item.clickNum / max * 10) - 1; - var rgba = 'rgba(' + colors[colorIndex] + ',.9)'; - // 改变目标元素 - if (['input', 'img', 'select', 'textarea', 'svg'].indexOf(ele.tagName.toLowerCase()) > -1) { - // 备份目标元素 - targetEle = ele; - ele = ele.parentNode; - } - var position = eleCss(ele, 'position'); - if (['relative', 'fixed', 'absolute', 'sticky'].indexOf(position) === -1) { - ele.style.position = 'relative'; - } - var positionStyle = {}; - if (targetEle) { - positionStyle = { - left: targetEle.offsetLeft + 'px', - top: targetEle.offsetTop + 'px', - width: targetEle.offsetWidth + 'px', - height: targetEle.offsetHeight + 'px' - }; - } - createElement('span', { - class: 'ark-heat-click-element', - content: htmlTpl(item.clickNum, item.clickNumPercent), - style: __assign({ backgroundColor: rgba }, positionStyle) - }, ele); - elementList.push(item); - } - } - // 渲染点击元素列表 - renderElementList(elementList); - } - // 点击元素显示与隐藏 - function elementDisplay() { - var body = document.querySelector('body'); - var className = body.className; - if (heatConfig.heatMapShow && heatConfig.heatMapType === 'element') { - body.className = className.replace(/ ark-headmap-body-element-none/g, ''); - } else { - if (className.indexOf('ark-headmap-body-element-none') === -1) { - body.className = className + ' ark-headmap-body-element-none'; - } - } - } - function emptyElement() { - document.querySelectorAll('.ark-heat-click-element').forEach(function (o) { - o.remove(); - }); - } - - var renderState = { - location: false, - element: false, - lines: false - }; - function loading$1(v) { - heatConfig.loading = v; - loadingDisply(); - } - function nodata(v, nodataText) { - heatConfig.nodata = v; - nodataDisply(nodataText); - } - var nodataTextMap = { - 0: '暂无数据
小舟建议您选择其他时间范围或过滤条件重试', - 1: '查询失败,请联系管理员' - }; - var heatMapData = null; - // 获取热图数据 - function getHeatmapData(fn) { - nodata(false); - if (renderState[heatConfig.heatMapType] && arkcontent && arkcontent.useCache) { - return; - } - var url = 'ark/sdk/heatmap/click/analysis'; - if (heatConfig.heatMapType === 'element') { - emptyElement(); - url = 'ark/sdk/heatmap/element/analysis'; - } else { - emptyHeatmap(); - } - loading$1(true); - ajax({ - url: globalWindow.AnalysysAgent.config.uploadURL + url, - method: 'post', - data: queryParameters(), - header: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - success: function (_a) { - var data = _a.data; - renderState[heatConfig.heatMapType] = false; - if (data.code === 0) { - var datas = data.datas; - if (datas && (datas.length && heatConfig.heatMapType === 'location' || datas.detail && datas.detail.length && heatConfig.heatMapType === 'element')) { - if (heatConfig.heatMapType === 'location') { - heatMapData = datas; - } - fn && fn(data); - renderState[heatConfig.heatMapType] = true; - } else { - nodata(true, nodataTextMap[0]); - } - } else { - nodata(true, data.msg || nodataTextMap[1]); - } - loading$1(false); - }, - error: function (e) { - loading$1(false); - nodata(true); - } - }); - } - var isTypeLines = function (fn) { - if (heatConfig.heatMapType === 'lines') { - fn && fn(); - } - }; - // 获取深度线 - function getLinesData(fn) { - nodata(false); - if (renderState.lines && arkcontent && arkcontent.useCache) { - return; - } - isTypeLines(function () { - loading$1(true); - }); - ajax({ - url: globalWindow.AnalysysAgent.config.uploadURL + 'ark/sdk/heatmap/scrollreach/analysis', - method: 'post', - data: queryParameters(), - header: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - success: function (_a) { - var data = _a.data; - renderState.lines = false; - if (data.code === 0) { - if (data.datas && data.datas.detail && data.datas.detail.length) { - fn && fn(data); - renderState.lines = true; - } else { - nodata(true, nodataTextMap[0]); - } - } else { - isTypeLines(function () { - nodata(true, data.msg || nodataTextMap[1]); - }); - } - isTypeLines(function () { - loading$1(false); - }); - }, - error: function () { - isTypeLines(function () { - loading$1(false); - nodata(true); - }); - } - }); - } - - var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var heatmap = createCommonjsModule(function (module) { - /* - * heatmap.js v2.0.5 | JavaScript Heatmap Library - * - * Copyright 2008-2016 Patrick Wied - All rights reserved. - * Dual licensed under MIT and Beerware license - * - * :: 2016-09-05 01:16 - */ - (function (name, context, factory) { - // Supports UMD. AMD, CommonJS/Node.js and browser context - if ( module.exports) { - module.exports = factory(); - } else { - context[name] = factory(); - } - })('h337', commonjsGlobal, function () { - // Heatmap Config stores default values and will be merged with instance config - var HeatmapConfig = { - defaultRadius: 40, - defaultRenderer: 'canvas2d', - defaultGradient: { 0.25: 'rgb(0,0,255)', 0.55: 'rgb(0,255,0)', 0.85: 'yellow', 1.0: 'rgb(255,0,0)' }, - defaultMaxOpacity: 1, - defaultMinOpacity: 0, - defaultBlur: 0.85, - defaultXField: 'x', - defaultYField: 'y', - defaultValueField: 'value', - plugins: {} - }; - var Store = function StoreClosure() { - var Store = function Store(config) { - this._coordinator = {}; - this._data = []; - this._radi = []; - this._min = 10; - this._max = 1; - this._xField = config.xField || config.defaultXField; - this._yField = config.yField || config.defaultYField; - this._valueField = config.valueField || config.defaultValueField; - - if (config.radius) { - this._cfgRadius = config.radius; - } - }; - - var defaultRadius = HeatmapConfig.defaultRadius; - - Store.prototype = { - // when forceRender = false -> called from setData, omits renderall event - _organiseData: function (dataPoint, forceRender) { - var x = dataPoint[this._xField]; - var y = dataPoint[this._yField]; - var radi = this._radi; - var store = this._data; - var max = this._max; - var min = this._min; - var value = dataPoint[this._valueField] || 1; - var radius = dataPoint.radius || this._cfgRadius || defaultRadius; - - if (!store[x]) { - store[x] = []; - radi[x] = []; - } - - if (!store[x][y]) { - store[x][y] = value; - radi[x][y] = radius; - } else { - store[x][y] += value; - } - var storedVal = store[x][y]; - - if (storedVal > max) { - if (!forceRender) { - this._max = storedVal; - } else { - this.setDataMax(storedVal); - } - return false; - } else if (storedVal < min) { - if (!forceRender) { - this._min = storedVal; - } else { - this.setDataMin(storedVal); - } - return false; - } else { - return { - x: x, - y: y, - value: value, - radius: radius, - min: min, - max: max - }; - } - }, - _unOrganizeData: function () { - var unorganizedData = []; - var data = this._data; - var radi = this._radi; - - for (var x in data) { - for (var y in data[x]) { - unorganizedData.push({ - x: x, - y: y, - radius: radi[x][y], - value: data[x][y] - }); - } - } - return { - min: this._min, - max: this._max, - data: unorganizedData - }; - }, - _onExtremaChange: function () { - this._coordinator.emit('extremachange', { - min: this._min, - max: this._max - }); - }, - addData: function () { - if (arguments[0].length > 0) { - var dataArr = arguments[0]; - var dataLen = dataArr.length; - while (dataLen--) { - this.addData.call(this, dataArr[dataLen]); - } - } else { - // add to store - var organisedEntry = this._organiseData(arguments[0], true); - if (organisedEntry) { - // if it's the first datapoint initialize the extremas with it - if (this._data.length === 0) { - this._min = this._max = organisedEntry.value; - } - this._coordinator.emit('renderpartial', { - min: this._min, - max: this._max, - data: [organisedEntry] - }); - } - } - return this; - }, - setData: function (data) { - var dataPoints = data.data; - var pointsLen = dataPoints.length; - - // reset data arrays - this._data = []; - this._radi = []; - - for (var i = 0; i < pointsLen; i++) { - this._organiseData(dataPoints[i], false); - } - this._max = data.max; - this._min = data.min || 0; - - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - removeData: function () { - // TODO: implement - }, - setDataMax: function (max) { - this._max = max; - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - setDataMin: function (min) { - this._min = min; - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - setCoordinator: function (coordinator) { - this._coordinator = coordinator; - }, - _getInternalData: function () { - return { - max: this._max, - min: this._min, - data: this._data, - radi: this._radi - }; - }, - getData: function () { - return this._unOrganizeData(); - } /*, - TODO: rethink. - getValueAt: function(point) { - var value; - var radius = 100; - var x = point.x; - var y = point.y; - var data = this._data; - if (data[x] && data[x][y]) { - return data[x][y]; - } else { - var values = []; - // radial search for datapoints based on default radius - for(var distance = 1; distance < radius; distance++) { - var neighbors = distance * 2 +1; - var startX = x - distance; - var startY = y - distance; - for(var i = 0; i < neighbors; i++) { - for (var o = 0; o < neighbors; o++) { - if ((i == 0 || i == neighbors-1) || (o == 0 || o == neighbors-1)) { - if (data[startY+i] && data[startY+i][startX+o]) { - values.push(data[startY+i][startX+o]); - } - } else { - continue; - } - } - } - } - if (values.length > 0) { - return Math.max.apply(Math, values); - } - } - return false; - } */ - }; - - return Store; - }(); - - var Canvas2dRenderer = function Canvas2dRendererClosure() { - var _getColorPalette = function (config) { - var gradientConfig = config.gradient || config.defaultGradient; - var paletteCanvas = document.createElement('canvas'); - var paletteCtx = paletteCanvas.getContext('2d'); - - paletteCanvas.width = 256; - paletteCanvas.height = 1; - - var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); - for (var key in gradientConfig) { - gradient.addColorStop(key, gradientConfig[key]); - } - - paletteCtx.fillStyle = gradient; - paletteCtx.fillRect(0, 0, 256, 1); - - return paletteCtx.getImageData(0, 0, 256, 1).data; - }; - - var _getPointTemplate = function (radius, blurFactor) { - var tplCanvas = document.createElement('canvas'); - var tplCtx = tplCanvas.getContext('2d'); - var x = radius; - var y = radius; - tplCanvas.width = tplCanvas.height = radius * 2; - - if (blurFactor == 1) { - tplCtx.beginPath(); - tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false); - tplCtx.fillStyle = 'rgba(0,0,0,1)'; - tplCtx.fill(); - } else { - var gradient = tplCtx.createRadialGradient(x, y, radius * blurFactor, x, y, radius); - gradient.addColorStop(0, 'rgba(0,0,0,1)'); - gradient.addColorStop(1, 'rgba(0,0,0,0)'); - tplCtx.fillStyle = gradient; - tplCtx.fillRect(0, 0, 2 * radius, 2 * radius); - } - - return tplCanvas; - }; - - var _prepareData = function (data) { - var renderData = []; - var min = data.min; - var max = data.max; - var radi = data.radi; - data = data.data; - - var xValues = Object.keys(data); - var xValuesLen = xValues.length; - - while (xValuesLen--) { - var xValue = xValues[xValuesLen]; - var yValues = Object.keys(data[xValue]); - var yValuesLen = yValues.length; - while (yValuesLen--) { - var yValue = yValues[yValuesLen]; - var value = data[xValue][yValue]; - var radius = radi[xValue][yValue]; - renderData.push({ - x: xValue, - y: yValue, - value: value, - radius: radius - }); - } - } - - return { - min: min, - max: max, - data: renderData - }; - }; - - function Canvas2dRenderer(config) { - var container = config.container; - var shadowCanvas = this.shadowCanvas = document.createElement('canvas'); - var canvas = this.canvas = config.canvas || document.createElement('canvas'); - this._renderBoundaries = [10000, 10000, 0, 0]; - - var computed = getComputedStyle(config.container) || {}; - - canvas.className = 'heatmap-canvas'; - - this._width = canvas.width = shadowCanvas.width = config.width || +computed.width.replace(/px/, ''); - this._height = canvas.height = shadowCanvas.height = config.height || +computed.height.replace(/px/, ''); - - this.shadowCtx = shadowCanvas.getContext('2d'); - this.ctx = canvas.getContext('2d'); - - // @TODO: - // conditional wrapper - - canvas.style.cssText = shadowCanvas.style.cssText = 'position:absolute;left:0;top:0;'; - - container.style.position = 'relative'; - container.appendChild(canvas); - - this._palette = _getColorPalette(config); - this._templates = {}; - - this._setStyles(config); - } - - Canvas2dRenderer.prototype = { - renderPartial: function (data) { - if (data.data.length > 0) { - this._drawAlpha(data); - this._colorize(); - } - }, - renderAll: function (data) { - // reset render boundaries - this._clear(); - if (data.data.length > 0) { - this._drawAlpha(_prepareData(data)); - this._colorize(); - } - }, - _updateGradient: function (config) { - this._palette = _getColorPalette(config); - }, - updateConfig: function (config) { - if (config.gradient) { - this._updateGradient(config); - } - this._setStyles(config); - }, - setDimensions: function (width, height) { - this._width = width; - this._height = height; - this.canvas.width = this.shadowCanvas.width = width; - this.canvas.height = this.shadowCanvas.height = height; - }, - _clear: function () { - this.shadowCtx.clearRect(0, 0, this._width, this._height); - this.ctx.clearRect(0, 0, this._width, this._height); - }, - _setStyles: function (config) { - this._blur = config.blur == 0 ? 0 : config.blur || config.defaultBlur; - - if (config.backgroundColor) { - this.canvas.style.backgroundColor = config.backgroundColor; - } - - this._width = this.canvas.width = this.shadowCanvas.width = config.width || this._width; - this._height = this.canvas.height = this.shadowCanvas.height = config.height || this._height; - - this._opacity = (config.opacity || 0) * 255; - this._maxOpacity = (config.maxOpacity || config.defaultMaxOpacity) * 255; - this._minOpacity = (config.minOpacity || config.defaultMinOpacity) * 255; - this._useGradientOpacity = !!config.useGradientOpacity; - }, - _drawAlpha: function (data) { - var min = this._min = data.min; - var max = this._max = data.max; - data = data.data || []; - var dataLen = data.length; - // on a point basis? - var blur = 1 - this._blur; - - while (dataLen--) { - var point = data[dataLen]; - - var x = point.x; - var y = point.y; - var radius = point.radius; - // if value is bigger than max - // use max as value - var value = Math.min(point.value, max); - var rectX = x - radius; - var rectY = y - radius; - var shadowCtx = this.shadowCtx; - - var tpl; - if (!this._templates[radius]) { - this._templates[radius] = tpl = _getPointTemplate(radius, blur); - } else { - tpl = this._templates[radius]; - } - // value from minimum / value range - // => [0, 1] - var templateAlpha = (value - min) / (max - min); - // this fixes #176: small values are not visible because globalAlpha < .01 cannot be read from imageData - shadowCtx.globalAlpha = templateAlpha < 0.01 ? 0.01 : templateAlpha; - - shadowCtx.drawImage(tpl, rectX, rectY); - - // update renderBoundaries - if (rectX < this._renderBoundaries[0]) { - this._renderBoundaries[0] = rectX; - } - if (rectY < this._renderBoundaries[1]) { - this._renderBoundaries[1] = rectY; - } - if (rectX + 2 * radius > this._renderBoundaries[2]) { - this._renderBoundaries[2] = rectX + 2 * radius; - } - if (rectY + 2 * radius > this._renderBoundaries[3]) { - this._renderBoundaries[3] = rectY + 2 * radius; - } - } - }, - _colorize: function () { - var x = this._renderBoundaries[0]; - var y = this._renderBoundaries[1]; - var width = this._renderBoundaries[2] - x; - var height = this._renderBoundaries[3] - y; - var maxWidth = this._width; - var maxHeight = this._height; - var opacity = this._opacity; - var maxOpacity = this._maxOpacity; - var minOpacity = this._minOpacity; - var useGradientOpacity = this._useGradientOpacity; - - if (x < 0) { - x = 0; - } - if (y < 0) { - y = 0; - } - if (x + width > maxWidth) { - width = maxWidth - x; - } - if (y + height > maxHeight) { - height = maxHeight - y; - } - - var img = this.shadowCtx.getImageData(x, y, width, height); - var imgData = img; - var len = imgData.data.length; - var palette = this._palette; - for (var i = 3; i < len; i += 4) { - var alpha = imgData.data[i]; - var offset = alpha * 4; - - if (!offset) { - continue; - } - var finalAlpha; - if (opacity > 0) { - finalAlpha = opacity; - } else { - if (alpha < maxOpacity) { - if (alpha < minOpacity) { - finalAlpha = minOpacity; - } else { - finalAlpha = alpha; - } - } else { - finalAlpha = maxOpacity; - } - } - - imgData.data[i - 3] = palette[offset]; - imgData.data[i - 2] = palette[offset + 1]; - imgData.data[i - 1] = palette[offset + 2]; - imgData.data[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha; - } - - // img.data = imgData; - this.ctx.putImageData(imgData, x, y); - - this._renderBoundaries = [1000, 1000, 0, 0]; - }, - getValueAt: function (point) { - var value; - var shadowCtx = this.shadowCtx; - var img = shadowCtx.getImageData(point.x, point.y, 1, 1); - var data = img.data[3]; - var max = this._max; - var min = this._min; - - value = Math.abs(max - min) * (data / 255) >> 0; - - return value; - }, - getDataURL: function () { - return this.canvas.toDataURL(); - } - }; - - return Canvas2dRenderer; - }(); - - var Renderer = function RendererClosure() { - var rendererFn = false; - - if (HeatmapConfig.defaultRenderer === 'canvas2d') { - rendererFn = Canvas2dRenderer; - } - - return rendererFn; - }(); - - var Util = { - merge: function () { - var merged = {}; - var argsLen = arguments.length; - for (var i = 0; i < argsLen; i++) { - var obj = arguments[i]; - for (var key in obj) { - merged[key] = obj[key]; - } - } - return merged; - } - // Heatmap Constructor - };var Heatmap = function HeatmapClosure() { - var Coordinator = function CoordinatorClosure() { - function Coordinator() { - this.cStore = {}; - } - - Coordinator.prototype = { - on: function (evtName, callback, scope) { - var cStore = this.cStore; - - if (!cStore[evtName]) { - cStore[evtName] = []; - } - cStore[evtName].push(function (data) { - return callback.call(scope, data); - }); - }, - emit: function (evtName, data) { - var cStore = this.cStore; - if (cStore[evtName]) { - var len = cStore[evtName].length; - for (var i = 0; i < len; i++) { - var callback = cStore[evtName][i]; - callback(data); - } - } - } - }; - - return Coordinator; - }(); - - var _connect = function (scope) { - var renderer = scope._renderer; - var coordinator = scope._coordinator; - var store = scope._store; - - coordinator.on('renderpartial', renderer.renderPartial, renderer); - coordinator.on('renderall', renderer.renderAll, renderer); - coordinator.on('extremachange', function (data) { - scope._config.onExtremaChange && scope._config.onExtremaChange({ - min: data.min, - max: data.max, - gradient: scope._config.gradient || scope._config.defaultGradient - }); - }); - store.setCoordinator(coordinator); - }; - - function Heatmap() { - var config = this._config = Util.merge(HeatmapConfig, arguments[0] || {}); - this._coordinator = new Coordinator(); - if (config.plugin) { - var pluginToLoad = config.plugin; - if (!HeatmapConfig.plugins[pluginToLoad]) { - throw new Error('Plugin \'' + pluginToLoad + '\' not found. Maybe it was not registered.'); - } else { - var plugin = HeatmapConfig.plugins[pluginToLoad]; - // set plugin renderer and store - this._renderer = new plugin.renderer(config); - this._store = new plugin.store(config); - } - } else { - this._renderer = new Renderer(config); - this._store = new Store(config); - } - _connect(this); - } - - // @TODO: - // add API documentation - Heatmap.prototype = { - addData: function () { - this._store.addData.apply(this._store, arguments); - return this; - }, - removeData: function () { - this._store.removeData && this._store.removeData.apply(this._store, arguments); - return this; - }, - setData: function () { - this._store.setData.apply(this._store, arguments); - return this; - }, - setDataMax: function () { - this._store.setDataMax.apply(this._store, arguments); - return this; - }, - setDataMin: function () { - this._store.setDataMin.apply(this._store, arguments); - return this; - }, - configure: function (config) { - this._config = Util.merge(this._config, config); - this._renderer.updateConfig(this._config); - this._coordinator.emit('renderall', this._store._getInternalData()); - return this; - }, - repaint: function () { - this._coordinator.emit('renderall', this._store._getInternalData()); - return this; - }, - getData: function () { - return this._store.getData(); - }, - getDataURL: function () { - return this._renderer.getDataURL(); - }, - getValueAt: function (point) { - if (this._store.getValueAt) { - return this._store.getValueAt(point); - } else if (this._renderer.getValueAt) { - return this._renderer.getValueAt(point); - } else { - return null; - } - } - }; - - return Heatmap; - }(); - - // core - var heatmapFactory = { - create: function (config) { - return new Heatmap(config); - }, - register: function (pluginKey, plugin) { - HeatmapConfig.plugins[pluginKey] = plugin; - } - }; - - return heatmapFactory; - }); - }); - - function ColorRangeMaker(option) { - var vRange = option.value[1] - option.value[0]; - if (option.color.length === 2) { - // 仅有两个颜色 - var rA = (option.color[1][0] - option.color[0][0]) / vRange; - var gA = (option.color[1][1] - option.color[0][1]) / vRange; - var bA = (option.color[1][2] - option.color[0][2]) / vRange; - this.option = { - vRange: vRange, - rA: rA, - gA: gA, - bA: bA, - option: option - }; - } else { - // 两个以上颜色 - var makers = []; - var vA = vRange / (option.color.length - 1); - for (var i = 1; i < option.color.length; i++) { - var maker = new ColorRangeMaker({ - color: [option.color[i - 1], option.color[i]], - value: [option.value[0] + vA * (i - 1), option.value[0] + vA * i] - }); - makers.push(maker); - } - this.option = { makers, vA, option }; - } - } - - ColorRangeMaker.prototype.make = function (value) { - var makers = this.option.makers; - var rA = this.option.rA; - var gA = this.option.gA; - var bA = this.option.bA; - var vA = this.option.vA; - var option = this.option.option; - if (value < option.value[0]) { - return option.color[0]; - } else if (value > option.value[option.value.length - 1]) { - return option.color[option.color.length - 1]; - } else { - if (option.color.length === 2) { - // 仅有两个颜色 - var color = option.color[0].map(a => a); - var vATmp = value - option.value[0]; - color[0] += parseInt(rA * vATmp); - color[1] += parseInt(gA * vATmp); - color[2] += parseInt(bA * vATmp); - return color; - } else { - for (var i = 1; i < option.color.length; i++) { - if (value <= option.value[0] + vA * i) { - return makers[i - 1].make(value); - } - } - } - } - }; - - function resetGradient(max, min) { - var colorRange = new ColorRangeMaker({ - color: [[48, 35, 174], [83, 160, 253], [180, 236, 81], [255, 163, 1], [251, 0, 0]], - value: [0, 100] - }); - var rangeArea = [0, 0.2, 0.41, 0.81, 1]; - var color = {}; - var DValue = max - min; - for (var i = 0; i < rangeArea.length; i++) { - var colorList = colorRange.make(min + rangeArea[i] * DValue); - var rgb = 'rgb(' + colorList.join(',') + ')'; - color[rangeArea[i]] = rgb; - } - return color; - } - - var html$3 = ""; - var heatmap$1 = null; - function heatmap$2 () { - createElement('div', { - id: 'arkHeatmapLocation', - class: 'ark-heatmap-location', - content: html$3 - }, document.getElementById('arkHeadmapBody')); - setHeatMapSize(); - } - // 设置热图容器大小 - function setHeatMapSize() { - var arkHeatmapLocation = document.getElementById('arkHeatmapLocation'); - var width = document.documentElement.scrollWidth; - var height = document.documentElement.scrollHeight; - arkHeatmapLocation.style.width = width + 'px'; - arkHeatmapLocation.style.height = height + 'px'; - var canvas = arkHeatmapLocation.querySelector('canvas'); - if (canvas) { - canvas.width = width; - canvas.height = height; - } - } - // 热图展示与隐藏 - function heatmapDisplay() { - document.getElementById('arkHeatmapLocation').style.display = heatConfig.heatMapShow && heatConfig.heatMapType === 'location' ? 'block' : 'none'; - } - function emptyHeatmap() { - document.getElementById('arkHeatmapLocation').style.display = 'none'; - } - // 渲染热图 - function renderHeatmap(data) { - setHeatMapSize(); - heatmapDisplay(); - if (!heatmap$1) { - heatmap$1 = heatmap.create({ - container: document.getElementById('arkHeatmapLocation'), - radius: 15, - gradient: { - 0: '#3023ae', - 0.2: '#53a0fd', - 0.4: '#b4ec51', - 0.8: '#ffa301', - 1: '#fb0000' - }, - backgroundColor: "rgba(0,0,0," + (1 - displayConfig.backgroundTransparent) + ")", - maxOpacity: 0.65, - minOpacity: 0.2 - }); - } - var point = []; - var pageWidth = document.documentElement.scrollWidth; - for (var i = 0; i < data.length; i++) { - var o = data[i]; - var el = getPathEle(o.$element_path); - if (!el) { - continue; - } - var eleXPostion = getEleOffset(el); - if (!eleXPostion || eleXPostion.hidden) { - continue; - } - // 比例 - var proportion = pageWidth / o.$page_width; - point.push({ - x: eleXPostion.left + Math.ceil(o.$element_x * proportion), - y: eleXPostion.top + o.$element_y, - value: 1 - }); - } - heatmap$1.setData({ - min: 0, - max: 10, - data: point - }); - } - // 修改热图配置 - function setHeatMapConfig() { - heatmap$1.configure({ - backgroundColor: "rgba(0,0,0," + (1 - displayConfig.backgroundTransparent) + ")", - gradient: resetGradient(displayConfig.max, displayConfig.min) - }); - } - var renderTime = null; - function resetRenderHeatMap() { - clearTimeout(renderTime); - renderTime = setTimeout(function () { - if (heatMapData) { - emptyHeatmap(); - renderHeatmap(heatMapData); - } - }, 200); - } - function heatMapResize() { - window.addEventListener('resize', function () { - resetRenderHeatMap(); - }); - } - heatMapResize(); - - var css_248z$4 = ".ark-page-line {\n z-index: 5002;\n position: absolute;\n width: 100%;\n height: 1px;\n left: 0;\n border-bottom: dashed 1px #262d39; }\n .ark-page-line.ark-mouse-lines {\n border-bottom-style: solid; }\n .ark-page-line .ark-page-line-value {\n background-color: #262d39;\n font-size: 14px;\n padding: 8px 16px;\n border-radius: 0 4px 0 0;\n position: absolute;\n left: 0;\n bottom: -1px;\n color: #fff; }\n .ark-page-line .ark-page-mouse-line-value {\n left: 50%;\n border-radius: 4px 4px 0 0;\n padding: 8px 0;\n width: 190px;\n text-align: center;\n margin-left: -95px; }\n\n.ark-headmap-body-line-none .ark-page-line {\n display: none; }\n"; - styleInject(css_248z$4); - - var lineTpl = function (value) { - return "
" + value + "%
"; - }; - var mouseLineTpl = "
"; - // 显示或隐藏深度线 - function displayLines() { - var body = document.querySelector('body'); - var className = body.className; - if (displayConfig.lineShow || heatConfig.heatMapType === 'lines') { - body.className = className.replace(/ ark-headmap-body-line-none/g, ''); - } else { - if (className.indexOf('ark-headmap-body-line-none') === -1) { - body.className = className + ' ark-headmap-body-line-none'; - } - } - } - var linesData = null; - /** - * 渲染深度线 - */ - function setMouseLine(event) { - var e = event || window.event; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var y = e.pageY || e.clientY + scrollY; - var num = y; - var lineNum = Math.floor(num / 10); - var detail = linesData.detail || []; - if (detail.length === 0) { - return; - } - var uv = linesData.uv; - var value = 0; - if (lineNum < detail.length) { - value = Math.ceil(detail[lineNum] / uv * 10000) / 100; - } - var mouseLineEle = document.getElementById('arkMouseLine'); - if (!mouseLineEle) { - mouseLineEle = createElement('div', { - id: 'arkMouseLine', - class: 'ark-page-line ark-mouse-lines', - content: mouseLineTpl - }); - } - document.getElementById('arkMouseLineValue').innerHTML = value + '% 的人浏览到了这里'; - mouseLineEle.style.top = y + 5 + 'px'; - } - function renderLines(data) { - linesData = data; - var uv = data.uv; - var pageHeight = document.documentElement.scrollHeight || document.body.scrollTop; - // 切割成n块 - var blockNum = Math.ceil(pageHeight / 10); - for (var i = 0; i < blockNum; i++) { - var value = data.detail[i] ? (data.detail[i] / uv * 100).toFixed(2) : 0; - var top = i * 10; - if (top > 500 && i % 20 === 0) { - createElement('div', { - class: 'ark-page-line', - content: lineTpl(value), - style: { - top: top + 'px' - } - }); - } - } - document.removeEventListener('mousemove', setMouseLine); - document.addEventListener('mousemove', setMouseLine); - } - - // 创建视图 - function createView() { - createElement('div', { - id: 'arkHeadmapBody', - class: 'ark-headmap-body' - }); - if (window.top === window.self) { - getUrlArkcontentText(); - nav(); - } - heatmap$2(); - loading(); - tips(); - render(); - } - // 渲染深度线数据 - function renderLinesData() { - getLinesData(function (res) { - renderLines(res.datas); - }); - } - // 渲染热图 - function render() { - if (!arkcontent) { - return; - } - if (heatConfig.heatMapType === 'lines') { - renderLinesData(); - } else { - // 获取热图数据 - getHeatmapData(function (res) { - if (heatConfig.heatMapType === 'location') { - // 渲染热图 - renderHeatmap(res.datas); - } - if (heatConfig.heatMapType === 'element') { - renderElement(res.datas); - } - }); - } - } - - const getAttrKeys = function(attrs) { - let dataAttr = {}; - for (let i = 0; i < attrs.length; i++) { - let item = attrs[i]; - let temp = { - key: item.name, - value: item.value - }; - dataAttr[temp.key] = temp.value; - } - return dataAttr; - }; - let fixEvent = function(e) { - if (!e.target) { - e.target = e.srcElement; - e.pageX = e.x; - e.pageY = e.y; - } - if (/mouseover/i.test(e.type) && !e.relatedTarget) { - e.relatedTarget = e.fromElement; - } else if (/mouseout/i.test(e.type) && !e.relatedTarget) { - e.relatedTarget = e.toElement; - } - return e; - }; - const eventAgent = (evt, func) => { - const evt1 = fixEvent(evt); - const actEl = evt1.currentTarget; - let el = evt1.target, actionType, isFind, attr; - while (el && el !== actEl) { - actionType = el.getAttribute("event-agent") || ""; - actionType = actionType.trim().toLowerCase().split(","); - if (actionType.indexOf(evt1.type.toLowerCase()) !== -1) { - attr = getAttrKeys(el.attributes); - isFind = true; - break; - } - el = el.parentNode; - } - isFind && func && func(el, attr); - }; - - // 控制器列表 - var controllerList = { - // 刷新 - refresh: function () { - arkcontent.useCache = false; - render(); - arkcontent.useCache = true; - }, - // 热图类型切换 - heatmapTab: function (e, attrs) { - emptySelected(); - var type = attrs['heat-type']; - heatConfig.heatMapType = type; - setSelected(); - toolDisplay(); - heatmapDisplay(); - elementDisplay(); - displayLines(); - render(); - }, - // 热图显示 - heatmapSwitch: function () { - heatConfig.heatMapShow = !heatConfig.heatMapShow; - heatSwitch(); - heatmapDisplay(); - elementDisplay(); - }, - // 深度线显示与隐藏 - displayDepth: function () { - displayConfig.lineShow = !displayConfig.lineShow; - displayDepth(); - displayLines(); - renderLinesData(); - }, - // 展开收起 - navOpen: function () { - heatConfig.isOpen = !heatConfig.isOpen; - navOpen(); - } - }; - function viewController () { - document.getElementById('arkHeadmapBody').addEventListener('click', function (event) { - eventAgent(event, function (e, attrs) { - var controllerName = attrs['controller-name']; - controllerList[controllerName](e, attrs, event); - }); - }); - } - - function chartDisplay() { - heatmapDisplay(); - elementDisplay(); - } - function iframeMessage () { - // 给上层窗口发送消息 - window.parent.postMessage(JSON.stringify({ - code: 'ark/heatmap', - appkey: globalWindow.AnalysysAgent.config.appkey - }), '*'); - // 监听ifram发送过来的消息 - window.addEventListener('message', function (event) { - var data = event.data; - console.log(data); - var msgTypeMap = { - 'ark/heatmap': 'location', - 'ark/depth': 'lines', - 'ark/element': 'element', - 'ark/attention': '1' - }; - var type = msgTypeMap[data.code]; - if (type) { - setArkcontent(data.content); - heatConfig.heatMapType = type; - heatConfig.heatMapShow = true; - var controlType = data.control.type; - if (data.control.type === 'refresh') { - arkcontent.useCache = false; - } - // 显示隐藏热图 - if (data.control.type === 'closeHeatMap') { - heatConfig.heatMapShow = false; - chartDisplay(); - } else if (data.control.type === 'closeDepth' && displayConfig.lineShow) { - // 关闭深度线 - displayConfig.lineShow = false; - displayLines(); - } else if (data.control.type === 'openDepth' && !displayConfig.lineShow) { - // 打开深度线 - displayConfig.lineShow = true; - displayLines(); - chartDisplay(); - renderLinesData(); - } else if (controlType === 'heatmapOpacity') { - //热图背景调整 - displayConfig.backgroundTransparent = data.control.value.opacity; - setHeatMapConfig(); - } else if (controlType === 'heatmapcolorRange') { - displayConfig.min = data.control.value.min; - displayConfig.max = data.control.value.maxValue; - setHeatMapConfig(); - } else { - chartDisplay(); - render(); - } - } - }); - } - - storeInit(); - function init() { - // 添加热图视图 - createView(); - // 添加视图控制器 - viewController(); - if (window.top !== window.self) { - iframeMessage(); - } - } - if (document.readyState === 'complete') { - init(); - } else { - document.addEventListener('readystatechange', function () { - if (document.readyState === 'complete') { - init(); - } - }); - } - -}()); diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css deleted file mode 100644 index e52dcd2..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.css +++ /dev/null @@ -1,932 +0,0 @@ -.ARK_BOX { - position: fixed; - width: 390px; - height: 100%; - background-color: #ffffff; - border-radius: 4px; - z-index: 10000000000 !important; - background: #ffffff; - color: #000000; - box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - -webkit-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - padding: 20px 17px; - font-size: 16px; - top: 0; - right: 0; - font-family: PingFangSC-Medium; } - -.ARK_BOX input[disabled] { - cursor: not-allowed; } - -.ARK_BOX .ARK_TITLE { - width: 72px; - font-size: 18px; - font-weight: normal; - font-stretch: normal; - line-height: 18px; - letter-spacing: 0px; - color: #333333; - font-family: inherit; } - -.ARK_BOX .fl { - float: left; } - -.ARK_BOX .pb-20 { - padding-bottom: 20px; } - -.ARK_BOX .textR { - text-align: right; } - -.ARK_BOX button { - border: 0; } - -.ARK_BOX button:focus, .ARK_BOX button:active { - border: 0; - outline: 0; } - -.ARK_BOX .ARK_TITLE.MID { - font-size: 14px; - line-height: 14px; - color: #252d39; - font-weight: 500; - line-height: 1.1; - color: inherit; } - -.ARK_BOX .ARK_TITLE.SM { - font-size: 13px; - line-height: 33px; - color: #4c6072; - width: 56px; - display: inline-block; - text-align: right; } - -.ARK_BOX_HEADER { - font-size: 16px; - text-align: left; - color: #333333; - cursor: move; - z-index: 1; - position: absolute; - top: 0; - width: 100%; - padding: 20px 17px 29px 17px; - left: 0; - background-color: #ffffff; } - -.ARK_CONTENT { - height: 100%; - position: relative; - /* top: 170px; */ - width: 100%; - left: 0; - /* padding: 0 17px; */ - padding-top: 165px; } - -.ARK_EVENT { - position: absolute; - top: 70px; - width: 100%; - background-color: #ffffff; - left: 0; - padding: 0 17px 10px 17px; - z-index: 1; } - -.ARK_BOX_PAGE { - position: relative; - color: #666666; - font-size: 12px; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper, .ARK_BOX_PAGE .v-radio-wrapper { - font-size: 14px; - line-height: 30px; - color: #252d39; - font-weight: 400; - font-stretch: normal; - cursor: pointer; - font-size: 14px; - display: inline-block; - margin-right: 16px; } - -.ARK_BOX_EVENT_ID label, .ARK_BOX_PAGE label { - font-size: 12px; - bottom: 0; - margin: 0; - max-width: 100%; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper span, .ARK_BOX_PAGE .v-radio-wrapper span { - font-size: 12px; - color: #999; - font-weight: 400; - font-stretch: normal; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper span.wbText, .ARK_BOX_PAGE .v-radio-wrapper span.wbText { - font-size: 14px; - color: #333; - font-weight: 400; } - -.ARK_BOX_EVENT_ID .v-radio-ARK, .ARK_BOX_PAGE .v-radio-ARK { - vertical-align: middle; - white-space: nowrap; - cursor: pointer; - outline: 0; - line-height: 1; - position: relative; - display: inline-block; - margin-right: 8px; } - -.ARK_BOX_EVENT_ID .boxRadio, .ARK_BOX_PAGE .boxRadio { - width: 270px; - display: inline-grid; } - -.ARK_BOX_PAGE .ml-24 { - margin-left: 24px; } - -.ARK_BOX_PAGE.mb-15 { - margin-bottom: 15px; } - -.ARK_BOX_PAGE.mb-16 { - margin-bottom: 16px; } - -.ARK_BOX_EVENT_ID.mb-40 { - margin-bottom: 40px; } - -.ARK_BOX .ml-12 { - margin-left: 12px; } - -.ARK_BOX .mr-12 { - margin-right: 12px; } - -.ARK_BOX .mr-25 { - margin-right: 25px; } - -.ARK_BOX .ml-8 { - margin-left: 8px; } - -.ARK_BOX .fr { - float: right; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-checked .v-radio-inner { - border-color: #0098e1; - background-color: #0098e1; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner { - border-color: #ddd; - background-color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner { - background-color: #fff; - border-radius: 7px; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner:after { - background-color: #0098e1; } - -.ARK_BOX_EVENT_ID .v-radio-inner:after, .ARK_BOX_PAGE .v-radio-inner:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - transition: all .2s ease-in-out; } - -.ARK_BOX_PAGE .v-radio-inner { - width: 14px; - height: 14px; - top: 0; - left: 0; - border: 1px solid #d7dde4; - border-radius: 2px; - background-color: #fff; - transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out; - position: relative; - display: inline-block; } - -.ARK_BOX_EVENT_ID .v-radio-inner { - width: 14px; - height: 14px; - top: 0; - left: 0; - border: 1px solid #d7dde4; - border-radius: 7px; - background-color: #fff; - transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out; - position: relative; - display: inline-block; } - -.ARK_BOX_PAGE .v-radio-checked .v-radio-inner:after { - transform: rotate(45deg) scale(0.8); } - -.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled { - color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled .wbText, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled .wbText { - color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper-disabled { - cursor: not-allowed; - color: #ddd; } - -.ARK_BOX_PAGE .v-radio-inner:after { - content: ""; - display: inline-block; - width: 4px; - height: 8px; - position: absolute; - top: 1px; - left: 4px; - border: 2px solid #fff; - border-top: 0; - border-left: 0; - -ms-transform: rotate(45deg) scale(0); - transform: rotate(45deg) scale(0); - transition: all .2s ease-in-out; } - -.ARK_BOX_EVENT_ID .v-radio-inner:after { - content: ""; - width: 8px; - height: 8px; - border-radius: 4px; - top: 2px; - left: 2px; - transition: all .2s ease-in-out; - display: inline-block; - position: absolute; - transition: all .2s ease-in-out; } - -.ARK_BOX_EVENT_ID input[type=checkbox], -.ARK_BOX_EVENT_ID input[type=radio], -.ARK_BOX_PAGE input[type=checkbox], -.ARK_BOX_PAGE input[type=radio] { - margin: 4px 0 0; - margin-top: 1px; - line-height: normal; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; } - -.ARK_BOX_EVENT_ID .v-radio-input, .ARK_BOX_PAGE .v-radio-input { - width: 100%; - height: 100%; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 1; - cursor: pointer; - opacity: 0; } - -.ARK_BOX_CENTER { - line-height: 16px; - font-size: 16px; } - -.ARK_BOX_SMALL { - font-size: 12px; - line-height: 30px; - color: #999999; } - -.ARK_BOX_SMALL span { - color: #0097e0; } - -.ARK_BOX_EVENT_ID { - position: relative; - margin-bottom: 6px; } - -.ARK_BOX .ARK_title { - /* width: 70px; */ - /* height: 36px; */ - text-align: right; - /* display: inline-block; */ - font-size: 14px; - line-height: 36px; - margin-right: 9px; - color: #666666; } - -.ARK_BOX ul, .ARK_BOX li { - list-style: none; } - -.ARK_BOX .PROLIST { - margin: 0; - padding: 0; - margin-top: 10px; - max-height: 360px; - border: 1px solid transparent; } - -.ARK_BOX_EVENT_ID input, .ARK_BOX_PAGE input, .ARK_BOX_EVENT_ID select { - width: 274px; - height: 30px; - background-color: transparent; - border-radius: 0px; - border: 0; - border-bottom: 1px solid #d2d2d2; - color: #333333; - font-size: 14px; - line-height: 30px; - outline: 0 none !important; - margin-left: 16px; } - -.ARK_BOX_EVENT_ID input.error { - border-color: #e00000; } - -.ARK_BOX_EVENT_ID input.PROID { - width: 246px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX_EVENT_ID input.PROVALUE { - width: 188px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX_EVENT_ID input.PROVALUE.width246 { - width: 246px; } - -.ARK_BOX_EVENT_ID input.PROREX { - width: 216px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX .PROTYPE, .ARK_BOX .PAGETYPE { - width: 246px; - margin-left: 12px; - background-color: #f4f9fd; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAIxJREFUCB1jzG9dJv6f6Zf/pMqEWQxYQF77vBQmDtatTAyMfxT+//vXn9c6vwldXV77/FqG/4yT/n//L8c0sSruJDMTg+9/hv/FyIpBiv7/+1/BxPjfB6SGEWZKQfs8p7//GDYzMjD2MjAx/AYpAhkwoTJpH0gNXCGIA1MMYiMrAvExQG7bInsQRpcAAB00POpoifV7AAAAAElFTkSuQmCC) no-repeat scroll right center transparent; - cursor: pointer; } - -.ARK_BOX input::-webkit-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:-ms-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input::placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:focus, .ARK_BOX input:hover { - border-color: #57a3f3; } - -.ARK_BOX input::-webkit-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:-ms-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input::placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:focus, .ARK_BOX input:hover { - border-color: #57a3f3; } - -.ARK_BOX_EVENT_ID_ERROR { - display: none; - position: absolute; - bottom: -19px; - left: 79px; - font-weight: 700; - font-size: 12px; - color: red; } - -.ARK_BOX_ChOICE { - width: 199px; - height: 95px; - float: left; - position: relative; - border-bottom: 1px solid #f1f1f1; } - -.ARK_BOX_ChOICE .ARK_BOX_LIKENUM { - font-size: 12px; - color: #0098e1; - line-height: 30px; - width: 100%; } - -.ARK_BOX_ChOICE span { - float: left; - margin-left: 18px; } - -.ARK_BOX_ChOICE input { - opacity: 0; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - margin: 0; - padding: 0; } - -.ARK_BOX_ChOICE input + label { - position: absolute; - cursor: pointer; - right: 10px; - top: 0; - width: 20px; - height: 20px; - font-size: 18px; - line-height: 18px; - text-align: center; - color: #999999; } - -.ARK_BOX_ChOICE input + label:after { - content: '+'; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - border: 1px dashed #d4d4d4; } - -.ARK_BOX_ChOICE input + label:before { - content: ''; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - border: 1px dashed #d4d4d4; } - -.ARK_BOX_ChOICE input:checked + label:after { - content: '+'; - color: #0098e1; - border: 1px dashed #0098e1; } - -.ARK_BOX_ChOICE input:checked + label:before { - content: '+'; - color: #0098e1; - border: 1px dashed #0098e1; } - -.ARK_BOX_SAVE { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - border-top: 1px solid #e5eef4; - height: 60px; - padding-top: 13px; - /* padding: 15px; */ - background-color: #ffffff; - padding-left: 245px; } - -#ARK_BOX_SAVE { - -moz-user-select: none; - -ms-touch-action: manipulation; - -ms-user-select: none; - -o-transition: color .2s linear, background-color .2s linear, border .2s linear; - -webkit-transition: color .2s linear, background-color .2s linear, border .2s linear; - -webkit-user-select: none; - cursor: pointer; - display: inline-block; - font-size: 12px; - font-weight: 400; - line-height: 1.5; - margin-bottom: 0; - padding: 6px 15px; - text-align: center; - touch-action: manipulation; - transition: color .2s linear, background-color .2s linear, border .2s linear; - user-select: none; - vertical-align: middle; - white-space: nowrap; - width: 60px; - height: 32px; - border-radius: 15px; - cursor: pointer; - color: #ffffff; - border: 0; - background-color: #0098e1; - outline: 0 none !important; } - -#ARK_BOX_SAVE:active { - background-color: #0086c7; - border-color: #0086c7; - color: #f2f2f2; } - -#ARK_BOX_SAVE:hover, -#ARK_BOX_SAVE:focus { - background-color: #47c3ff; - border-color: #47c3ff; - color: #fff; } - -#ARK_BOX_CANCEL { - /* margin-top: 15px; */ - width: 60px; - height: 32px; - /* float: right; */ - font-size: 14px; - line-height: 30px; - border: 0; - background-color: #ffffff; - color: #999999; - cursor: pointer; - outline: 0 none !important; } - -#ARK_BOX_CANCEL:focus, -#ARK_BOX_SAVE:focus { - border: 0; } - -.ARK_EVENT_LIST { - border: 0; - border: 1px solid #eeeeee; - border-radius: 5px; - background: #ffffff; - color: #000000; - -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - -moz-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - min-width: 80px; - min-height: 13px; - position: absolute; - top: 20px; - left: 500px; - padding: 0; - max-width: 250px; - z-index: 100000; } - -.ARK_EVENT_LIST a.ARK_EVENT { - max-width: 110px; - height: 24px; - line-height: 24px; - color: #0098e1; - margin: 5px; - text-align: center; - overflow: hidden; - text-overflow: ellipsis; - display: block; - text-decoration: underline !important; - cursor: pointer; } - -.ARK_SHOW { - display: block !important; - visibility: visible !important; } - -.debugLog { - top: 0; - left: 0; - position: absolute; - width: 260px; - min-height: 270px; - padding: 20px; - z-index: 999999999; } - -.debugLog .l-list { - position: relative; - overflow: hidden; } - -.debugLog .l-list div { - color: #ffffff; - font-size: 13px; - line-height: 24px; - word-break: break-word; } - -.debugLog .bg { - width: 100%; - height: 100%; - background-color: rgba(47, 50, 58, 0.8); - box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.12); - border-radius: 4px; - position: absolute; - top: 0; - left: 0; } - -.debugLog .cha { - position: absolute; - right: 20px; - color: rgba(255, 255, 255, 0.5); - top: 20px; - cursor: pointer; - font-size: 14px; - width: 10px; - height: 10px; - cursor: pointer; } - -.ARK_HOVER, .ARK_CLICK { - outline: 1px solid #e00000 !important; - outline-offset: -1px !important; - /*position: absolute;*/ - /*background-color: red !important*/ } - -.ARK_SHOW_DISPOSE { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(20, 137, 226, 0.2); - border: dashed 3px #1489e2 !important; } - -.ARK_SHOW_DISPOSE.ARK_NO_LIGHT { - display: none !important; } - -.ARK_SHOW_DISPOSE:hover, .ARK_SHOW_DISPOSE.ARK_NO_LIGHT:hover { - background-color: rgba(20, 137, 226, 0); } - -.ARK_SAVE_DISPOSE { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(20, 137, 226, 0.2); - border: solid 3px #1489e2; } - -.ARK_SAVE_CLICK { - position: absolute !important; - z-index: 999999999 !important; - background-color: transparent; - border: solid 3px #1489e2; } - -.ARK_IS_EDIT { - position: absolute !important; - bottom: -21px !important; - left: -3px !important; - background-color: #1489e2 !important; - font-size: 12px !important; - line-height: 12px !important; - color: #ffffff !important; - padding: 3px 5px !important; - white-space: nowrap; - margin: 0 !important; - display: block !important; } - -.ARK_SAVE_DISPOSE.ARK_NO_LIGHT { - display: none !important; } - -.ARK_SAVE_DISPOSE:hover, .ARK_SAVE_DISPOSE.ARK_NO_LIGHT:hover { - background-color: rgba(20, 137, 226, 0); } - -.ARK_SAVE_PRO { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(255, 163, 0, 0.1); - border: solid 2px #ffa300; } - -.ARK_SAVE_PRO.ARK_NO_LIGHT { - display: none !important; } - -.ARK_NONE { - display: none; } - -.ARK_CLICK_ELE { - position: absolute !important; - /* width : 2px; - height : 2px; */ - z-index: 999999999 !important; - display: none; - /* background-color: rgba(0, 0, 0, 0.3); */ - /* background-color: rgba(20, 137, 226, 0.2); */ - border: solid 3px #1489e2; - /* transform:none */ } - -.ARK_PRO_ELE { - position: absolute !important; - /* width : 2px; - height : 2px; */ - z-index: 999999999 !important; - display: none; - /* background-color: rgba(0, 0, 0, 0.3); */ - /* background-color: rgba(20, 137, 226, 0.2); */ - border: solid 3px #ffa300; - /* transform:none */ } - -.ARK_ADD_PRO { - width: 100%; - height: 40px; - background-color: #f4f9fd; - border: 0; - border-radius: 4px; - margin-bottom: 20px; - margin-top: 10px; - color: #1489e2; } - -.ARK_ADD_PRO img { - margin-right: 9px; - margin-bottom: 3px; - width: 11px; - height: 11px; - vertical-align: middle; - position: relative; - display: unset; - font-family: inherit; - font-size: inherit; - line-height: inherit; } - -.ARK_PRO_ITEM { - background-color: #f4f9fd; - border: 0; - border-radius: 4px; - margin-top: 10px; - padding: 20px 16px; - display: inline-block; - position: relative; } - -.ARK_ICON { - width: 24px; - height: 24px; - display: block; - margin-left: 4px; - margin-top: 6px; } - -.ARK_ICON.ICON_XQ { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAelJREFUSA3VVs0rRFEUP+d6UdQg7PwBFmwsZGspbHxtNGJDFjNRU2bykZJBioyiLGawZC//gKyQj8X4LLKRkiym8N49zp28STPPu9M0s3Dqde89H7/fOfed++7Do5OrVkLYJKJayKMg4hMSDBkKXAAMNzfW7ecRHw5Pr9sAaRMOT+KUT+DfWAqbky+sFJzAyCb/wNJO2eeXNQ8E3YTEZeNuZVX1xMxwR0IXnxXB55cZJYJ2ELCBAEJKGHl9falmcK+OQLtFvvBuDYP3AooAEHr4KWaSIBH2ja7EKnQE2goM/Cg3uc+EkPfSgnXVciiwFSRv1ofh4eWbG4m2gpWQ95YBHhCKUr6CGRDwZjXY/+gGrmzaCpQTCtGFUpaqeVIkvRtFRo+9dBtTWbk5RUIDxyaUxW2fElF6uRz0ntlrtzErgnSAhEwE/HM79el6p3VOBEByktA694eje2MLsQYnYFuXG4GK5j7l9u02JZz5wluzNmD66PqSxxa3m6RlDUgQF4CJOz7JmcJEiNTJhqlMo6aLTClbGHQEQHLGTuE/OsK7v6yuW7QWGlzklp/+KzilF6TOiqO4EqiISGhwVkfChy53ghQJinGeZ3w9+Ug/Cyg+UH6O8v9vNHX7Jy9ox/pyVyrM5J9FoX9bvgFfDa+ln7mJKwAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_XQ:hover { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd1JREFUSA3dljlLA1EQgGde4i2aIiESVPwB2tpbilYabUSwUqwEjQd4NCkkRhQsFFL4A7QX/4SFRyF4gEnwiuAFKnH3jbOrayRu9oWYNAaS3fdm5vvevF2yi77lRCfpEAOgRijqB5PogmG3AUeEkdRU804x+d5osot0ioE3Eqdign+yDLb4OVGK85IL3Pms2h+9rpH0vghEQUIgJNgq87hnL0cCL6r6vARSpjcBsJtQbAiQgi/aaPpR9zJ8UCVQblHD2pWPgf2IGBJEdQRYDogzDB5oWb33qATKDnRNqzchQp5LHdaBbSzr5O3CtHit49iDk0TZQWq86ZSJF7zyTK4wHHhyORaIO8GNmLIDEyBcvSChGkAzhyjFE7iozxwofjKrcki8CwX2XJV4bKXU1lcd3U407ltjp2NegmzA8+NLyB+Nt2bP240LEhDJOZ3wwBdJbPtXEm12YGuuIIFZzHcRAQV1DfZ9S8mwBcw+Ol7khpVEu6bRkABxKN/oLLv4W4TUw+fzdnFHgf4OHVw0KvkWAvNrhzDn7OUcctyi1HRThDMWcmK/Agw5zZXjKDCK7iabw0oJ/UFgSQTiNAL++vdEgBssr9jN1cG/eKJh0nhA52yxwMAnk98sSv3a8gEW3qVw8YWlQQAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_XQ.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd5JREFUSA21VksvA1EYPbcvfUTr0SKUKIkm3SBIhA0bicR/YCFYCz9CIuwtLST+gKTCko2FV1dEE1rxiFIh02o7ve6dZph4zL2k/ZLJfczcc8733TMzlwSWE+NUxRpAgyhrkCSxYob4lxKJ+SFfsLvJUVb4o9scVvefkxauvNzgXGmPJpgGGUFlo+IENhn96WwRGycviN3n4XEQjLa7MN7lBpFYLCRQi8DKfhpPmSLGOl14UFRsxl5RpMBE2C2kEJboPJXDZbqA2X4v4k95BH12jIRc2IlnhOD8ASGBUijhUEJxzKwXPVcQqrUhU2CpSYSQIFxvg83KzExLFWeV0Wof8dsl4CUy8DgsmOv3gbAM9Ai4rZjs9epD01aYAV890FIFu+XTM5EGB2qcUkvFe/BVHq/91pnCXKV+vfXjWE6GYWk2TzWbLmynsH78ikcB0Z8JdK4CS2D3QsFiNIW9q6w+/a01fdEOb3I4vctptlTp5yYbUbhbj27fMNzmNE5/9E0JDq6zpup0lICH+fiXMC3RdJ8Xg60/KzPiNf6XgDuTfyJEJP8m4Cp1ktEOl9Y3Kuf9Zq8Vobrf32rTPdDBOMlUT7V26XOyrekeyIKYPccISJL/oMsdJUx2sqj0seUdh92PWTODHHwAAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_REX { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAphJREFUSA3VVk1oE0EUnrfZxpRqCoVajCKJMbWIpa2mklLQm9CKF1HwIIgitAdPoicFo1i8K168CSIIgvTi1VOTCpIfQkvW0qQk0Vil21Rl02ySfb4Rp7i7LkpJDg7svnlv3vu+N29mZxbiCWUCgT1BxH2sRQ0Y0xjArLRTmoZYUilKjE1FRg69bhE+S6c/dWlG5REi09lcIoutAv4dZz6T66PkVyn59rTI4IFVKvvuthGItNtOIAsmq6TpSVTDtwyYF5DVaDzm9njuhg/7y3PJ7DPSR3kMH5M75NPHBw8WuW5tjgQrKytucg7v6PN2Ges1b72m39Rrmy/JNg4Ix8Al3ZABFxrNDmP0iL9kBRa6I4FwCPt8GvW1bPZLVK2qlXw+7ymv64y2YGl0qD8n/JzkP60BL9d6VT3LkOUCgcAmB6PA3kS24Hu3vNztBM7tf50B38ux1Pvv9HXmJNl1QYAZRvNpVdN0YLBItglht0obAZVi15qmRsnxFgAYBPAQGZ53e+Vz4WBwYwtAck2OD4eSQp9LKjOdnZ2Pjw7s/yhsXNpKpOrqXmA4LZzGRvpniOSN/rU+y+sv7DaJeLFeqwatdhsBZU3VMLex4dB1hlAoV/TnfD1+jmLzZDy9dGY+tXTK7G3WbARi2O/36/QN3Oc6cSLN5AqVajGTKXTT6fuCrCfQMC7zJ7ZQ7BFxVmlbA8qQDj8+DzDI+Y4IIL1B/du/9KiwC0mHpuiapI2gx93zYa2pSvGkchVcrq1FNEVZFDQaQTTYHmRS3jJk36YDA73f4inlkoF4jzWajlM3A8EGSHAtMhQqme2ktes+4EQc23GRbZls0/D/EvArk3beZ4lepfmkMrnNCvwxjF/62NAf0JH7Ctr92/ID4uMOd90r/84AAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_REX:hover { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAApdJREFUSA3VVk1oE1EQnnmbxNTSVEq3wSQFsQcvXsR6VbwUWtGDKHgQbEVIDyK2te1BwSgWSSoiahE9aAURBEF68aonwZO3gpco2STabq2GNml+d5wHfSW72yCU5ODCMv/fvJl5+96ifs8YpBo8A6AINOlBwAIiLAT8u0exO24YLETNqd73TcKH4OzPdsuqPiK0ytAdT1GzgOtxeh4sBfWEsSTqlc3kl68Gl4iop2UJ1GJbnsCjMjlpjEg8njU+I2GAbSVC+gTetlsrY/qP7oTxCgmObMaUvB5xIjsRNpwYUm5Ywfw8+ICg37tHOwS4a0AQ5LFcfLsJclgIcU34fIOaz3MqMx5KbwcudQ0rUAHZaKjAfOFA3Iz9guKffS/Iv26mwRKQNseCSemHY8rbTRtWUO8q27WqlU4jQPL7CBalDWuo98bN0P6nq531vk7+nxXIvTyXMNYJIQma55wCIKi+3IBauZiDRdYNKr2TuhJwKzp+w0aMHa/zOi1AfMizOBvobD+TjHbltgA0bWhlIvxFyXoiNeOntjljWs8qnaSuFq1plTABjionczIyw+fUh7VcfkH2X+mdlAjPF7HS59S7EpAG3Gr7szzVO84tSuXN9Gs5D2kli44FZzMnexLZAbu3XXIlUObhYSgLhDtSRkQ62B+5CESLz5/kOnnLvkGioxZZI8Rv5L7RpeKc1DUDrHHH+byNIfcf4KYK+Hgcq8zf2JRjSq8on8qKtVFXgo6aN7OKVcFf6yUQ2tYQbVEOAcnq40r2+vzWN4fJ/aF9ndbX9ETmAgfdBqvWsHQ7EPHuEpczVyJpu56lVt0HMpHEbjhk10p2qPh/E8grk7f3MleAaT5vhnbYgW3D5KVPpcpdAnqHrf5t+QvWh/ZinlE//gAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_REX.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAoVJREFUSA3VVj1oFEEUfm9m9/aye3eJcgkELxLsTGklqI2doqJga2UTRIyVYqUoFsEfLAQxomBnJ7axsbGzsbMxSi6/Rwioud292533nDEZk+zeiYZc4YPlzcz73vvem7czuzh4v36CFUwBcA12SRAwRIQ3laI/jtXJet136N5wH7zfpfjQUk5xKeJrKdCiMJnvZnCTpCfTuOqrx7qSc5qgNxIIWGXmoZ4R2LR7TuBYpqxmgfj1B7wExkCXmkiBHweK/Kxf8sqXprgDDGPGx9iqRZqouLicjWHmXQkSEC4RjdV8Ohprkm8tuLAa4mR/mS8y8cHAEY+8As4gMlUEdwz+RwKbjSch9oBjH2BqNsJ3bSELAATC4caAVPMW103/VQ/MdjUSPK4Pz3yBVNsEUynvWWu71TaIUrfgZr3rFlmnz2s4vXEy58tFecNkbyRSeCtM01QkODMawBWLz+pcBUmK/mxTXF0HIhWEeIUM4b4Arg86yScboOTBxIEynxoN6FfweoiXTEXWbnWOICQaSonPW8CIr15IwR8Wmvhgff+tZbtOFJwMKX+f5QhAyu2eerY/4IcIvLTwne+afhhAK8FDy5E8thTh4ZzDloU8wYbRBUoKAp5bbK0EtyXyTJvdUgFxWld5KFJ8pkV4Ok64YnFZnW+yUgAoAYl4JOCn1kEyqZEAngC3QZPp632r6KLirfPNcY7AF6KxwizmQjzrFZzfTd10yY/SRNUYuNrn0kLWmiNwHQ59KW7GBOOtOO3POnSa6/zXPEdMlqVqZO05AgMY9umtVub5B9Fb20G6NrkDdkdL/y9Bk2Av6itMV4BzixEc2VH9XZzMR38llJf1m/Uae/3b8hNICftztdejQwAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_NUM { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAnZJREFUSA3tVjtok1EU/s5NalJDsa0PUHTwgXRQbAuCUESdfA26mEERjJaqg0Fj0NAuWaxVqaFRESsmoEPBDopD0ElRqi5GB5EaERE7GPERaQyJ+N/juSkJiSV1SLL1LOf+//3u95177rkPehZ/u50Jw8y8FDU0IpogRo/dkCvg8IbOtlgN+TH2MrETxMMYi49zLYlLuQy3BF9fmxX4b37tMyGkdOn42WiPBjaBKaeI7gz1Hrhnxvgv3FyU+235CVgBhYmGhjmhQf++j//ykVnprs42wU03b390UER8BHolvU0MXqlg26+bFo5iMvmOCAvA/AKEdQz6Y3e6VoV87u8Fphmr6PTA7XlCfkQ2TCzc5+loXYI1AH3QpE9R+stegJfJRuoO9x3cqAi7RajFyma6C+QFX7GKMjrbLqC5Ev0DAw56PFmZ5kMhWgvobeafanTdN7454Hkk4lmG7jLfpVZRwAZrvgFqwrfCANmRU22m1SDiiyf2/DB9QSItaUqJSH5MAW98RYFSUDXtigIWbPloFaMYlaRoqk2ckFSRLzTaYsSDLCcCo1nWpTjbQlBlZXosHHOoX8lDcki9d8L5PGOlM1I5WwUcNn08mdwilfNaJi65127OZUzfSGogulm8U9L2VHyZlc1Apb+2a81X2KJL5wLun6RwTSpph7c/Eqf05zcS4XLJ8/nWxTwi/pNmvuE9E3miGXelGFJ2h+t6Gbt8lAk0ki0hEUYFfNUAhwKek6ToqCzuuGTksSK1K9zruWUqSsGxnhmXRSgpkUeUQkfpHigKzR7XxVRUaJStQQVMVb/rL2Bu//wFXVWc0wcbzvzLot7Plr8avfRhA7RvpQAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_NUM:hover, .ARK_ICON.ICON_NUM.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAlxJREFUSA3tVktoE2EQ/mY3acSgtTUPsNmCRQRBoT14kqKe6uOgZ/GilNaKFzUm117TBAs+qK2oBw8efRyKnhQFT6IeRKQHH9ktGoPVKGpisjvOn3ZDIm4tJPXUvczs/8983+x88+8uhTPmXrYxBXAMLb3IIh1DPgVOhOF8onu6lfihtLWfbZ5CKJXlVgLXYylsrX5hOfwVgn921bdYBDNTNDM7BOadDC5prN/MJbvuqJxo+kPERjlOjB65tXyaPv4+vuHdn3iLahAdMzOO41ySMdsiif027NuRtHl40zkO2Fx+IuAnhDwq+0fLduVZ7KzZuWSCnsm5dgYdI6LpfMLoC4aNrXJe3rCDRKFkHhJgQyMM5pPd/TrRQQHu+FXB4JIJvha+90pbVoNwTyW9PUJFgO7L2jY42KPW/DruKjsS73pAQNEB71D39ZdnizQN61UgOfjkJjAt+ESbQcTmydhntTdKEkX4IiTVHDdeWU+C+qBmfE8CZ6FyOeu1qkTUeZ95RjQgY9zqUOSjLFGMdSJ27WndohoI1HREUtnjkUx2YG178DmBfkjigApWe/LG3S2iv5Dnrva+WOHq3kRmdpeAryKmxy6waxsIvpWsXge4yA6dfz3cWZA2T8pZ2BdOmU8LP82XzNgoIGPBkHFDNDClgCvhVPaRzXxLaRDw47IL7NoGgkBwzQxBuybjOaECcmeM0xq0ERnPVwLwUId+4GMydl1NlNbWtl1EvyBEORH3qs/v77NOGXMucM2uvK5rrfBwGjTwiGlq+X8QkKU+0E2V+ZfkeUz5s1ju35bf6GXjj9JSLtoAAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_DEL { - position: absolute; - top: 11px; - right: 11px; - width: 8px; - height: 8px; - margin: 0; - padding: 0; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAAIxJREFUGBlNjjESwjAMBE8y/IfkD/SuQs0DGGjgC5mh4gcZSqjo+QPDf4htcsnII1Xn2/NJcuyHswS8b5f9F24O/b0BcqOE+Yfn6TpsjFNLzo8Q8BGaNBjSNTq+TbN1DtTQiBcKMAWjrVTCOhNE/bK4c8CtiLpC9DeJg53Vek9LwpbHGWQxdVHdpYT2D69xRVCaoaWHAAAAAElFTkSuQmCC) no-repeat; } - -.ARK_ICON.ICON_I { - position: absolute; - top: 9px; - left: 60px; - width: 15px; - height: 15px; - margin: 0; - padding: 0; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAc5JREFUKBV9Uj1PG0EQ3dkjCidcpKBIqIESQYXgT6QgcpEIoQPRINlgCF+mth0+FL4qBDJGSCBZAlHxExBUQAmiJwgQFJjzAXeTeTbrnJDDSnczO++9ud03R+o/a3Rm/bP3bNV//ODfzI45f6rR6G1xMJ3rY+ZxVtwk2IM8EUXqgkhNL032roX5FfHI3Fb9k+flhNikiZJUax0sJLovh+Y3v3DR7+SAM6zUeYR0TybZc4smNabT85O3Id3vrNq61vnhqGvqaCD5TuJ3ft8vFlYLHKzI/htwjVc8nXOka6MI+8PCWCor5fJCHbjsWmLpjX9iud8EjhoWGlE4AidNk8RBAnUNVxVzM+4YJiJfnuqteGIw8JhUez6ftzTGIcDD690MpxTDxzZAicfsHl+4nzSpmmsBInDVEN6LY9PbDYrIbmu07/Xi1PcrOdsZxvGeyGBe4HVIfhiNRv2S29IpFTCnZRy2IVWLwDFvS6k54BVD4qnsrjR5fDsu0wRCzBmapaTzA/XylyWxrYiDwkuxcDKYyXUZDxCx993CqcBk67oB8LAqXy5v5Yf5lf2qfPWTiTpkhC7MIVZH4uzsQtLZM7yqYgNijhgHXIU5ph6OfwHgJr3gZ7nUAgAAAABJRU5ErkJggg==) no-repeat; - cursor: pointer; } - -.ARK_SCROLLBAR { - overflow-y: auto; - overflow-x: hidden; } - -.ARK_DROPDOWN { - width: 238px; - will-change: top, left; - display: none; - left: 68px; - top: 33px; - height: auto; - border-radius: 2px; - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - z-index: 500; - background: #fff; - position: absolute; - padding: 6px 0 !important; - max-height: 230px; - overflow-y: auto; - margin-inline-start: 0px; - margin-inline-end: 0px; - padding-inline-start: 40px; } - -.ARK_DROPDOWN.TOP { - top: -120px; } - -.ARK_DROPDOWN li { - position: relative; - cursor: pointer; } - -.ARK_DROPDOWN span:hover { - background: #f0f6fc; } - -.ARK_DROPDOWN span { - display: block; - height: 34px; - margin: 0 1px; - padding: 0 9px; - font-size: 14px; - line-height: 34px; - color: #4c6072; - background: #fff; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - -webkit-transition: background .2s; - transition: background .2s; } - -.ARK_DROPDOWN .selected span { - color: #1489e2; } - -.ARK_SCROLLBAR::-webkit-scrollbar { - width: 4px; - height: 4px; } - -.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb { - background: #e4eaf1; } - -.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb { - background: #e4eaf1; - min-width: 200px; } - -.ARK_SCROLLBAR::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; } - -.ARK_SCROLLBAR::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; } - -.ARK_SCROLLBAR ::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; - -webkit-transition: background .2s ease-in-out; - transition: background .2s ease-in-out; } - -.ARKTOOLTIP { - padding: 8px 16px; - position: absolute; - z-index: 1070; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 1; - line-break: auto; - background: rgba(37, 45, 57, 0.95); - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - border-radius: 6px; - -moz-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - border: 1px solid #D8E0E9; } - -.ARKTOOLTIP .ARROW { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - bottom: -5px; - left: 50%; - margin-top: -10px; - border-width: 5px 5px 0px; - border-top-color: rgba(37, 45, 57, 0.95); - /* right: 0; */ - margin-left: -5px; } - -.ARKTOOLTIP .ARROW.ARKTOP { - border-width: 5px 5px 0px; - border-top-color: rgba(37, 45, 57, 0.95); } - -.ARKTOOLTIP .ARROW.ARKRIGHT { - left: 1px; - bottom: unset; - top: 38%; - margin-left: -5px; - border-top-color: unset; - border-right-color: rgba(37, 45, 57, 0.95); - border-width: 6px 4px 6px 0; - border-color: transparent rgba(37, 45, 57, 0.95) transparent transparent; } - -.ARKTOOLTIP .ARROW.ARKBOTTOM { - border-width: 0 5px 5px; - border-bottom-color: rgba(37, 45, 57, 0.95); - border-top-color: unset; - bottom: unset; - top: 5px; } - -.ARKTOOLTIP .WORDS { - max-width: 200px; - color: #ecf3f8; - text-align: center; - border-radius: 4px; - /* white-space: nowrap; */ - line-height: 21px; } - -.ARK_FIXED_BOX { - display: none; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: 1000; - background-color: rgba(255, 255, 255, 0.4); } diff --git a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js b/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js deleted file mode 100644 index eaf2e00..0000000 --- a/demo/jquery/sdk/5.0.4/AnalysysAgent_JS_SDK_VISUAL.min.js +++ /dev/null @@ -1,3599 +0,0 @@ -(function () { - 'use strict'; - - var _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - function _utf8Encode(string) { - string = string.replace(/\r\n/g, '\n'); - var utftext = ''; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - } - - function _utf8Decode(utftext) { - var string = ''; - var i = 0; - var c = 0; - var c2 = 0; - var c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - } - - function Util() {} - Util.prototype.paramType = function (param) { - return Object.prototype.toString.call(param).replace('[object ', '').replace(']', ''); - }; - Util.prototype.objHasKay = function (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - }; - Util.prototype.ArrayToObj = function (arr) { - var obj = {}; - for (var i = 0; i < arr.length; i++) { - obj[arr[i]] = ''; - } - return obj; - }; - Util.prototype.keyValueToObje = function (key, value) { - var obj = {}; - obj[key] = value; - return obj; - }; - Util.prototype.toDeep = function (param) { - var paramNew = null; - if (this.paramType(param) === 'Array') { - paramNew = []; - for (var i = 0; i < param.length; i++) { - paramNew.push(this.toDeep(param[i])); - } - } else if (this.paramType(param) === 'Object') { - paramNew = {}; - for (var key in param) { - paramNew[key] = this.toDeep(param[key]); - } - } else { - paramNew = param; - } - return paramNew; - }; - - Util.prototype.toDeepObj = function (param1, param2) { - var obj = {}; - - if (this.paramType(param1) === 'String') { - obj = this.keyValueToObje(param1, param2); - return obj; - } - - if (this.paramType(param1) === 'Array') { - obj = this.ArrayToObj(param1); - return obj; - } - - if (this.paramType(param1) === 'Object') { - for (var key in param1) { - obj[key] = this.toDeepObj(param1[key]); - } - } - return obj; - }; - Util.prototype.toDeep = function (param) { - var paramNew = null; - if (this.paramType(param) === 'Array') { - paramNew = []; - for (var i = 0; i < param.length; i++) { - paramNew.push(this.toDeep(param[i])); - } - } else if (this.paramType(param) === 'Object') { - paramNew = {}; - for (var key in param) { - paramNew[key] = this.toDeep(param[key]); - } - } else { - paramNew = param; - } - return paramNew; - }; - Util.prototype.toObj = function (param1, param2) { - var obj = {}; - - if (this.paramType(param1) === 'String') { - obj = this.keyValueToObje(param1, param2); - return obj; - } - - if (this.paramType(param1) === 'Array') { - obj = this.ArrayToObj(param1); - return obj; - } - - if (this.paramType(param1) === 'Object') { - return param1; - } - return obj; - }; - Util.prototype.objMerge = function (parentObj, part) { - if (this.paramType(parentObj) !== 'Object' || this.paramType(part) !== 'Object') { - return parentObj; - } - var obj = {}; - for (var key in parentObj) { - obj[key] = parentObj[key]; - } - for (var partKey in part) { - var partValue = part[partKey]; - var objValue = obj[partKey]; - var partValueType = this.paramType(partValue); - var objValueType = this.paramType(objValue); - if (objValue && objValueType === 'Object' && partValueType === 'Object') { - obj[partKey] = this.objMerge(objValue, partValue); - } else if (objValueType === 'Array' && partValueType === 'Array') { - obj[partKey] = this.arrayMergeUnique(objValue, partValue); - } else if (partValueType === 'Function' && objValueType === 'Function') { - obj[partKey] = this.compose(objValue, partValue); - } else { - obj[partKey] = partValue; - } - } - return obj; - }; - Util.prototype.compose = function () { - var args = arguments; - var start = args.length - 1; - return function () { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - Util.prototype.fnMerge = function (parentObj, part) { - return this.objMerge(parentObj, part); - }; - Util.prototype.arrayUnique = function (arr) { - var tmpArr = []; - var hash = {}; // hash为hash表 - for (var i = 0; i < arr.length; i++) { - if (!hash[arr[i]]) { - // 如果hash表中没有当前项 - hash[arr[i]] = true; // 存入hash表 - tmpArr.push(arr[i]); // 存入临时数组 - } - } - return tmpArr; - }; - Util.prototype.arrayMerge = function (arr1, arr2) { - var a1 = []; - for (var i = 0; i < arr1.length; i++) { - var a1i = arr1[i]; - if (this.paramType(arr1[i]) === 'Object') { - a1i = this.toDeep(arr1[i]); //JSON.parse(JSON.stringify(arr1[i])) - } - a1.push(a1i); - } - for (var y = 0; y < arr2.length; y++) { - var a2i = arr2[y]; - if (this.paramType(arr2[y]) === 'Object') { - a2i = this.toDeep(arr2[y]); //JSON.parse(JSON.stringify(arr2[y])) - } - a1.push(a2i); - } - return a1; - }; - Util.prototype.arrayMergeUnique = function (arr1, arr2) { - arr1.push.apply(arr1, arr2); - return this.arrayUnique(arr1); - }; - Util.prototype.encode = function (input) { - var output = ''; - var chr1; - var chr2; - var chr3; - var enc1; - var enc2; - var enc3; - var enc4; - var i = 0; - input = _utf8Encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - Util.prototype.decode = function (input) { - var output = ''; - var chr1; - var chr2; - var chr3; - var enc1; - var enc2; - var enc3; - var enc4; - var i = 0; - input = input.replace(/[^A-Za-z0-9+/=]/g, ''); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 !== 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 !== 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8Decode(output); - return output; - }; - Util.prototype.isEmptyObject = function (obj) { - for (var name in obj) { - return false; - } - return true; - }; - Util.prototype.format = function (time, format) { - var offsetGMT = time.getTimezoneOffset(); - time = new Date(time.getTime() + offsetGMT * 60 * 1000 + 8 * 60 * 60 * 1000); // 转换为东八区时间 - var o = { - 'M+': time.getMonth() + 1, // month - 'd+': time.getDate(), // day - 'h+': time.getHours(), // hour - 'm+': time.getMinutes(), // minute - 's+': time.getSeconds(), // second - 'q+': Math.floor((time.getMonth() + 3) / 3), // quarter - 'S+': time.getMilliseconds() // millisecond - }; - if (/(y+)/.test(format)) { - format = format.replace(RegExp.$1, (time.getFullYear() + '').substr(4 - RegExp.$1.length)); - } - for (var k in o) { - if (new RegExp('(' + k + ')').test(format)) { - format = format.replace(RegExp.$1, RegExp.$1.length === 3 ? ('' + o[k]).length < 3 ? ('00' + o[k]).substr(('00' + o[k]).length - 3, ('00' + o[k]).length) : o[k] : ('00' + o[k]).substr(('' + o[k]).length)); - } - } - - return format.toString(); - }; - Util.prototype.MD5 = function (value, bit) { - var sMessage = value; - - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - - function F(x, y, z) { - return x & y | ~x & z; - } - - function G(x, y, z) { - return x & z | y & ~z; - } - - function H(x, y, z) { - return x ^ y ^ z; - } - - function I(x, y, z) { - return y ^ (x | ~z); - } - - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWordsTemp1 = lMessageLength + 8; - var lNumberOfWordsTemp2 = (lNumberOfWordsTemp1 - lNumberOfWordsTemp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWordsTemp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - - function WordToHex(lValue) { - var WordToHexValue = ''; - var WordToHexValueTemp = ''; - var lByte; - var lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValueTemp = '0' + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7; - var S12 = 12; - var S13 = 17; - var S14 = 22; - var S21 = 5; - var S22 = 9; - var S23 = 14; - var S24 = 20; - var S31 = 4; - var S32 = 11; - var S33 = 16; - var S34 = 23; - var S41 = 6; - var S42 = 10; - var S43 = 15; - var S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } else { - return WordToHex(b) + WordToHex(c); - } - }; - Util.prototype.clientTimeZone = function () { - var munites = new Date().getTimezoneOffset(); - - var hour = parseInt(munites / 60); - - var munite = munites % 60; - - var prefix = '-'; - - if (hour <= 0 || munite < 0) { - prefix = '+'; - - hour = -hour; - - if (munite < 0) { - munite = -munite; - } - } - - hour = hour + ''; - - munite = munite + ''; - - if (hour.length === 1) { - hour = '0' + hour; - } - - if (munite.length === 1) { - munite = '0' + munite; - } - - return prefix + hour + ':' + munite; - }; - - Util.prototype.delEmpty = function (obj) { - var newObj = {}; - for (var key in obj) { - var inType = true; - var valueType = this.paramType(obj[key]); - - if (valueType !== 'Object') { - if (!obj[key] && (valueType !== 'Number' || isNaN(obj[key])) && valueType !== 'Boolean') { - inType = false; - } - if (inType === true) { - newObj[key] = obj[key]; - } - } else { - newObj[key] = this.delEmpty(obj[key]); - } - } - for (var newObjKey in newObj) { - var values = []; - for (var key1 in newObj[newObjKey]) { - values.push(newObj[newObjKey][key1]); - } - if (values.length === 0 && newObj[newObjKey].constructor === Object) { - delete newObj[newObjKey]; - } - } - return newObj; - }; - - Util.prototype.addEvent = function (el, type, fn, useCapture) { - if (el.addEventListener) { - if ((this.paramType(el) === 'Array' || this.paramType(el) === 'HTMLCollection') && el.length && el !== window) { - for (var i = 0; i < el.length; i++) { - this.addEvent(el[i], type, fn, useCapture); - } - } else { - el.addEventListener(type, fn, useCapture); - } - } else { - if (el.length && el !== window) { - for (var index = 0; index < el.length; index++) { - this.addEvent(el[index], type, fn); - } - } else { - el.attachEvent('on' + type, function () { - return fn.call(el, window.event); - }); - } - } - }; - - Util.prototype.removeEvent = function (el, type, fn, useCapture) { - if (document.removeEventListener) { - if (el.length) { - for (var i = 0; i < el.length; i++) { - this.removeEvent(el[i], type, fn, useCapture); - } - } else { - el.removeEventListener(type, fn, useCapture); - } - } else { - if (el.length) { - for (var index = 0; index < el.length; index++) { - this.removeEvent(el[index], type, fn); - } - } else { - el.detachEvent('on' + type, function () { - return fn.call(el, window.event); - }); - } - } - }; - - Util.prototype.addEleLable = function (eleName, className, id, parent) { - var dom = document; - var createEle = dom.createElement(eleName); - var domBody = parent || dom.body || dom.getElementsByTagName('body')[0]; - if (id) { - createEle.id = id; - } - if (className) { - createEle.className = className; - } - domBody.appendChild(createEle); - return createEle; - }; - Util.prototype.addScript = function (fileName, urlPath, callback) { - var dom = document; - var createScript = dom.createElement('script'); - var domHead = dom.getElementsByTagName('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.id = fileName; - var sdkUrl = ''; - - if (!urlPath) { - if (dom.getElementById('ARK_SDK')) { - sdkUrl = dom.getElementById('ARK_SDK').src; - } else { - for (var i = 0; i < domHead.length; i++) { - if (domHead[i].src && domHead[i].src.indexOf('AnalysysAgent_JS_SDK') > -1) { - sdkUrl = domHead[i].src; - break; - } - } - } - } else { - if (this.paramType(urlPath) === 'Array') { - var commonFn = urlPath[0]; - var path = urlPath[1]; - commonFn([path], callback); - return; - } - sdkUrl = urlPath.charAt(urlPath.length - 1) === '/' ? urlPath : urlPath + '/'; - } - - var sdkPath = sdkUrl.substring(0, sdkUrl.lastIndexOf('/') + 1); - createScript.src = sdkPath + fileName + '.min.js?v=' + this.format(new Date(), 'yyyyMMddhhmm'); // 方舟B SDK地址 - createScript.onload = setTimeout(callback, 500); - domHead[0].parentNode.insertBefore(createScript, domHead[0]); - }; - - function CheckChinese(val) { - var reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); - if (reg.test(val)) { - return true; - } - return false; - } - - Util.prototype.GetUrlParam = function (paraName) { - var url = document.location.toString(); - var wName = window.name; - if (this.paramType(wName) === 'String' && wName.indexOf(paraName) > -1) { - url = wName; - } - var arrObj = url.split('?'); - if (arrObj.length > 1) { - var arrPara = []; // arrObj[1].split("&") - for (var i = 1; i < arrObj.length; i++) { - arrPara.push.apply(arrPara, arrObj[i].split('&')); - } - var arr; - for (var index = 0; index < arrPara.length; index++) { - arr = arrPara[index].split('='); - - if (arr != null && arr[0] === paraName) { - var value = arr[1]; - if (arr[1].indexOf('#') > -1) { - value = value.split('#')[0]; - } - if (value.indexOf('%') > -1) { - try { - var utfValue = decodeURI(value); - if (CheckChinese(utfValue)) { - return utfValue; - } - } catch (e) {} - } - return value; - } - } - return ''; - } else { - return ''; - } - }; - - Util.prototype.stringSlice = function (str, length) { - return str.slice(0, length); - }; - Util.prototype.trim = function (str) { - if (this.paramType(str) === 'String') { - return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } else { - return str; - } - }; - Util.prototype.changeHash = function (callback) { - var historyPushState = window.history.pushState; - var historyReplaceState = window.history.replaceState; - window.history.pushState = function () { - historyPushState.apply(window.history, arguments); - callback.apply(callback); - }; - window.history.replaceState = function () { - historyReplaceState.apply(window.history, arguments); - callback.apply(callback); - }; - var state = historyPushState ? 'popstate' : 'hashchange'; - state = !!window.ActiveXObject || 'ActiveXObject' in window ? 'hashchange' : 'popstate'; - if ('on' + state in window) { - this.addEvent(window, state, function () { - setTimeout(callback, 0); - }); - } - }; - - Util.prototype.deviceType = function () { - var u = navigator.userAgent; - - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - }; - Util.prototype.checkTypeList = function (list, ele) { - var listType = this.paramType(list); - if (listType === 'String') { - var url = window.location.href; - var urlHost = window.location.protocol + '//' + window.location.host; - var urlPath = urlHost + window.location.pathname; - var urlIndex = urlPath + 'index.html'; - var urlHash = urlPath + window.location.hash; - var urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(list) > -1) { - return true; - } - } else if (listType === 'Function') { - return list.call(list, ele); - } else if (listType === 'Array') { - for (var i = 0; i < list.length; i++) { - if (this.checkTypeList(list[i], ele) === true) { - return true; - } - } - } - return false; - }; - /** - * document.querySelectorAll 兼容方法 - * @param {Sting} selectors 选择器 不包含伪类 - * @returns {Array} elements 符合条件的元素列表 - */ - - Util.prototype.selectorAllEleList = function (selectors) { - var eleList = []; - var eleTagName = selectors.split('.')[0]; - if (this.paramType(document.querySelectorAll) === 'Function' && selectors.indexOf('|') < 0) { - try { - return document.querySelectorAll(selectors); - } catch (e) {} - } - var eleId = ''; - if (selectors.indexOf('#') > -1) { - eleId = selectors.split('.')[0].split('#')[1]; - var ele = document.getElementById(eleId); - if (ele) { - eleList.push(ele); - } - } else if (selectors.indexOf('.') < 0) { - return document.getElementsByTagName(eleTagName); - } else if (selectors.indexOf('[') > -1 && selectors.indexOf(']') > -1) { - var nodeList = document.getElementsByTagName('*'); - var selector = selectors.replace('[', '').replace(']', ''); - for (var y = 0; y < nodeList.length; y++) { - var attr = nodeList[y].getAttribute(selector); - if (this.paramType(attr) === 'String') { - eleList.push(ele); - } - } - } else { - var domList = document.getElementsByTagName(eleTagName); - for (var i = 0; i < domList.length; i++) { - var dom = domList[i]; - var domClassNameList = this.paramType(dom.className) === 'String' ? dom.className.split(' ') : []; - if (domClassNameList.length > 0) { - if ((eleTagName + '.' + domClassNameList.join('.')).indexOf(selectors) > -1) { - eleList.push(dom); - } - } - } - } - // var anchors = []; - // for (var z = 0; z < eleList.length; z++) { - // anchors.push(eleList[z]); - // } - // anchors = anchors.sort(function (x, y) { - // return offset(x).left - offset(y).left && offset(x).top - offset(y).top - // }) - // eleList = anchors - return eleList; - }; - // /** - // * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - // * @param {[type]} ele [description] 元素Dom对象 - // * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - // */ - // function offset (curEle) { - // var totalLeft = null, totalTop = null, par = curEle.offsetParent; - // //首先加自己本身的左偏移和上偏移 - // totalLeft += curEle.offsetLeft; - // totalTop += curEle.offsetTop - // //只要没有找到body,我们就把父级参照物的边框和偏移也进行累加 - // while (par) { - // if (navigator.userAgent.indexOf("MSIE 8.0") === -1) { - // //累加父级参照物的边框 - // totalLeft += par.clientLeft; - // totalTop += par.clientTop - // } - - // //累加父级参照物本身的偏移 - // totalLeft += par.offsetLeft; - // totalTop += par.offsetTop - // par = par.offsetParent; - // } - - // return { - // left: totalLeft, - // top: totalTop - // } - // } - Util.prototype.getDomainFromUrl = function (domianStatus, host) { - if (host === '') { - return ''; - } - host = host || window.location.hostname; - - // var regex = /^*\.*/ - // var match = host.match(regex) - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (this.paramType(level) !== 'Number' || level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - // host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1]; - } else { - return ''; - } - // } - return urlDomain.reverse().join('.'); - }; - Util.prototype.isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); - Util.prototype.delNotHybrid = function (obj) { - delete obj.$is_first_day; - delete obj.$session_id; - delete obj.$is_time_calibrated; - delete obj.$startup_time; - return obj; - }; - - Util.prototype.getUrlPath = function () { - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - - return window.location.host + window.location.pathname + hash; - }; - - Util.prototype.detectZoom = function () { - var metaEles = this.selectorAllEleList('meta'); - var ratio = 1; - for (var i = 0; i < metaEles.length; i++) { - var attr = metaEles[i].getAttribute('content'); - if (attr && attr.indexOf('initial-scale=') > -1) { - var attrList = attr.split(','); - for (var y = 0; y < attrList.length; y++) { - if (attrList[y].indexOf('initial-scale') > -1) { - ratio = parseFloat(attrList[y].split('=')[1]); - } - } - } - } - return ratio; - }; - var Util$1 = new Util(); - - function getElementContent(ele, status) { - var eleContent = ''; - if (ele.tagName.toLowerCase() === 'input') { - eleContent = ele.value || ''; - } else if (ele.tagName.toLowerCase() === 'img') { - eleContent = ele.getAttribute('alt') || ele.getAttribute('title') || ''; - } else if (ele.tagName.toLowerCase() === 'a') { - eleContent = ele.getAttribute('title') || ''; - } - if (!eleContent) { - var children = ele.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - // if (ele.textContent) { - // eleContent = Util.trim(ele.textContent) - // } else { - // if (ele.innerText) { - // eleContent = Util.trim(ele.innerText) - // } - // } - } - if (eleContent && Util$1.paramType(eleContent) === 'String') { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - if (ele.tagName.toLowerCase() === 'input' && ele.type !== 'button' && ele.type !== 'submit' && status !== true) { - return ''; - } - eleContent = Util$1.trim(eleContent); - // if (eleContent.length > 0) { - // eleContent = - // } - return eleContent; - } - - var detect = Util$1.detectZoom(); - - // var rootNodeRE = /^(?:body|html)$/i - function getPath(ele) { - var tagName = ele.tagName.toLowerCase(); - var classPath = ''; - var classNameList = Util$1.paramType(ele.className) !== 'String' ? [] : ele.className.split(' '); - for (var i = 0; i < classNameList.length; i++) { - if (classNameList[i] && classNameList[i].indexOf('ARK') < 0) { - classPath += '.' + classNameList[i]; - } - } - return { - className: classPath, - id: ele.id || '', - tagName: tagName - }; - } - function domParentList(ele, status) { - var list = []; - var newPath = []; - var parent = ele; - while (parent != null) { - var eleNodeType = parent.nodeType; - if (eleNodeType !== 1) { - parent = parent.parentNode; - continue; - } - var elePath = getPath(parent); - var pathIndex = null; - if (status !== true) { - pathIndex = getEleIndex(parent); - } - - // if (!status) { - list.push(elePath.tagName + (elePath.id ? '#' + elePath.id : '') + elePath.className); - // } else { - var path = { - // className: elePath.className || '', - id: elePath.id, - tagName: elePath.tagName - }; - if (elePath.row !== null) { - path['row'] = pathIndex.row; - } else { - path['index'] = pathIndex.index; - } - newPath.push(Util$1.delEmpty(path)); - // } - - parent = parent.parentNode; - } - return { - path: list.join('<'), - newPath: newPath - }; - } - - function getEleIndex(ele) { - var parent = ele.parentNode; - var index = 0; - var parnetStatus = true; - var row = null; - while (parent !== null && parnetStatus === true) { - var eleNodeType = parent.nodeType; - if (eleNodeType !== 1) { - parent = parent.parentNode; - continue; - } - var childEles = parent.children; - var childElesPath = []; - var elePath = {}; - for (var i = 0; i < childEles.length; i++) { - var childElePath = getPath(childEles[i]); - childElesPath.push(childElePath); - if (ele === childEles[i]) { - elePath = childElePath; - index = i; - } - } - var isRow = false; - for (var y = 0; y < childEles.length; y++) { - // if (newPathContrast({ newPath: childElesPath[y] }, elePath) === true) { - if (childElesPath[y].tagName === elePath.tagName) { - isRow = true; - } - } - if (isRow === true) { - row = index; - } - parnetStatus = false; - } - return { - row: row, - index: index - }; - } - function parentContrast(clickPathList, eventPathList) { - for (var i = 0; i < clickPathList.length; i++) { - if (clickPathList[i].split('.')[0] !== eventPathList[i].split('.')[0]) { - return false; - } - } - return true; - } - function delPathRow(pathList) { - var copyPathList = Util$1.arrayMerge([], pathList); - for (var i = 0; i < copyPathList.length; i++) { - delete copyPathList[i].row; - } - return copyPathList; - } - /** - * 拥有new_path时,点击元素是否符合可视化元素列表中的元素 - * - * @param {*} clickEleObj 点击元素 - * @param {*} eventEleObj 可视化元素 - * @returns {Boolean} 是否符合 - */ - function newPathContrast(clickObj, eventNewPath, isNotDeep) { - var clickNewPath = clickObj.newPath; - var clickNewPathList = Util$1.arrayMerge([], clickNewPath); - var eventNewPathList = Util$1.arrayMerge([], eventNewPath); - var newPath = Util$1.arrayMerge([], clickNewPath); - var ele = clickObj.ele; - - if (clickNewPathList === eventNewPathList) { - return true; - } - if (clickNewPathList.length < eventNewPathList.length) { - return false; - } - if (clickObj.ele && clickNewPathList.length > eventNewPathList.length) { - if (isNotDeep === true) { - return false; - } - var num = clickNewPathList.length - eventNewPathList.length; - clickNewPathList.splice(0, num); - for (var i = 0; i < num; i++) { - ele = ele.parentNode || document.body; - } - - newPath = Util$1.arrayMerge([], clickNewPathList); - } - var status = true; - var startNum = 0; - while (startNum < eventNewPathList.length) { - var eventPath = eventNewPathList[startNum]; - var clickPath = clickNewPathList[startNum]; - - if (Util$1.objHasKay(clickPath, 'row') === true && Util$1.objHasKay(eventPath, 'row') === false && Util$1.objHasKay(clickPath, 'index') === false) { - delete clickPath.row; - } - if (eventPath.id && eventPath.id !== clickPath.id || eventPath.tagName !== clickPath.tagName || clickPath.index !== eventPath.index || clickPath.row !== eventPath.row) { - status = false; - break; - } - startNum++; - } - if (status === true) { - clickObj.newPath = newPath; - clickObj.ele = ele; - } - return status; - } - function isClassContrast(clickEle, eventClass) { - var clickClass = clickEle ? clickEle.className : null; - if (Util$1.paramType(clickClass) === 'String' && Util$1.paramType(eventClass) === 'String') { - clickClass = Util$1.trim(clickClass) || null; - eventClass = Util$1.trim(eventClass) || null; - if (clickClass && eventClass && clickClass.indexOf(eventClass) > -1) { - return true; - } - } - return false; - } - function bindingContrast(ele, bindings) { - for (var i = 0; i < bindings.length; i++) { - var binding = bindings[i]; - if (binding.prop_name === 'text') { - var eleText = getElementContent(ele); - if (eleText !== binding.value) { - return false; - } - } else if (binding.prop_name === 'class') { - if (!isClassContrast(ele, binding.value)) { - return false; - } - } - } - return true; - } - /** - * 点击元素是否符合可视化元素列表中的元素 - * @param {JSON} clickEleObj 点击元素 - * @param {JSON} eventEleObj 可视化元素 - * @returns {Boolean} 是否符合 - */ - function pathContrast(clickEleObj, eventEleObj, isNotDeep) { - var status = true; - var isNewPath = false; - eventEleObj.bindings = eventEleObj.bindings || eventEleObj.props_binding; - - if (clickEleObj.newPath && eventEleObj.newPath) { - isNewPath = true; - status = newPathContrast(clickEleObj, eventEleObj.newPath, isNotDeep); - } - if (status === true && eventEleObj.bindings && eventEleObj.bindings.length > 0) { - isNewPath = true; - status = bindingContrast(clickEleObj.ele, eventEleObj.bindings); - } - if (isNewPath) { - return status; - } - var clickPath = clickEleObj.path || clickEleObj.link; - var eventPath = eventEleObj.path || eventEleObj.link; - var clickIndex = clickEleObj.index || 0; - var eventIndex = eventEleObj.index || 0; - var clickEle = clickEleObj.ele || null; - var isText = eventEleObj.isText || ''; - if (isText !== '') { - var eleText = getElementContent(clickEle); - if (isText !== eleText) { - return false; - } - } - if (clickPath === eventPath && clickIndex === eventIndex) { - return true; - } - var clickPathArray = clickPath.split('<'); - var eventPathArray = eventPath.split('<'); - - if (clickPathArray.length < eventPathArray.length) { - return false; - } - - if (clickPathArray.length > eventPathArray.length) { - var lengthNum = clickPathArray.length - eventPathArray.length; - clickPathArray = clickPathArray.splice(lengthNum); - // 点击的为子节点则不校验点击元素位置 - // clickIndex = eventIndex - var parentEle = clickEle; - while (lengthNum > 0 && parentEle) { - parentEle = parentEle.parentNode; - lengthNum--; - } - if (!parentEle) { - return false; - } - clickIndex = setIndex(parentEle, clickPathArray.join('<')); - } - if (parentContrast(clickPathArray, eventPathArray) && clickIndex === eventIndex) { - return true; - } - - return false; - } - /** - * 通过new_path 查找元素 - * @param {JSON} path - * @returns {Element} ele 解析到的元素 - */ - - function parseNewPath(path, step, parentTarger) { - var stepPaths = null; - - if (!parentTarger) { - parentTarger = document; - stepPaths = path; - } else { - if (step === 0) { - if (path.length === 1) { - return parentTarger; - } else { - stepPaths = path.slice(0, path.length - step); - parentTarger = parentTarger.parentNode; - } - } else { - stepPaths = path.slice(0, path.length - 1); - while (step > 0) { - parentTarger = parentTarger.parentNode; - if (!parentTarger) { - return null; - } - step--; - } - } - } - var childNode = parentTarger; - var stepPathLen = stepPaths.length - 1; - - while (stepPathLen >= 0) { - var stepPath = stepPaths[stepPathLen]; - var tagName = stepPath.tagName; - - var index = Util$1.paramType(stepPath.row) === 'Number' ? stepPath.row : stepPath.index; - var id = stepPath.id || ''; - if (tagName === 'html') { - index = 0; - } - if (Util$1.paramType(index) !== 'Number') { - return null; - } - var childrenList = childNode.children; - if (childrenList.length < index) { - return null; - } - childNode = childrenList[index]; - if (!childNode || id && childNode.id !== id || Util$1.paramType(childNode.tagName) === 'String' && tagName !== childNode.tagName.toLowerCase()) { - return null; - } - stepPathLen--; - } - return childNode; - } - /** - * 通过Path查找元素 - * - * @param {String} path 元素Path - * @returns - */ - function parseEvent(path) { - var eleObj = parserDom(path); - if (eleObj.length === 0) { - return; - } - var baseEle = eleObj[0]; - if (baseEle.elePath.indexOf('#') > -1) { - baseEle.elePath = '#' + baseEle.elePath.split('#')[1]; - } - var eleList = Util$1.selectorAllEleList(baseEle.elePath); - // var anchors = []; - // for (var y = 0; y < eleList.length; y++) { - // anchors.push(eleList[y]); - // } - // anchors = anchors.sort(function (x, y) { - // return eleOffset(x).left - eleOffset(y).left && eleOffset(x).top - eleOffset(y).top - // }) - // eleList = anchors - var allEleList = []; - for (var i = 0; i < eleList.length; i++) { - var pathObj = domParentList(eleList[i], 'noIndex'); - if (pathContrast({ - path: pathObj.path - }, { - path: path - }) === true) { - allEleList.push(eleList[i]); - } - } - return allEleList; - } - /** - * [parserDom description] - * @param {[type]} path [description] - * @return {[type]} [description] - */ - function parserDom(path) { - var eleList = []; - if (path.indexOf('<') < 0) { - return [{ - elePath: path - }]; - } - var pathObj = path.split('<'); - for (var i = 0; i < pathObj.length; i++) { - var elelPath = pathObj[i]; - eleList.push({ - elePath: elelPath - }); - } - return eleList; - } - - /** - * [offsetParent description] 获取父元素 - * @return {[type]} [description] - */ - // function eleOffsetParent (elem) { - // var parent - // while (elem && !elem.offsetParent) { - // elem = elem.parentNode - // if (elem === document.body) { - // break - // } - // } - // if (!elem) return document.body - // parent = elem.offsetParent || document.body - // while (parent && !rootNodeRE.test(parent.nodeName) && eleCss(parent, 'position') === 'static') { - // parent = parent.offsetParent - // } - // return parent - // } - function elePCOffset(ele) { - var boxPosition = ele.getBoundingClientRect(); - // var realTop = 0 - // var realLeft = 0 - // var elemHidden = false - // // var isFixed = false - - // while (ele != null) { - // realTop += ele.offsetTop - // realLeft += ele.offsetLeft - - // // if (!elemHidden) { - // // elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px') - // // } - - // // if (eleCss(ele, 'position') === 'fixed') { - // // isFixed = true - // // } - // ele = ele.offsetParent - // } - // if (isFixed === true) { - // realTop += document.documentElement.scrollTop || document.body.scrollTop - // realLeft += document.documentElement.scrollLeft || document.body.scrollLeft - // } - return { - top: boxPosition.top, - left: boxPosition.left, - hidden: false - - }; - } - /** - * [elementPostion description] 返回标签元素坐标及是否隐藏 - * @param {[type]} elem [description]标签元素 - * @return {[type]} [description]x-横坐标 number y-纵坐标 number hidden-是否隐藏隐藏 Bloon - */ - function elementPostion(elem) { - // var t - var position = { - top: 0, - left: 0, - hidden: true - // var elemHidden = false - - };if (!elem) { - return position; - } - var elePosition = elePCOffset(elem); - position = { - top: elePosition.top, - left: elePosition.left, - hidden: elePosition.hidden - }; - - if (!position) { - return { - top: 0, - left: 0, - hidden: true - }; - } - return position; - } - - /** - * [isElmentReady description] 页面dom是否渲染成功 - * 仅判断dom列表是否渲染完毕,不保证img加载完毕 - * img加载完触发window.resize进行兼容 - * @return {Boolean} [description] - */ - var openTime = +new Date(); - function isElmentReady() { - if (!document.documentElement || document.documentElement.scrollWidth === 0 || document.readyState !== 'complete') { - if (+new Date() - openTime > 5000) { - return true; - } - return false; - } else { - return true; - } - } - - /** - * [isParent description] 判断是当前元素否为指定元素的子元素 - * @param {[type]} ele [description] 当前元素 - * @param {[type]} parentEle [description] 指定元素 - * @return {Boolean} [description] - */ - function isParent(ele, parentEle) { - // 任何元素都为BODY的子元素 - while (ele && ['BODY', 'HTML'].indexOf(ele.tagName.toUpperCase()) < 0) { - if (Util$1.paramType(parentEle) === 'Array') { - for (var i = 0; i < parentEle.length; i++) { - if (ele === parentEle[i]) { - return true; - } - } - } else { - if (ele === parentEle) { - return true; - } - } - ele = ele.parentNode; - } - return false; - } - - function setIndex(ele, link) { - - // var link = domParentList(ele) - var eleObj = parserDom(link); - if (eleObj.length === 0) { - return 0; - } - var baseEle = eleObj[0]; - if (baseEle.elePath.indexOf('#') > -1) { - baseEle.elePath = '#' + baseEle.elePath.split('#')[1]; - } - var eleList = Util$1.selectorAllEleList(baseEle.elePath); // document. - var index = 0; - for (var i = 0; i < eleList.length; i++) { - var pathObj = domParentList(eleList[i]); - if (pathContrast({ - path: pathObj.path - }, { - path: link - }) === true) { - if (eleList[i] === ele) { - return index; - } - index++; - } - } - return 0; - } - - function boxPosition(ele, blo) { - var boxW = 435; - var boxH = 482; - var num = 4; - - if (blo === 'debug') { - boxW = 260; - boxH = 270; - num = 4; - } - var postion = elementPostion(ele); - var top = postion.top; - var left = postion.left; - var width = ele.offsetWidth; - var height = ele.offsetHeight; - var bodyW = document.body.offsetWidth; - var bodyH = document.body.offsetHeight; - var boxLeft = left; - var boxTop = top - boxH - num; - if (boxLeft + boxW > bodyW) { - boxLeft = left - boxW + width; - if (boxLeft < 0) { - boxLeft = num; - } - } - if (boxTop + boxH + num > bodyH) { - boxTop = top - boxH - num; - } - if (boxTop < 0) { - boxTop = top + height + num; - } - return { - top: boxTop, - left: boxLeft - }; - } - function backH5PathProPath(clickPath, related) { - - // var clickPathCopy = Util.arrayMerge([], clickPath) - var relatedPathCopy = Util$1.arrayMerge([], related.h5_path); - // var step = related.step - // if (step !== 0) { - // clickPathCopy.splice(0, step) - // } - // relatedPathCopy.splice(relatedPathCopy.length - 1, 1) - // for (var i = 0; i < clickPathCopy.length; i++) { - // relatedPathCopy.push(clickPathCopy[i]) - // } - // var proPath = Util.arrayMerge(relatedPathCopy, clickPathCopy) - return relatedPathCopy; - } - /** - * 根据查找元素 - * @param {Map} pageEvents 埋点列表 - * @param {Map} ele 元素列表 - * @returns {Map} eleList 命中元素 - */ - function parserPageEvents(pageEvents, ele) { - var eleList = []; - var parentEle = ele || document.body; - var childEles = parentEle.childNodes; - for (var i = 0; i < childEles.length; i++) { - var childEle = childEles[i]; - var eleClassName = Util$1.paramType(childEle.className) === 'String' ? childEle.className : ''; - if (childEle.nodeType === 1 && eleClassName.indexOf('ARK_') < 0) { - var pathObj = domParentList(childEle); - var clickEleObj = { - newPath: pathObj.newPath, - ele: childEle, - path: pathObj.path - }; - for (var y = 0; y < pageEvents.length; y++) { - var eventEleObj = pageEvents[y]; - if (checkNewPathBase(clickEleObj.newPath, eventEleObj.newPath) == true && pathContrast(clickEleObj, eventEleObj, true) === true) { - eleList.push({ - config: eventEleObj, - ele: childEle, - newPath: pathObj.newPath - }); - pageEvents[y]['inPage'] = true; - } - } - var eles = childEle.childNodes || []; - if (eles.length > 0) { - var childEleList = parserPageEvents(pageEvents, childEle); - if (childEleList.length > 0) { - eleList = Util$1.arrayMerge(eleList, childEleList); - } - } - } - - // } - } - return eleList; - } - function backEasyPath(pathList) { - var path = []; - for (var i = 0; i < pathList.length; i++) { - path.push(pathList[i].tagName); - } - return path.join('>'); - } - function checkNewPathBase(clickPathList, eventPathList) { - if (!eventPathList) { - if (clickPathList) { - return true; - } - return false; - } - var clickCopy = JSON.parse(JSON.stringify(clickPathList)); //Util.arrayMerge([], clickPathList) - var eventCopy = JSON.parse(JSON.stringify(eventPathList)); //Util.arrayMerge([], eventPathList) - clickCopy.reverse(); - eventCopy.reverse(); - var clickPath = backEasyPath(clickCopy); - var eventPath = backEasyPath(eventCopy); - if (clickPath.indexOf(eventPath) > -1) { - return true; - } - return false; - } - - var visualConfig = window.AnalysysAgent.config; - - /** - * [sendMsg description]发送热图SDK初始化完毕信息 - * @return {[type]} [description] - */ - function sendMsg(msg) { - console.log('发送可视化SDK初始化完毕消息===>', JSON.stringify(msg, null, 2)); - - if (Util$1.paramType(msg) === 'Object') { - msg = JSON.stringify(msg); - } - window.parent.postMessage(msg, '*'); - } - - /** - * [getMsg description]接收iframe消息 - * @param {Function} callback [description] - * @return {[type]} [description] - */ - function getMsg(callback) { - Util$1.addEvent(window, 'message', function (msgObj) { - var msg = msgObj.data; - try { - if (Util$1.paramType(msg) === 'String') { - msg = JSON.parse(msg); - } - } catch (e) {} - console.log('获取可视化消息===>', JSON.stringify(msg, null, 2)); - callback(msg); - }); - } - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z = ".ARK_BOX {\n position: fixed;\n width: 390px;\n height: 100%;\n background-color: #ffffff;\n border-radius: 4px;\n z-index: 10000000000 !important;\n background: #ffffff;\n color: #000000;\n box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n -webkit-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n -moz-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n padding: 20px 17px;\n font-size: 16px;\n top: 0;\n right: 0;\n font-family: PingFangSC-Medium; }\n\n.ARK_BOX input[disabled] {\n cursor: not-allowed; }\n\n.ARK_BOX .ARK_TITLE {\n width: 72px;\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 18px;\n letter-spacing: 0px;\n color: #333333;\n font-family: inherit; }\n\n.ARK_BOX .fl {\n float: left; }\n\n.ARK_BOX .pb-20 {\n padding-bottom: 20px; }\n\n.ARK_BOX .textR {\n text-align: right; }\n\n.ARK_BOX button {\n border: 0; }\n\n.ARK_BOX button:focus, .ARK_BOX button:active {\n border: 0;\n outline: 0; }\n\n.ARK_BOX .ARK_TITLE.MID {\n font-size: 14px;\n line-height: 14px;\n color: #252d39;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n\n.ARK_BOX .ARK_TITLE.SM {\n font-size: 13px;\n line-height: 33px;\n color: #4c6072;\n width: 56px;\n display: inline-block;\n text-align: right; }\n\n.ARK_BOX_HEADER {\n font-size: 16px;\n text-align: left;\n color: #333333;\n cursor: move;\n z-index: 1;\n position: absolute;\n top: 0;\n width: 100%;\n padding: 20px 17px 29px 17px;\n left: 0;\n background-color: #ffffff; }\n\n.ARK_CONTENT {\n height: 100%;\n position: relative;\n /* top: 170px; */\n width: 100%;\n left: 0;\n /* padding: 0 17px; */\n padding-top: 165px; }\n\n.ARK_EVENT {\n position: absolute;\n top: 70px;\n width: 100%;\n background-color: #ffffff;\n left: 0;\n padding: 0 17px 10px 17px;\n z-index: 1; }\n\n.ARK_BOX_PAGE {\n position: relative;\n color: #666666;\n font-size: 12px; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper, .ARK_BOX_PAGE .v-radio-wrapper {\n font-size: 14px;\n line-height: 30px;\n color: #252d39;\n font-weight: 400;\n font-stretch: normal;\n cursor: pointer;\n font-size: 14px;\n display: inline-block;\n margin-right: 16px; }\n\n.ARK_BOX_EVENT_ID label, .ARK_BOX_PAGE label {\n font-size: 12px;\n bottom: 0;\n margin: 0;\n max-width: 100%; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper span, .ARK_BOX_PAGE .v-radio-wrapper span {\n font-size: 12px;\n color: #999;\n font-weight: 400;\n font-stretch: normal; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper span.wbText, .ARK_BOX_PAGE .v-radio-wrapper span.wbText {\n font-size: 14px;\n color: #333;\n font-weight: 400; }\n\n.ARK_BOX_EVENT_ID .v-radio-ARK, .ARK_BOX_PAGE .v-radio-ARK {\n vertical-align: middle;\n white-space: nowrap;\n cursor: pointer;\n outline: 0;\n line-height: 1;\n position: relative;\n display: inline-block;\n margin-right: 8px; }\n\n.ARK_BOX_EVENT_ID .boxRadio, .ARK_BOX_PAGE .boxRadio {\n width: 270px;\n display: inline-grid; }\n\n.ARK_BOX_PAGE .ml-24 {\n margin-left: 24px; }\n\n.ARK_BOX_PAGE.mb-15 {\n margin-bottom: 15px; }\n\n.ARK_BOX_PAGE.mb-16 {\n margin-bottom: 16px; }\n\n.ARK_BOX_EVENT_ID.mb-40 {\n margin-bottom: 40px; }\n\n.ARK_BOX .ml-12 {\n margin-left: 12px; }\n\n.ARK_BOX .mr-12 {\n margin-right: 12px; }\n\n.ARK_BOX .mr-25 {\n margin-right: 25px; }\n\n.ARK_BOX .ml-8 {\n margin-left: 8px; }\n\n.ARK_BOX .fr {\n float: right; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-checked .v-radio-inner {\n border-color: #0098e1;\n background-color: #0098e1; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner {\n border-color: #ddd;\n background-color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner {\n background-color: #fff;\n border-radius: 7px; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner:after {\n background-color: #0098e1; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner:after, .ARK_BOX_PAGE .v-radio-inner:after {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transition: all .2s ease-in-out;\n transition: all .2s ease-in-out;\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_PAGE .v-radio-inner {\n width: 14px;\n height: 14px;\n top: 0;\n left: 0;\n border: 1px solid #d7dde4;\n border-radius: 2px;\n background-color: #fff;\n transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out;\n position: relative;\n display: inline-block; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner {\n width: 14px;\n height: 14px;\n top: 0;\n left: 0;\n border: 1px solid #d7dde4;\n border-radius: 7px;\n background-color: #fff;\n transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out;\n position: relative;\n display: inline-block; }\n\n.ARK_BOX_PAGE .v-radio-checked .v-radio-inner:after {\n transform: rotate(45deg) scale(0.8); }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled {\n color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled .wbText, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled .wbText {\n color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper-disabled {\n cursor: not-allowed;\n color: #ddd; }\n\n.ARK_BOX_PAGE .v-radio-inner:after {\n content: \"\";\n display: inline-block;\n width: 4px;\n height: 8px;\n position: absolute;\n top: 1px;\n left: 4px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n -ms-transform: rotate(45deg) scale(0);\n transform: rotate(45deg) scale(0);\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner:after {\n content: \"\";\n width: 8px;\n height: 8px;\n border-radius: 4px;\n top: 2px;\n left: 2px;\n transition: all .2s ease-in-out;\n display: inline-block;\n position: absolute;\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_EVENT_ID input[type=checkbox],\n.ARK_BOX_EVENT_ID input[type=radio],\n.ARK_BOX_PAGE input[type=checkbox],\n.ARK_BOX_PAGE input[type=radio] {\n margin: 4px 0 0;\n margin-top: 1px;\n line-height: normal;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0; }\n\n.ARK_BOX_EVENT_ID .v-radio-input, .ARK_BOX_PAGE .v-radio-input {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0; }\n\n.ARK_BOX_CENTER {\n line-height: 16px;\n font-size: 16px; }\n\n.ARK_BOX_SMALL {\n font-size: 12px;\n line-height: 30px;\n color: #999999; }\n\n.ARK_BOX_SMALL span {\n color: #0097e0; }\n\n.ARK_BOX_EVENT_ID {\n position: relative;\n margin-bottom: 6px; }\n\n.ARK_BOX .ARK_title {\n /* width: 70px; */\n /* height: 36px; */\n text-align: right;\n /* display: inline-block; */\n font-size: 14px;\n line-height: 36px;\n margin-right: 9px;\n color: #666666; }\n\n.ARK_BOX ul, .ARK_BOX li {\n list-style: none; }\n\n.ARK_BOX .PROLIST {\n margin: 0;\n padding: 0;\n margin-top: 10px;\n max-height: 360px;\n border: 1px solid transparent; }\n\n.ARK_BOX_EVENT_ID input, .ARK_BOX_PAGE input, .ARK_BOX_EVENT_ID select {\n width: 274px;\n height: 30px;\n background-color: transparent;\n border-radius: 0px;\n border: 0;\n border-bottom: 1px solid #d2d2d2;\n color: #333333;\n font-size: 14px;\n line-height: 30px;\n outline: 0 none !important;\n margin-left: 16px; }\n\n.ARK_BOX_EVENT_ID input.error {\n border-color: #e00000; }\n\n.ARK_BOX_EVENT_ID input.PROID {\n width: 246px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX_EVENT_ID input.PROVALUE {\n width: 188px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX_EVENT_ID input.PROVALUE.width246 {\n width: 246px; }\n\n.ARK_BOX_EVENT_ID input.PROREX {\n width: 216px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX .PROTYPE, .ARK_BOX .PAGETYPE {\n width: 246px;\n margin-left: 12px;\n background-color: #f4f9fd;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAIxJREFUCB1jzG9dJv6f6Zf/pMqEWQxYQF77vBQmDtatTAyMfxT+//vXn9c6vwldXV77/FqG/4yT/n//L8c0sSruJDMTg+9/hv/FyIpBiv7/+1/BxPjfB6SGEWZKQfs8p7//GDYzMjD2MjAx/AYpAhkwoTJpH0gNXCGIA1MMYiMrAvExQG7bInsQRpcAAB00POpoifV7AAAAAElFTkSuQmCC) no-repeat scroll right center transparent;\n cursor: pointer; }\n\n.ARK_BOX input::-webkit-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:-ms-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input::placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:focus, .ARK_BOX input:hover {\n border-color: #57a3f3; }\n\n.ARK_BOX input::-webkit-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:-ms-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input::placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:focus, .ARK_BOX input:hover {\n border-color: #57a3f3; }\n\n.ARK_BOX_EVENT_ID_ERROR {\n display: none;\n position: absolute;\n bottom: -19px;\n left: 79px;\n font-weight: 700;\n font-size: 12px;\n color: red; }\n\n.ARK_BOX_ChOICE {\n width: 199px;\n height: 95px;\n float: left;\n position: relative;\n border-bottom: 1px solid #f1f1f1; }\n\n.ARK_BOX_ChOICE .ARK_BOX_LIKENUM {\n font-size: 12px;\n color: #0098e1;\n line-height: 30px;\n width: 100%; }\n\n.ARK_BOX_ChOICE span {\n float: left;\n margin-left: 18px; }\n\n.ARK_BOX_ChOICE input {\n opacity: 0;\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n margin: 0;\n padding: 0; }\n\n.ARK_BOX_ChOICE input + label {\n position: absolute;\n cursor: pointer;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n font-size: 18px;\n line-height: 18px;\n text-align: center;\n color: #999999; }\n\n.ARK_BOX_ChOICE input + label:after {\n content: '+';\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n border: 1px dashed #d4d4d4; }\n\n.ARK_BOX_ChOICE input + label:before {\n content: '';\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n border: 1px dashed #d4d4d4; }\n\n.ARK_BOX_ChOICE input:checked + label:after {\n content: '+';\n color: #0098e1;\n border: 1px dashed #0098e1; }\n\n.ARK_BOX_ChOICE input:checked + label:before {\n content: '+';\n color: #0098e1;\n border: 1px dashed #0098e1; }\n\n.ARK_BOX_SAVE {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n border-top: 1px solid #e5eef4;\n height: 60px;\n padding-top: 13px;\n /* padding: 15px; */\n background-color: #ffffff;\n padding-left: 245px; }\n\n#ARK_BOX_SAVE {\n -moz-user-select: none;\n -ms-touch-action: manipulation;\n -ms-user-select: none;\n -o-transition: color .2s linear, background-color .2s linear, border .2s linear;\n -webkit-transition: color .2s linear, background-color .2s linear, border .2s linear;\n -webkit-user-select: none;\n cursor: pointer;\n display: inline-block;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0;\n padding: 6px 15px;\n text-align: center;\n touch-action: manipulation;\n transition: color .2s linear, background-color .2s linear, border .2s linear;\n user-select: none;\n vertical-align: middle;\n white-space: nowrap;\n width: 60px;\n height: 32px;\n border-radius: 15px;\n cursor: pointer;\n color: #ffffff;\n border: 0;\n background-color: #0098e1;\n outline: 0 none !important; }\n\n#ARK_BOX_SAVE:active {\n background-color: #0086c7;\n border-color: #0086c7;\n color: #f2f2f2; }\n\n#ARK_BOX_SAVE:hover,\n#ARK_BOX_SAVE:focus {\n background-color: #47c3ff;\n border-color: #47c3ff;\n color: #fff; }\n\n#ARK_BOX_CANCEL {\n /* margin-top: 15px; */\n width: 60px;\n height: 32px;\n /* float: right; */\n font-size: 14px;\n line-height: 30px;\n border: 0;\n background-color: #ffffff;\n color: #999999;\n cursor: pointer;\n outline: 0 none !important; }\n\n#ARK_BOX_CANCEL:focus,\n#ARK_BOX_SAVE:focus {\n border: 0; }\n\n.ARK_EVENT_LIST {\n border: 0;\n border: 1px solid #eeeeee;\n border-radius: 5px;\n background: #ffffff;\n color: #000000;\n -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n -moz-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n min-width: 80px;\n min-height: 13px;\n position: absolute;\n top: 20px;\n left: 500px;\n padding: 0;\n max-width: 250px;\n z-index: 100000; }\n\n.ARK_EVENT_LIST a.ARK_EVENT {\n max-width: 110px;\n height: 24px;\n line-height: 24px;\n color: #0098e1;\n margin: 5px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n text-decoration: underline !important;\n cursor: pointer; }\n\n.ARK_SHOW {\n display: block !important;\n visibility: visible !important; }\n\n.debugLog {\n top: 0;\n left: 0;\n position: absolute;\n width: 260px;\n min-height: 270px;\n padding: 20px;\n z-index: 999999999; }\n\n.debugLog .l-list {\n position: relative;\n overflow: hidden; }\n\n.debugLog .l-list div {\n color: #ffffff;\n font-size: 13px;\n line-height: 24px;\n word-break: break-word; }\n\n.debugLog .bg {\n width: 100%;\n height: 100%;\n background-color: rgba(47, 50, 58, 0.8);\n box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n position: absolute;\n top: 0;\n left: 0; }\n\n.debugLog .cha {\n position: absolute;\n right: 20px;\n color: rgba(255, 255, 255, 0.5);\n top: 20px;\n cursor: pointer;\n font-size: 14px;\n width: 10px;\n height: 10px;\n cursor: pointer; }\n\n.ARK_HOVER, .ARK_CLICK {\n outline: 1px solid #e00000 !important;\n outline-offset: -1px !important;\n /*position: absolute;*/\n /*background-color: red !important*/ }\n\n.ARK_SHOW_DISPOSE {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(20, 137, 226, 0.2);\n border: dashed 3px #1489e2 !important; }\n\n.ARK_SHOW_DISPOSE.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_SHOW_DISPOSE:hover, .ARK_SHOW_DISPOSE.ARK_NO_LIGHT:hover {\n background-color: rgba(20, 137, 226, 0); }\n\n.ARK_SAVE_DISPOSE {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(20, 137, 226, 0.2);\n border: solid 3px #1489e2; }\n\n.ARK_SAVE_CLICK {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: transparent;\n border: solid 3px #1489e2; }\n\n.ARK_IS_EDIT {\n position: absolute !important;\n bottom: -21px !important;\n left: -3px !important;\n background-color: #1489e2 !important;\n font-size: 12px !important;\n line-height: 12px !important;\n color: #ffffff !important;\n padding: 3px 5px !important;\n white-space: nowrap;\n margin: 0 !important;\n display: block !important; }\n\n.ARK_SAVE_DISPOSE.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_SAVE_DISPOSE:hover, .ARK_SAVE_DISPOSE.ARK_NO_LIGHT:hover {\n background-color: rgba(20, 137, 226, 0); }\n\n.ARK_SAVE_PRO {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(255, 163, 0, 0.1);\n border: solid 2px #ffa300; }\n\n.ARK_SAVE_PRO.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_NONE {\n display: none; }\n\n.ARK_CLICK_ELE {\n position: absolute !important;\n /* width : 2px;\n height : 2px; */\n z-index: 999999999 !important;\n display: none;\n /* background-color: rgba(0, 0, 0, 0.3); */\n /* background-color: rgba(20, 137, 226, 0.2); */\n border: solid 3px #1489e2;\n /* transform:none */ }\n\n.ARK_PRO_ELE {\n position: absolute !important;\n /* width : 2px;\n height : 2px; */\n z-index: 999999999 !important;\n display: none;\n /* background-color: rgba(0, 0, 0, 0.3); */\n /* background-color: rgba(20, 137, 226, 0.2); */\n border: solid 3px #ffa300;\n /* transform:none */ }\n\n.ARK_ADD_PRO {\n width: 100%;\n height: 40px;\n background-color: #f4f9fd;\n border: 0;\n border-radius: 4px;\n margin-bottom: 20px;\n margin-top: 10px;\n color: #1489e2; }\n\n.ARK_ADD_PRO img {\n margin-right: 9px;\n margin-bottom: 3px;\n width: 11px;\n height: 11px;\n vertical-align: middle;\n position: relative;\n display: unset;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\n.ARK_PRO_ITEM {\n background-color: #f4f9fd;\n border: 0;\n border-radius: 4px;\n margin-top: 10px;\n padding: 20px 16px;\n display: inline-block;\n position: relative; }\n\n.ARK_ICON {\n width: 24px;\n height: 24px;\n display: block;\n margin-left: 4px;\n margin-top: 6px; }\n\n.ARK_ICON.ICON_XQ {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAelJREFUSA3VVs0rRFEUP+d6UdQg7PwBFmwsZGspbHxtNGJDFjNRU2bykZJBioyiLGawZC//gKyQj8X4LLKRkiym8N49zp28STPPu9M0s3Dqde89H7/fOfed++7Do5OrVkLYJKJayKMg4hMSDBkKXAAMNzfW7ecRHw5Pr9sAaRMOT+KUT+DfWAqbky+sFJzAyCb/wNJO2eeXNQ8E3YTEZeNuZVX1xMxwR0IXnxXB55cZJYJ2ELCBAEJKGHl9falmcK+OQLtFvvBuDYP3AooAEHr4KWaSIBH2ja7EKnQE2goM/Cg3uc+EkPfSgnXVciiwFSRv1ofh4eWbG4m2gpWQ95YBHhCKUr6CGRDwZjXY/+gGrmzaCpQTCtGFUpaqeVIkvRtFRo+9dBtTWbk5RUIDxyaUxW2fElF6uRz0ntlrtzErgnSAhEwE/HM79el6p3VOBEByktA694eje2MLsQYnYFuXG4GK5j7l9u02JZz5wluzNmD66PqSxxa3m6RlDUgQF4CJOz7JmcJEiNTJhqlMo6aLTClbGHQEQHLGTuE/OsK7v6yuW7QWGlzklp/+KzilF6TOiqO4EqiISGhwVkfChy53ghQJinGeZ3w9+Ug/Cyg+UH6O8v9vNHX7Jy9ox/pyVyrM5J9FoX9bvgFfDa+ln7mJKwAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_XQ:hover {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd1JREFUSA3dljlLA1EQgGde4i2aIiESVPwB2tpbilYabUSwUqwEjQd4NCkkRhQsFFL4A7QX/4SFRyF4gEnwiuAFKnH3jbOrayRu9oWYNAaS3fdm5vvevF2yi77lRCfpEAOgRijqB5PogmG3AUeEkdRU804x+d5osot0ioE3Eqdign+yDLb4OVGK85IL3Pms2h+9rpH0vghEQUIgJNgq87hnL0cCL6r6vARSpjcBsJtQbAiQgi/aaPpR9zJ8UCVQblHD2pWPgf2IGBJEdQRYDogzDB5oWb33qATKDnRNqzchQp5LHdaBbSzr5O3CtHit49iDk0TZQWq86ZSJF7zyTK4wHHhyORaIO8GNmLIDEyBcvSChGkAzhyjFE7iozxwofjKrcki8CwX2XJV4bKXU1lcd3U407ltjp2NegmzA8+NLyB+Nt2bP240LEhDJOZ3wwBdJbPtXEm12YGuuIIFZzHcRAQV1DfZ9S8mwBcw+Ol7khpVEu6bRkABxKN/oLLv4W4TUw+fzdnFHgf4OHVw0KvkWAvNrhzDn7OUcctyi1HRThDMWcmK/Agw5zZXjKDCK7iabw0oJ/UFgSQTiNAL++vdEgBssr9jN1cG/eKJh0nhA52yxwMAnk98sSv3a8gEW3qVw8YWlQQAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_XQ.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd5JREFUSA21VksvA1EYPbcvfUTr0SKUKIkm3SBIhA0bicR/YCFYCz9CIuwtLST+gKTCko2FV1dEE1rxiFIh02o7ve6dZph4zL2k/ZLJfczcc8733TMzlwSWE+NUxRpAgyhrkCSxYob4lxKJ+SFfsLvJUVb4o9scVvefkxauvNzgXGmPJpgGGUFlo+IENhn96WwRGycviN3n4XEQjLa7MN7lBpFYLCRQi8DKfhpPmSLGOl14UFRsxl5RpMBE2C2kEJboPJXDZbqA2X4v4k95BH12jIRc2IlnhOD8ASGBUijhUEJxzKwXPVcQqrUhU2CpSYSQIFxvg83KzExLFWeV0Wof8dsl4CUy8DgsmOv3gbAM9Ai4rZjs9epD01aYAV890FIFu+XTM5EGB2qcUkvFe/BVHq/91pnCXKV+vfXjWE6GYWk2TzWbLmynsH78ikcB0Z8JdK4CS2D3QsFiNIW9q6w+/a01fdEOb3I4vctptlTp5yYbUbhbj27fMNzmNE5/9E0JDq6zpup0lICH+fiXMC3RdJ8Xg60/KzPiNf6XgDuTfyJEJP8m4Cp1ktEOl9Y3Kuf9Zq8Vobrf32rTPdDBOMlUT7V26XOyrekeyIKYPccISJL/oMsdJUx2sqj0seUdh92PWTODHHwAAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_REX {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAphJREFUSA3VVk1oE0EUnrfZxpRqCoVajCKJMbWIpa2mklLQm9CKF1HwIIgitAdPoicFo1i8K168CSIIgvTi1VOTCpIfQkvW0qQk0Vil21Rl02ySfb4Rp7i7LkpJDg7svnlv3vu+N29mZxbiCWUCgT1BxH2sRQ0Y0xjArLRTmoZYUilKjE1FRg69bhE+S6c/dWlG5REi09lcIoutAv4dZz6T66PkVyn59rTI4IFVKvvuthGItNtOIAsmq6TpSVTDtwyYF5DVaDzm9njuhg/7y3PJ7DPSR3kMH5M75NPHBw8WuW5tjgQrKytucg7v6PN2Ges1b72m39Rrmy/JNg4Ix8Al3ZABFxrNDmP0iL9kBRa6I4FwCPt8GvW1bPZLVK2qlXw+7ymv64y2YGl0qD8n/JzkP60BL9d6VT3LkOUCgcAmB6PA3kS24Hu3vNztBM7tf50B38ux1Pvv9HXmJNl1QYAZRvNpVdN0YLBItglht0obAZVi15qmRsnxFgAYBPAQGZ53e+Vz4WBwYwtAck2OD4eSQp9LKjOdnZ2Pjw7s/yhsXNpKpOrqXmA4LZzGRvpniOSN/rU+y+sv7DaJeLFeqwatdhsBZU3VMLex4dB1hlAoV/TnfD1+jmLzZDy9dGY+tXTK7G3WbARi2O/36/QN3Oc6cSLN5AqVajGTKXTT6fuCrCfQMC7zJ7ZQ7BFxVmlbA8qQDj8+DzDI+Y4IIL1B/du/9KiwC0mHpuiapI2gx93zYa2pSvGkchVcrq1FNEVZFDQaQTTYHmRS3jJk36YDA73f4inlkoF4jzWajlM3A8EGSHAtMhQqme2ktes+4EQc23GRbZls0/D/EvArk3beZ4lepfmkMrnNCvwxjF/62NAf0JH7Ctr92/ID4uMOd90r/84AAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_REX:hover {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAApdJREFUSA3VVk1oE1EQnnmbxNTSVEq3wSQFsQcvXsR6VbwUWtGDKHgQbEVIDyK2te1BwSgWSSoiahE9aAURBEF68aonwZO3gpco2STabq2GNml+d5wHfSW72yCU5ODCMv/fvJl5+96ifs8YpBo8A6AINOlBwAIiLAT8u0exO24YLETNqd73TcKH4OzPdsuqPiK0ytAdT1GzgOtxeh4sBfWEsSTqlc3kl68Gl4iop2UJ1GJbnsCjMjlpjEg8njU+I2GAbSVC+gTetlsrY/qP7oTxCgmObMaUvB5xIjsRNpwYUm5Ywfw8+ICg37tHOwS4a0AQ5LFcfLsJclgIcU34fIOaz3MqMx5KbwcudQ0rUAHZaKjAfOFA3Iz9guKffS/Iv26mwRKQNseCSemHY8rbTRtWUO8q27WqlU4jQPL7CBalDWuo98bN0P6nq531vk7+nxXIvTyXMNYJIQma55wCIKi+3IBauZiDRdYNKr2TuhJwKzp+w0aMHa/zOi1AfMizOBvobD+TjHbltgA0bWhlIvxFyXoiNeOntjljWs8qnaSuFq1plTABjionczIyw+fUh7VcfkH2X+mdlAjPF7HS59S7EpAG3Gr7szzVO84tSuXN9Gs5D2kli44FZzMnexLZAbu3XXIlUObhYSgLhDtSRkQ62B+5CESLz5/kOnnLvkGioxZZI8Rv5L7RpeKc1DUDrHHH+byNIfcf4KYK+Hgcq8zf2JRjSq8on8qKtVFXgo6aN7OKVcFf6yUQ2tYQbVEOAcnq40r2+vzWN4fJ/aF9ndbX9ETmAgfdBqvWsHQ7EPHuEpczVyJpu56lVt0HMpHEbjhk10p2qPh/E8grk7f3MleAaT5vhnbYgW3D5KVPpcpdAnqHrf5t+QvWh/ZinlE//gAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_REX.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAoVJREFUSA3VVj1oFEEUfm9m9/aye3eJcgkELxLsTGklqI2doqJga2UTRIyVYqUoFsEfLAQxomBnJ7axsbGzsbMxSi6/Rwioud292533nDEZk+zeiYZc4YPlzcz73vvem7czuzh4v36CFUwBcA12SRAwRIQ3laI/jtXJet136N5wH7zfpfjQUk5xKeJrKdCiMJnvZnCTpCfTuOqrx7qSc5qgNxIIWGXmoZ4R2LR7TuBYpqxmgfj1B7wExkCXmkiBHweK/Kxf8sqXprgDDGPGx9iqRZqouLicjWHmXQkSEC4RjdV8Ohprkm8tuLAa4mR/mS8y8cHAEY+8As4gMlUEdwz+RwKbjSch9oBjH2BqNsJ3bSELAATC4caAVPMW103/VQ/MdjUSPK4Pz3yBVNsEUynvWWu71TaIUrfgZr3rFlmnz2s4vXEy58tFecNkbyRSeCtM01QkODMawBWLz+pcBUmK/mxTXF0HIhWEeIUM4b4Arg86yScboOTBxIEynxoN6FfweoiXTEXWbnWOICQaSonPW8CIr15IwR8Wmvhgff+tZbtOFJwMKX+f5QhAyu2eerY/4IcIvLTwne+afhhAK8FDy5E8thTh4ZzDloU8wYbRBUoKAp5bbK0EtyXyTJvdUgFxWld5KFJ8pkV4Ok64YnFZnW+yUgAoAYl4JOCn1kEyqZEAngC3QZPp632r6KLirfPNcY7AF6KxwizmQjzrFZzfTd10yY/SRNUYuNrn0kLWmiNwHQ59KW7GBOOtOO3POnSa6/zXPEdMlqVqZO05AgMY9umtVub5B9Fb20G6NrkDdkdL/y9Bk2Av6itMV4BzixEc2VH9XZzMR38llJf1m/Uae/3b8hNICftztdejQwAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_NUM {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAnZJREFUSA3tVjtok1EU/s5NalJDsa0PUHTwgXRQbAuCUESdfA26mEERjJaqg0Fj0NAuWaxVqaFRESsmoEPBDopD0ElRqi5GB5EaERE7GPERaQyJ+N/juSkJiSV1SLL1LOf+//3u95177rkPehZ/u50Jw8y8FDU0IpogRo/dkCvg8IbOtlgN+TH2MrETxMMYi49zLYlLuQy3BF9fmxX4b37tMyGkdOn42WiPBjaBKaeI7gz1Hrhnxvgv3FyU+235CVgBhYmGhjmhQf++j//ykVnprs42wU03b390UER8BHolvU0MXqlg26+bFo5iMvmOCAvA/AKEdQz6Y3e6VoV87u8Fphmr6PTA7XlCfkQ2TCzc5+loXYI1AH3QpE9R+stegJfJRuoO9x3cqAi7RajFyma6C+QFX7GKMjrbLqC5Ev0DAw56PFmZ5kMhWgvobeafanTdN7454Hkk4lmG7jLfpVZRwAZrvgFqwrfCANmRU22m1SDiiyf2/DB9QSItaUqJSH5MAW98RYFSUDXtigIWbPloFaMYlaRoqk2ckFSRLzTaYsSDLCcCo1nWpTjbQlBlZXosHHOoX8lDcki9d8L5PGOlM1I5WwUcNn08mdwilfNaJi65127OZUzfSGogulm8U9L2VHyZlc1Apb+2a81X2KJL5wLun6RwTSpph7c/Eqf05zcS4XLJ8/nWxTwi/pNmvuE9E3miGXelGFJ2h+t6Gbt8lAk0ki0hEUYFfNUAhwKek6ToqCzuuGTksSK1K9zruWUqSsGxnhmXRSgpkUeUQkfpHigKzR7XxVRUaJStQQVMVb/rL2Bu//wFXVWc0wcbzvzLot7Plr8avfRhA7RvpQAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_NUM:hover, .ARK_ICON.ICON_NUM.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAlxJREFUSA3tVktoE2EQ/mY3acSgtTUPsNmCRQRBoT14kqKe6uOgZ/GilNaKFzUm117TBAs+qK2oBw8efRyKnhQFT6IeRKQHH9ktGoPVKGpisjvOn3ZDIm4tJPXUvczs/8983+x88+8uhTPmXrYxBXAMLb3IIh1DPgVOhOF8onu6lfihtLWfbZ5CKJXlVgLXYylsrX5hOfwVgn921bdYBDNTNDM7BOadDC5prN/MJbvuqJxo+kPERjlOjB65tXyaPv4+vuHdn3iLahAdMzOO41ySMdsiif027NuRtHl40zkO2Fx+IuAnhDwq+0fLduVZ7KzZuWSCnsm5dgYdI6LpfMLoC4aNrXJe3rCDRKFkHhJgQyMM5pPd/TrRQQHu+FXB4JIJvha+90pbVoNwTyW9PUJFgO7L2jY42KPW/DruKjsS73pAQNEB71D39ZdnizQN61UgOfjkJjAt+ESbQcTmydhntTdKEkX4IiTVHDdeWU+C+qBmfE8CZ6FyOeu1qkTUeZ95RjQgY9zqUOSjLFGMdSJ27WndohoI1HREUtnjkUx2YG178DmBfkjigApWe/LG3S2iv5Dnrva+WOHq3kRmdpeAryKmxy6waxsIvpWsXge4yA6dfz3cWZA2T8pZ2BdOmU8LP82XzNgoIGPBkHFDNDClgCvhVPaRzXxLaRDw47IL7NoGgkBwzQxBuybjOaECcmeM0xq0ERnPVwLwUId+4GMydl1NlNbWtl1EvyBEORH3qs/v77NOGXMucM2uvK5rrfBwGjTwiGlq+X8QkKU+0E2V+ZfkeUz5s1ju35bf6GXjj9JSLtoAAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_DEL {\n position: absolute;\n top: 11px;\n right: 11px;\n width: 8px;\n height: 8px;\n margin: 0;\n padding: 0;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAAIxJREFUGBlNjjESwjAMBE8y/IfkD/SuQs0DGGjgC5mh4gcZSqjo+QPDf4htcsnII1Xn2/NJcuyHswS8b5f9F24O/b0BcqOE+Yfn6TpsjFNLzo8Q8BGaNBjSNTq+TbN1DtTQiBcKMAWjrVTCOhNE/bK4c8CtiLpC9DeJg53Vek9LwpbHGWQxdVHdpYT2D69xRVCaoaWHAAAAAElFTkSuQmCC) no-repeat; }\n\n.ARK_ICON.ICON_I {\n position: absolute;\n top: 9px;\n left: 60px;\n width: 15px;\n height: 15px;\n margin: 0;\n padding: 0;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAc5JREFUKBV9Uj1PG0EQ3dkjCidcpKBIqIESQYXgT6QgcpEIoQPRINlgCF+mth0+FL4qBDJGSCBZAlHxExBUQAmiJwgQFJjzAXeTeTbrnJDDSnczO++9ud03R+o/a3Rm/bP3bNV//ODfzI45f6rR6G1xMJ3rY+ZxVtwk2IM8EUXqgkhNL032roX5FfHI3Fb9k+flhNikiZJUax0sJLovh+Y3v3DR7+SAM6zUeYR0TybZc4smNabT85O3Id3vrNq61vnhqGvqaCD5TuJ3ft8vFlYLHKzI/htwjVc8nXOka6MI+8PCWCor5fJCHbjsWmLpjX9iud8EjhoWGlE4AidNk8RBAnUNVxVzM+4YJiJfnuqteGIw8JhUez6ftzTGIcDD690MpxTDxzZAicfsHl+4nzSpmmsBInDVEN6LY9PbDYrIbmu07/Xi1PcrOdsZxvGeyGBe4HVIfhiNRv2S29IpFTCnZRy2IVWLwDFvS6k54BVD4qnsrjR5fDsu0wRCzBmapaTzA/XylyWxrYiDwkuxcDKYyXUZDxCx993CqcBk67oB8LAqXy5v5Yf5lf2qfPWTiTpkhC7MIVZH4uzsQtLZM7yqYgNijhgHXIU5ph6OfwHgJr3gZ7nUAgAAAABJRU5ErkJggg==) no-repeat;\n cursor: pointer; }\n\n.ARK_SCROLLBAR {\n overflow-y: auto;\n overflow-x: hidden; }\n\n.ARK_DROPDOWN {\n width: 238px;\n will-change: top, left;\n display: none;\n left: 68px;\n top: 33px;\n height: auto;\n border-radius: 2px;\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n z-index: 500;\n background: #fff;\n position: absolute;\n padding: 6px 0 !important;\n max-height: 230px;\n overflow-y: auto;\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: 40px; }\n\n.ARK_DROPDOWN.TOP {\n top: -120px; }\n\n.ARK_DROPDOWN li {\n position: relative;\n cursor: pointer; }\n\n.ARK_DROPDOWN span:hover {\n background: #f0f6fc; }\n\n.ARK_DROPDOWN span {\n display: block;\n height: 34px;\n margin: 0 1px;\n padding: 0 9px;\n font-size: 14px;\n line-height: 34px;\n color: #4c6072;\n background: #fff;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n -webkit-transition: background .2s;\n transition: background .2s; }\n\n.ARK_DROPDOWN .selected span {\n color: #1489e2; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar {\n width: 4px;\n height: 4px; }\n\n.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb {\n background: #e4eaf1; }\n\n.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb {\n background: #e4eaf1;\n min-width: 200px; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px; }\n\n.ARK_SCROLLBAR ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px;\n -webkit-transition: background .2s ease-in-out;\n transition: background .2s ease-in-out; }\n\n.ARKTOOLTIP {\n padding: 8px 16px;\n position: absolute;\n z-index: 1070;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n filter: alpha(opacity=0);\n opacity: 1;\n line-break: auto;\n background: rgba(37, 45, 57, 0.95);\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n border-radius: 6px;\n -moz-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n border: 1px solid #D8E0E9; }\n\n.ARKTOOLTIP .ARROW {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n bottom: -5px;\n left: 50%;\n margin-top: -10px;\n border-width: 5px 5px 0px;\n border-top-color: rgba(37, 45, 57, 0.95);\n /* right: 0; */\n margin-left: -5px; }\n\n.ARKTOOLTIP .ARROW.ARKTOP {\n border-width: 5px 5px 0px;\n border-top-color: rgba(37, 45, 57, 0.95); }\n\n.ARKTOOLTIP .ARROW.ARKRIGHT {\n left: 1px;\n bottom: unset;\n top: 38%;\n margin-left: -5px;\n border-top-color: unset;\n border-right-color: rgba(37, 45, 57, 0.95);\n border-width: 6px 4px 6px 0;\n border-color: transparent rgba(37, 45, 57, 0.95) transparent transparent; }\n\n.ARKTOOLTIP .ARROW.ARKBOTTOM {\n border-width: 0 5px 5px;\n border-bottom-color: rgba(37, 45, 57, 0.95);\n border-top-color: unset;\n bottom: unset;\n top: 5px; }\n\n.ARKTOOLTIP .WORDS {\n max-width: 200px;\n color: #ecf3f8;\n text-align: center;\n border-radius: 4px;\n /* white-space: nowrap; */\n line-height: 21px; }\n\n.ARK_FIXED_BOX {\n display: none;\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1000;\n background-color: rgba(255, 255, 255, 0.4); }\n"; - styleInject(css_248z); - - var ysMsg = '页面上每个可点击的位置都被视为元素,通过选择元素来圈定当前定义的事件生效范围,即点击哪些位置会上报定义的事件。
1 当前文本:指定内容,不区分元素类型,当文本发生变化时,埋点失效。
一般用于给某个特定内容文本埋点,
比如:
圈中按钮上的文字【登录】,当仅选择当前文本时,如果页面上有个非按钮的链接也叫【登录】,则在两处触发点击时,都会上报该事件。
2 当前位置:指定位置的元素,当内容发生变化时,埋点仍然有效,页面结构发生变化时,埋点失效。
一般用于给某个特定位置埋点。
3 同级元素:指与埋点元素的所有父级元素标签类型及元素个数相同的元素,一般用于给列表埋点,可以添加属性,区分同级别但不同内容的元素。
4 同类型元素:指与当前埋点元素的Class属性值相同或包含当前埋点元素的Class属性值的元素,点击相同类型的元素时会上报同一个事件,通常可以添加属性,区分同类型但不同内容的元素点击数据。
四个选项可以结合使用,
比如:
可选择当前位置+当前文本来给特定位置上的特定内容埋点
可选择当前文本+同类型元素来给相同控件相同名称的'; - var ymMsg = '可以选择埋点生效的页面:
1 当前页面:指仅在当前页面(URL) 点击相应元素才触发上报该事件
2 全部页面:指在所有接入SDK的页面中点击相应元素,都触发上报该事件。比如有非常多的商品详情页,每个页面上都有【加入购物车】按钮,即可选择全部页面,那在任何详情页上点击加入购物车,都会上报到同一个事件中,方便统计分析。'; - var eventHeader = '
' + '{CHANGETEXT}' + '(可拖动)' + '
'; - - var eventIDBox = '
定义事件' + '
' + '事件ID' + '' + '仅支持字母、数字和下划线,且以字母开头' + '
' + '
' + '事件名称' + '' + '建议您命名不超过50个字符,便于阅读' + '
' + '事件属性' + '
'; - - var eventProItem = '
  • ' + '
    ' + '属性ID' + '' + '
      ' + '
    • 字符串
    • ' + '
    • 数值
    • ' + '
    • 布尔值
    • ' + '
    ' + '建议您命名不超过50个字符,便于阅读' + '
    ' + '
    ' + '属性值' + '' + '' + '
    ' + '
    ' + '' + '建议您命名不超过50个字符,便于阅读' + '' + '' + '
    ' + '
    ' + '' + '建议您命名不超过50个字符,便于阅读' + '' + '
    ' + '
    ' + '数据类型' + '' + '
      ' + '
    • 字符串
    • ' + '
    • 数值
    • ' + '
    • 布尔值
    • ' + '
    ' + '
    ' + '' + '
    '; - var eventPorListStart = '
    ' + '
    ' + '
      '; - - var eventPorListEnd = '
    ' + '
    ' + '' + '
    ' + '
    '; - var eventPage = '生效范围' + '
    ' + '圈定元素' + '
    ' + '' + '' + '' + '' + '
    ' + '
    ' + '生效页面' + '' + '
      ' + '
    • 当前页面
    • ' + '
    • 全部页面
    • ' + '
    ' + '
    ' + '
    ' + '
    ' + '
  • '; - - var eventSaveBox = '
    ' + '' + '' + '
    '; - - function setEventTemp(config) { - if (!config) { - config = {}; - } - var text = config.content && config.content.length > 10 ? config.content.substring(0, 10) + '...' : config.content; - var relateds = config.related || []; - var properties = config.properties || []; - var bindings = config.props_binding || []; - var proTemp = ''; - var isList = false; - if (config.new_path && config.newPath && JSON.stringify(config.new_path).indexOf('"row"') < 0 && JSON.stringify(config.newPath).indexOf('"row"') > -1) { - isList = true; - } - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var type = relateds[i].properties[0].prop_type; - var typeName = '字符串'; - if (type === 'bool') { - typeName = '布尔值'; - } else if (type === 'number') { - typeName = '数值'; - } - var value = relateds[i].properties[0].value; - var regex = relateds[i].properties[0].regex; - if (regex) { - try { - regex = Util$1.decode(regex); - var _regex = new RegExp(regex); - var regexVal = _regex.exec(value); - if (regexVal && regexVal.length > 0) { - value = regexVal[0]; - } - } catch (e) {} - relateds[i].properties[0].regex = regex; - } - proTemp += eventProItem.replace('{PRONAME}', relateds[i].properties[0].key).replace('{PROVALUE}', value || '--').replace('{PROVALUEDISABLED}', 'disabled').replace('{ISPROELECLASS}', 'v-radio-checked').replace('{PROREXACTIVE}', relateds[i].properties[0].regex ? 'active' : '').replace('{PROREXVALUE}', relateds[i].properties[0].regex || '').replace('{PROBASEVALUE}', relateds[i].properties[0].value).replace('{PROTYPE}', typeName).replace('{PROTYPEDATA}', type); - } - } - if (properties.length > 0) { - for (var y = 0; y < properties.length; y++) { - var proType = properties[y].prop_type; - var proTypeName = '字符串'; - if (proType === 'bool') { - proTypeName = '布尔值'; - } else if (proType === 'number') { - proTypeName = '数值'; - } - proTemp += eventProItem.replace('{PRONAME}', properties[y].key).replace('{PROVALUE}', properties[y].value || '').replace('{ISINPUTCLASS}', 'v-radio-checked').replace('{PROVALUEDISABLED}', '').replace('{ISPROELECLASS}', '').replace('{PROTYPE}', proTypeName).replace('{PROTYPEDATA}', proType).replace('{PROREXVALUE}', '').replace('{PROBASEVALUE}', ''); - } - } - - var eventTemp = eventHeader + eventIDBox + eventPorListStart + proTemp + eventPorListEnd + eventPage + eventSaveBox; - var temp = eventTemp.replace('{CHANGETEXT}', config.isChange ? '编辑事件' : '创建事件').replace('{EVENTID}', config.appEventId || '').replace(/{EVENTNAME}/g, config.appEventName || '').replace('{PAGENAME}', config.isAll === 1 ? '全部页面' : '当前页面').replace('{PAGENAMETYPE}', config.isAll === 1 ? 'isAll' : 'isPage').replace(/{EVENTTEXT}/g, text || '').replace(/{EVENTTEXTTITLE}/, config.content || '').replace('{ISPATHPAGE}', config.new_path ? 'v-radio-checked' : ''); - for (var z = 0; z < bindings.length; z++) { - var binding = bindings[z]; - if (binding.prop_name === 'class') { - temp = temp.replace('{ISCLASSPAGE}', 'v-radio-checked'); - } else if (binding.prop_name === 'text') { - temp = temp.replace('{ISCONTENTPAGE}', 'v-radio-checked'); - } - } - temp = temp.replace(/{ISCLASSPAGE}/g, '').replace(/{ISCONTENTPAGE}/g, '').replace(/{ISLISTPAGE}/g, isList === true ? 'v-radio-checked' : ''); - return temp; - } - - function setProItemTemp() { - var proTemp = eventProItem.replace('{PRONAME}', '').replace('{PROVALUE}', '').replace('{ISINPUTCLASS}', 'v-radio-checked').replace('{PROVALUEDISABLED}', '').replace('{PROTYPE}', '字符串').replace('{PROTYPEDATA}', 'string').replace('{PROREXVALUE}', '').replace('{PROBASEVALUE}', ''); - return proTemp; - } - - var $lib_version = '5.0.4'; - - var debugTemp = '
    ' + '
    ' + '
    {LOGLIST}
    ' + '' + '
    '; - - function setDebugTemp(config) { - if (!config) return; - - var list = ''; - for (var i = 0; i < config.list.length; i++) { - list += '
    ' + config.list[i].title + ':' + config.list[i].val + '
    '; - } - var temp = debugTemp.replace('{TOP}', config.top).replace('{LEFT}', config.left).replace('{LOGLIST}', list); - return temp; - } - - function MoveBox() { - var _this = this; - this.ele = null; - this.parent = null; - this.parentOption = { - x: 0, - y: 0 - }; - this.touchOption = { - x: 0, - y: 0 - }; - - function down(event) { - event.preventDefault(); - var touch; - if (event.touches) { - touch = event.touches[0]; - } else { - touch = event; - } - - _this.touchOption = { - x: touch.clientX, - y: touch.clientY - }; - _this.parentOption = { - x: _this.parent.offsetLeft, - y: _this.parent.offsetTop - }; - Util$1.addEvent(document, 'touchmove', function () { - event.preventDefault(); - }, false); - Util$1.addEvent(document, 'mousemove', move, false); - Util$1.addEvent(document, 'mouseup', end, false); - - Util$1.addEvent(document, 'touchmove', move, false); - Util$1.addEvent(document, 'touchend', end, false); - } - - function move(event) { - var touch; - if (event.touches) { - touch = event.touches[0]; - } else { - touch = event; - } - var x = _this.parentOption.x + touch.clientX - _this.touchOption.x; - var y = _this.parentOption.y + touch.clientY - _this.touchOption.y; - - _this.parent.style.left = x + 'px'; - _this.parent.style.top = y + 'px'; - // _this.parentOption = { - // x: x, - // y: y - // } - } - - function end(event) { - Util$1.removeEvent(document, 'touchmove', function () { - event.preventDefault(); - }, false); - - Util$1.removeEvent(document, 'touchmove', move, false); - Util$1.removeEvent(document, 'touchend', end, false); - - Util$1.removeEvent(document, 'mousemove', move, false); - Util$1.removeEvent(document, 'mouseup', end, false); - } - this.init = function (ele) { - this.ele = ele; - this.parent = this.ele.parentNode; - - Util$1.addEvent(_this.ele, 'mousedown', down, false); - Util$1.addEvent(_this.ele, 'touchstart', down, false); - }; - - this.remove = function () { - if (!this.ele) return; - Util$1.removeEvent(document, 'mousedown', down, false); - Util$1.removeEvent(document, 'touchstart', down, false); - }; - } - var moveBox = new MoveBox(); - - /** - * 添加关联元素属性及样式 - */ - function addProEleBox() { - var step = 0; - var proPath = Util$1.arrayMerge([], proEleObj.newPath); - var clickPath = Util$1.arrayMerge([], clickOpenEle.newPath); - clickPath = clickPath.reverse(); - proPath = proPath.reverse(); - - var status = true; - while (step < clickPath.length && status === true) { - if (!clickPath[step] || !proPath[step]) { - status = false; - } else { - for (var item in clickPath[step]) { - if (clickPath[step][item] !== proPath[step][item]) { - status = false; - } - } - } - - if (status === false) { - break; - } - step++; - } - if (step > 0) { - proPath.splice(0, step - 1); - } - if (step === 0) { - proPath[0] = clickPath[0]; - } - var num = clickOpenEle.newPath.length - step; - var proRelated = { - target: { - h5_path: proPath.reverse(), - step: num - } - }; - proEle.setAttribute('data-ark-related', JSON.stringify(proRelated)); - var value = getElementContent(proEleObj.ele, true); - proEle.value = value || '--'; - if (value) { - proEle.setAttribute('data-ark-value', value); - } - var activeIcon = proEle.parentNode.getElementsByClassName('ICON_XQ'); - if (activeIcon.length > 0) { - activeIcon = activeIcon[0]; - activeIcon.className = activeIcon.className.replace(/ active/g, ''); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].style.display = 'block'; - } - - var proDiv = setOnceBox(proEleObj.ele, '', 'ARK_SAVE_PRO'); - proEleObj.ele.parentNode.appendChild(proDiv); - - var showPro = document.getElementById('ARK_PRO'); - if (showPro) { - var showProParent = showPro.parentNode || document.body; - showProParent.removeChild(showPro); - } - isAddPro = false; - } - var clickOpenEle = null; - var relatedLength = 0; - - function openVisualBox() { - relatedLength = 0; - if (!clickEleObj.ele) return; - clickOpenEle = Util$1.toDeep(clickEleObj); - var ele = clickOpenEle.ele; - - // var eleParent = ele.parentNode || document.body - delClickBox(); - - // checkChildrenEvent(ele) - var tagName = ele.tagName; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var config = { - id: 0, - url: window.location.protocol + '//' + window.location.host + window.location.pathname + hash, - tagName: tagName, - appEventId: '', - appEventName: '', - isAll: 0, - allVersion: 0, - dispose: 0, - isText: '', - link: clickOpenEle.path, - index: clickOpenEle.index, - content: getElementContent(ele), - classes: Util$1.paramType(ele.className) === 'String' ? ele.className : '', - isChange: false, - related: [], - properties: [], - props_binding: [] - }; - var eventAttri = ele.getAttribute('data-ark-attr'); - if (eventAttri) { - eventAttri = JSON.parse(eventAttri); - config = Util$1.objMerge(config, eventAttri); - config.isChange = true; - config.new_path = eventAttri.new_path; - config.related = eventAttri.related || []; - config.props_binding = eventAttri.props_binding || []; - config.properties = eventAttri.properties || []; - for (var y = 0; y < config.props_binding.length; y++) { - if (config.props_binding[y].prop_name === 'class') { - config.classes = config.props_binding[y].value; - } - } - } - config.newPath = Util$1.arrayMerge([], clickOpenEle.newPath); - clickDiv = setOnceBox(ele, 'ARK_SAVE_CLICK', 'ARK_SAVE_CLICK'); - clickDiv.innerHTML = '编辑中'; - var parentEle = ele.parentNode || document.body; - parentEle.appendChild(clickDiv); - - var relateds = config.related || []; - relatedLength = relateds.length; - setElementRelatedsDisable(); - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var eRelated = relateds[i].target; - eRelated.newPath = eRelated.h5_path; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(config.newPath, eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var value = relatedEele ? getElementContent(relatedEele, true) : ''; - relateds[i].properties[0].value = value; - var id = config.id + 'pro' + i; - var proDiv = setOnceBox(relatedEele, id, 'ARK_SAVE_PRO'); - relatedEele.parentNode.appendChild(proDiv); - } - } - } - } - config.url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var clickBoxTemp = setEventTemp(config); - var clickDiv = document.createElement('div'); - clickDiv.className = 'ARK_BOX'; - clickDiv.id = 'ARK_BOX'; - clickDiv.innerHTML = clickBoxTemp; - if (boxOption.left !== null && boxOption.top !== null) { - clickDiv.style.left = boxOption.left; - clickDiv.style.top = boxOption.top; - } - document.body.appendChild(clickDiv); - - initClickBoxActive(clickDiv, config); - sendMsg({ - type: 'pointList', - close: true - }); - } - - function isTextAndIsAllEleClick(e) { - var ele = (e || window.event).target; - var parentEle = ele.parentNode; - var eleChecked = ele.getAttribute('checked'); - if (eleChecked !== 'checked') { - parentEle.className += ' v-radio-checked'; - ele.setAttribute('checked', 'checked'); - } else { - parentEle.className = parentEle.className ? parentEle.className.replace(/ v-radio-checked/g, '') : ''; - ele.removeAttribute('checked'); - } - } - - function inputOnblur(e) { - var ele = e.target || e.srcElement; - var nextEle = ele.nextSibling; - var value = ele.value || ''; - var eleId = ele.id; - - var status = true; - if (eleId === 'ARK_BOX_EVENT_ID') { - // to do - // status = checkPrivate(value, '$track', true) - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(value)) { - status = false; - } - } else { - if (value && value.length > 50) { - status = false; - } - } - - if (!status) { - ele.className += ' error'; - nextEle.style.display = 'block'; - } - } - - function inputOnfocus(e) { - var ele = e.target || e.srcElement; - var nextEle = ele.nextSibling; - ele.className = ele.className ? ele.className.replace(/ error/g, '') : ''; - nextEle.style.display = 'none'; - } - - function addProItem() { - var proItemTemp = setProItemTemp(); - var proDiv = document.createElement('div'); - proDiv.innerHTML = proItemTemp; - var proItem = proDiv.childNodes[0]; - var proListEls = document.getElementById('ARK_PRO_LIST'); - proListEls.appendChild(proItem); - proListEls.scrollTop = proListEls.scrollHeight; - setRelatedsActive(proItem, {}); - setElementRelatedsDisable(); - } - function getChildEle(ele, className) { - var chileEles = ele.childNodes; - var eleChild = null; - for (var i = 0; i < chileEles.length; i++) { - if (chileEles[i].nodeType === 1) { - if (Util$1.paramType(chileEles[i].className) === 'String' && chileEles[i].className.split(' ').indexOf(className) > -1) { - // eleList.push(chileEles[i]) - eleChild = chileEles[i]; - } - if (!eleChild && chileEles[i].childNodes.length > 0) { - eleChild = getChildEle(chileEles[i], className); - } - } - } - return eleChild; - } - var isAddPro = false; - var proEle = null; - function setRelatedsActive(ele, related) { - var clickEles = ele.getElementsByClassName('v-radio-wrapper'); - var inputKey = getChildEle(ele, 'PROID'); - var inputValue = getChildEle(ele, 'PROVALUE'); - var inputRegex = getChildEle(ele, 'PROREX'); - var inputType = getChildEle(ele, 'PROTYPE'); - var iconXQ = getChildEle(ele, 'ICON_XQ'); - var iconREX = getChildEle(ele, 'ICON_REX'); - var iconNUM = getChildEle(ele, 'ICON_NUM'); - var iconDel = getChildEle(ele, 'ICON_DEL'); - inputValue.setAttribute('data-ark-related', JSON.stringify(related)); - - for (var i = 0; i < clickEles.length; i++) { - var spanRadio = getChildEle(clickEles[i], 'v-radio-ARK'); - var checkedInput = getChildEle(clickEles[i], 'v-radio-input'); - - if (spanRadio.className.indexOf('v-radio-checked') > -1 && i === 0) { - checkedInput.setAttribute('checked', 'checked'); - inputValue.className += ' width246'; - inputRegex.style.display = 'none'; - iconXQ.style.display = 'none'; - iconREX.style.display = 'none'; - iconNUM.style.display = 'none'; - iconXQ.className = iconXQ.className.replace(/ active/g, ''); - iconREX.className = iconREX.className.replace(/ active/g, ''); - iconNUM.className = iconNUM.className.replace(/ active/g, ''); - inputValue.removeAttribute('disabled'); - inputValue.removeAttribute('data-ark-related'); - inputValue.removeAttribute('data-ark-value'); - } else if (spanRadio.className.indexOf('v-radio-checked') > -1 && i === 1) { - checkedInput.setAttribute('checked', 'checked'); - inputValue.setAttribute('disabled', 'disabled'); - iconXQ.style.display = 'block'; - iconREX.style.display = 'block'; - if (inputRegex.value === '') { - iconREX.className = iconREX.className.replace(/ active/g, ''); - } - inputValue.className = inputValue.className.replace(/ width246/g, ''); - if (!related.properties[0].regex || related.properties[0].regex === '') { - inputRegex.style.display = 'none'; - iconNUM.style.display = 'none'; - } - } - } - Util$1.addEvent(inputKey, 'input', setProInputChange); - - Util$1.addEvent(inputRegex, 'input', function () { - var initValue = inputValue.getAttribute('data-ark-value'); - - var rexegValue = inputRegex.value; - try { - var value = initValue || inputValue.value; - if (!value) return; - if (!rexegValue) { - inputValue.value = value; - return; - } - var _regex = new RegExp(rexegValue); - - var regexVal = _regex.exec(value); - if (regexVal && regexVal.length > 0) { - inputValue.value = regexVal[0]; - } else { - inputValue.value = value; - } - } catch (e) { - inputValue.value = value; - } - }); - - function isAddProActive() { - isAddPro = true; - iconXQ.className += ' active'; - proEle = inputValue; - var relateAttr = inputValue.getAttribute('data-ark-related'); - var isElementRelate = false; - if (inputValue.getAttribute('checked') === 'checked') { - isElementRelate = true; - } - if (relateAttr) { - var eRelated = JSON.parse(relateAttr).target; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(Util$1.arrayMerge([], clickOpenEle.newPath), eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var relateEle = getChildEle(relatedEele.parentNode, 'ARK_SAVE_PRO'); - - relateEle && relateEle.parentNode.removeChild(relateEle); - // relateds['ele'] = proDiv - // document.body.appendChild(proDiv) - } - } - isElementRelate = true; - } - return isElementRelate; - } - function notAddProActive() { - isAddPro = false; - var iconXQList = document.getElementsByClassName('ICON_XQ'); - for (var i = 0; i < iconXQList.length; i++) { - iconXQList[i].className = iconXQList[i].className.replace(/ active/g, ''); - } - proEle = null; - } - Util$1.addEvent(iconXQ, 'click', function () { - if (isAddPro === true) { - notAddProActive(); - } else { - isAddProActive(); - } - }); - Util$1.addEvent(iconREX, 'click', function () { - notAddProActive(); - if (iconNUM.style.display !== 'none') { - iconNUM.style.display = 'none'; - inputRegex.style.display = 'none'; - iconREX.className = iconREX.className.replace(/ active/g, ''); - } else { - iconNUM.style.display = 'block'; - inputRegex.style.display = 'block'; - iconREX.className += ' active'; - } - - inputRegex.value = ''; - }); - Util$1.addEvent(iconNUM, 'click', function () { - notAddProActive(); - var initValue = inputValue.getAttribute('data-ark-value'); - - var rexegValue = '[\\d.]+'; - inputRegex.value = rexegValue; - try { - var value = initValue || inputValue.value; - var _regex = new RegExp(rexegValue); - var regexVal = _regex.exec(value); - if (regexVal.length > 0) { - inputValue.value = regexVal[0]; - } - } catch (e) {} - }); - for (var y = 0; y < clickEles.length; y++) { - - Util$1.addEvent(clickEles[y], 'click', function (index) { - return function () { - - var ele = clickEles[index]; - var checkInput = getChildEle(ele, 'v-radio-input'); - var checkSpan = getChildEle(ele, 'v-radio-ARK'); - if (checkSpan.className.indexOf('v-radio-checked') < 0 && checkInput.disabled !== true) { - checkSpan.className += ' v-radio-checked'; - checkInput.setAttribute('checked', 'checked'); - var elementEle = ele.nextSibling; - - if (checkInput.id === 'ARK_PRO_ELEMENT') { - isAddProActive(); - elementEle = ele.previousSibling; - inputValue.setAttribute('placeholder', '--'); - inputValue.setAttribute('disabled', 'disabled'); - inputValue.value = ''; - inputRegex.value = ''; - iconXQ.style.display = 'block'; - iconREX.style.display = 'block'; - iconREX.className = iconREX.className.replace(/ active/g, ''); - inputValue.className = inputValue.className.replace(/ width246/g, ''); - relatedLength++; - } else { - notAddProActive(); - inputValue.setAttribute('placeholder', '请输入属性值'); - inputValue.value = ''; - inputRegex.value = ''; - inputValue.className += ' width246'; - inputRegex.style.display = 'none'; - iconXQ.style.display = 'none'; - iconREX.style.display = 'none'; - iconNUM.style.display = 'none'; - iconXQ.className.replace(/ active/g, ''); - iconREX.className.replace(/ active/g, ''); - iconNUM.className.replace(/ active/g, ''); - inputValue.removeAttribute('disabled'); - var relateAttr = inputValue.getAttribute('data-ark-related'); - if (relateAttr) { - var eRelated = JSON.parse(relateAttr).target; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(Util$1.arrayMerge([], clickOpenEle.newPath), eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var relateEle = getChildEle(relatedEele.parentNode, 'ARK_SAVE_PRO'); - - relateEle && relateEle.parentNode.removeChild(relateEle); - // relateds['ele'] = proDiv - // document.body.appendChild(proDiv) - } - } - } - inputValue.removeAttribute('data-ark-related'); - inputValue.removeAttribute('data-ark-value'); - relatedLength--; - } - var elementInput = getChildEle(elementEle, 'v-radio-input'); - var elementSpan = getChildEle(elementEle, 'v-radio-ARK'); - elementSpan.className = checkSpan.className.replace(/ v-radio-checked/g, ''); - elementInput.removeAttribute('checked'); - setElementRelatedsDisable(); - } - }; - }(y)); - } - - Util$1.addEvent(iconDel, 'click', function () { - var isElementR = isAddProActive(); - if (isElementR === true) { - relatedLength--; - } - isAddPro = false; - ele.parentNode.removeChild(ele); - setElementRelatedsDisable(); - }); - Util$1.addEvent(inputType, 'click', function () { - - var proTypeList = inputType.nextSibling; - proTypeList.className = proTypeList.className.replace(/ TOP/g, ''); - var isType = inputType.getAttribute('data-type'); - if (!ele.nextSibling) { - proTypeList.className += ' TOP'; - } - - proTypeList.style.display = 'block'; - var liEles = proTypeList.childNodes; - for (var i = 0; i < liEles.length; i++) { - var type = liEles[i].getAttribute('data-type'); - liEles[i].className = liEles[i].className.replace(/selected/g, ''); - if (isType === type) { - liEles[i].className += 'selected'; - } - liEles[i].onclick = function (ele) { - return function () { - var type = ele.getAttribute('data-type'); - for (var y = 0; y < liEles.length; y++) { - liEles[y].className = liEles[y].className.replace(/selected/g, ''); - } - inputType.value = ele.innerText; - ele.className += 'selected'; - inputType.setAttribute('data-type', type); - proTypeList.style.display = 'none'; - }; - }(liEles[i]); - } - }); - } - function setElementRelatedsDisable() { - var isDisable = false; - if (relatedLength >= 5) { - isDisable = true; - } - var ulEle = document.getElementById('ARK_PRO_LIST'); - if (!ulEle) { - return; - } - var liEles = ulEle.getElementsByClassName('ARK_PRO_ITEM'); - for (var i = 0; i < liEles.length; i++) { - var inputEles = liEles[i].getElementsByClassName('v-radio-input'); - var valueEle = inputEles[0]; - var elementEle = inputEles[1]; - if (valueEle.getAttribute('checked') === 'checked') { - var pathParentEle = elementEle.parentNode.parentNode; - if (isDisable) { - if (pathParentEle.className.indexOf(' v-radio-wrapper-disabled') < 0) { - pathParentEle.className += ' v-radio-wrapper-disabled'; - elementEle.setAttribute('disabled', 'disabled'); - pathParentEle.setAttribute('data-ark-tip', '关联元素个数达到上限,最多可关联5个元素!'); - pathParentEle.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '45px' })); - } - } else { - pathParentEle.className = pathParentEle.className.replace(/ v-radio-wrapper-disabled/g, ''); - elementEle.removeAttribute('disabled', 'disabled'); - pathParentEle.removeAttribute('data-ark-tip'); - } - } - } - } - var showProInputList = []; - function backProInputList(obj) { - var num = null; - for (var i = 0; i < showProInputList.length; i++) { - if (obj.id === showProInputList[i].id) { - showProInputList[i].callback(obj); - num = 1; - } - } - showProInputList.splice(num, 1); - } - function setProInputChange(e) { - var inputValue = (e || window.event).target; - var value = inputValue.value; - var ulEle = inputValue.nextSibling; - var parentEle = inputValue.parentNode.parentNode; - var proTypeEle = parentEle.getElementsByClassName('PROTYPE')[0]; - // proTypeEle.setAttribute('data-type', 'string') - proTypeEle.removeAttribute('disabled'); - // proTypeEle.value = '字符串' - ulEle.innerHTML = ''; - ulEle.style.display = 'none'; - ulEle.style.maxHeight = '130px'; - if (value === '') { - return; - } - - var callback = function (msg) { - var data = msg.data; - if (data.length > 0) { - for (var i = 0; i < data.length; i++) { - var liEles = document.createElement('li'); - liEles.innerHTML = '' + data[i].code + ''; - ulEle.appendChild(liEles); - liEles.onclick = function (data) { - return function () { - var type = data.dataType; - var name = '字符串'; - - inputValue.value = data.code; - ulEle.style.display = 'none'; - if (type === 'boolean') { - type = 'bool'; - name = '布尔值'; - } else if (type === 'number') { - name = '数值'; - } - proTypeEle.value = name; - proTypeEle.setAttribute('data-type', type); - proTypeEle.setAttribute('disabled', 'disabled'); - }; - }(data[i]); - } - ulEle.style.display = 'block'; - } - }; - var id = +new Date(); - showProInputList.push({ - id: id, - callback: callback - }); - // callback({ data: [{ code: '234' }, { code: '344' }, { code: '1222' }] }) - sendMsg({ - code: 200, - type: 'pro_like', - id: id, - key: inputValue.value - }); - } - function changeBindings(config) { - clearDisposeEles(); - var newEvent = [{ - newPath: config.new_path ? Util$1.arrayMerge([], config.new_path) : null, - bindings: Util$1.arrayMerge([], config.props_binding) - }]; - var eles = parserPageEvents(newEvent); - for (var y = 0; y < eles.length; y++) { - if (clickOpenEle.ele !== eles[y].ele) { - setShowDoms(eles[y].ele); - } - // setVisualEvent(eles[y].ele, eles[y].config, y) - } - } - function initClickBoxActive(ele, config) { - var saveEle = document.getElementById('ARK_BOX_SAVE'); - var cancelEle = document.getElementById('ARK_BOX_CANCEL'); - var isTextEle = document.getElementById('ARK_CONTENT_ISPAGE'); - var isClassEle = document.getElementById('ARK_CLASS_ISPAGE'); - var isPathEle = document.getElementById('ARK_PATH_ISPAGE'); - var isListEle = document.getElementById('ARK_LIST_ISPAGE'); - var isPageEle = document.getElementById('ARK_BOX_ISPAGE'); - var eventIDEle = document.getElementById('ARK_BOX_EVENT_ID'); - var eventIdErrorEle = document.getElementById('ARK_BOX_EVENT_ID_ERROR'); - var eventNameEle = document.getElementById('ARK_BOX_EVENT_NAME'); - var eventNameErrorEle = document.getElementById('ARK_BOX_EVENT_NAME_ERROR'); - var headMove = document.getElementById('ARK_BOX_HEADER'); - var addProEle = document.getElementById('ARK_ADD_PRO'); - - if (config.dispose !== 0) { - eventIDEle.setAttribute('disabled', 'disabled'); - eventIDEle.setAttribute('data-ark-tip', '已部署埋点不可修改事件ID'); - eventIDEle.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '120px', pos: 'bottom' })); - } - if (tooltipObj.newVision !== true) { - var msg = '此功能要求方舟平台版本在5.1及以上'; - addProEle.setAttribute('disabled', 'disabled'); - addProEle.parentNode.setAttribute('data-ark-tip', msg); - addProEle.parentNode.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '70px' })); - document.getElementById('ARK_PRO_LIST').setAttribute('data-ark-tip', msg); - document.getElementById('ARK_PRO_LIST').setAttribute('data-ark-tip-pos', JSON.stringify({ left: '70px' })); - - var list = [isPathEle, isListEle, isClassEle]; - for (var i = 0; i < list.length; i++) { - var pathParentEle = list[i].parentNode.parentNode; - pathParentEle.className += ' v-radio-wrapper-disabled'; - pathParentEle.setAttribute('disabled', 'disabled'); - list[i].setAttribute('disabled', 'disabled'); - } - } - addProEle.onclick = addProItem; - var relatedsEles = document.getElementsByClassName('ARK_PRO_ITEM'); - for (var z = 0; z < relatedsEles.length; z++) { - if (tooltipObj.newVision !== true) { - var hoverBox = getChildEle(relatedsEles[z], 'ARK_FIXED_BOX'); - hoverBox.style.display = 'block'; - } - (function (relatedEle, conf) { - setRelatedsActive(relatedEle, conf); - })(relatedsEles[z], config.related[z]); - } - - if (config.content === '') { - isTextEle.parentNode.parentNode.style.display = 'none'; - } - if (config.classes === '') { - isClassEle.parentNode.parentNode.style.display = 'none'; - } - if (config.newPath && JSON.stringify(config.newPath).indexOf('"row"') < 0) { - isListEle.parentNode.parentNode.style.display = 'none'; - } - var pageUlEle = isPageEle.nextSibling; - - Util$1.addEvent(isPageEle, 'click', function () { - pageUlEle.style.display = 'block'; - pageUlEle.style.left = '80px'; - }); - var isPageType = isPageEle.getAttribute('data-type'); - for (var y = 0; y < pageUlEle.childNodes.length; y++) { - var pageLi = pageUlEle.childNodes[y]; - pageLi.className = (Util$1.paramType(pageLi.className) === 'String' ? pageLi.className : '').replace(/selected/g, ''); - var type = pageLi.getAttribute('data-type'); - if (isPageType === type) { - pageLi.className += 'selected'; - } - Util$1.addEvent(pageLi, 'click', function (ele) { - return function () { - for (var z = 0; z < pageUlEle.childNodes.length; z++) { - var liEle = pageUlEle.childNodes[z]; - liEle.className = (Util$1.paramType(liEle.className) === 'String' ? liEle.className : '').replace(/selected/g, ''); - } - var type = ele.getAttribute('data-type'); - isPageEle.value = ele.innerText; - ele.className += 'selected'; - isPageEle.setAttribute('data-type', type); - pageUlEle.style.display = 'none'; - }; - }(pageLi)); - } - for (var c = 0; c < config.props_binding.length; c++) { - var binding = config.props_binding[c]; - if (binding.prop_name === 'class') { - isClassEle.setAttribute('checked', 'checked'); - } else if (binding.prop_name === 'text') { - isTextEle.setAttribute('checked', 'checked'); - } - } - if (config.new_path) { - isPathEle.setAttribute('checked', 'checked'); - } - if (config.new_path && config.newPath && JSON.stringify(config.new_path).indexOf('"row"') < 0 && JSON.stringify(config.newPath).indexOf('"row"') > -1) { - isListEle.setAttribute('checked', 'checked'); - } - function eventBingsActive(e) { - if (e) { - isTextAndIsAllEleClick(e); - } - var pathParentEle = isPathEle.parentNode.parentNode; - if (isTextEle.getAttribute('checked') !== 'checked' && isClassEle.getAttribute('checked') !== 'checked' && isListEle.getAttribute('checked') !== 'checked' && isPathEle.getAttribute('checked') !== 'checked') { - isTextAndIsAllEleClick({ target: isPathEle }); - config.new_path = config.newPath; - } - var bindings = []; - if (isTextEle.getAttribute('checked') === 'checked') { - bindings.push({ - "prop_name": "text", - "prop_type": "string", - "value": config.content - }); - } - if (isClassEle.getAttribute('checked') === 'checked') { - bindings.push({ - "prop_name": "class", - "prop_type": "string", - "value": config.classes - }); - } - if (isListEle.getAttribute('checked') === 'checked') { - config.new_path = delPathRow(config.newPath); - if (isPathEle.getAttribute('checked') !== 'checked') { - isTextAndIsAllEleClick({ target: isPathEle }); - } - pathParentEle.className += ' v-radio-wrapper-disabled'; - pathParentEle.setAttribute('disabled', 'disabled'); - isPathEle.setAttribute('disabled', 'disabled'); - } else if (tooltipObj.newVision === true) { - pathParentEle.className = pathParentEle.className.replace(/ v-radio-wrapper-disabled/g, ''); - pathParentEle.removeAttribute('disabled'); - isPathEle.removeAttribute('disabled'); - config.new_path = config.newPath; - } - if (isPathEle.getAttribute('checked') !== 'checked') { - config.new_path = null; - } - config.props_binding = bindings; - changeBindings(config); - } - eventBingsActive(); - Util$1.addEvent([isPathEle, isListEle, isClassEle, isTextEle], 'click', eventBingsActive); - eventIDEle.focus(); - if (Util$1.paramType(eventIDEle.createTextRange) !== 'Undefined') { - var rtextRange = eventIDEle.createTextRange(); - rtextRange.moveStart('character', eventIDEle.value.length); - rtextRange.collapse(true); - rtextRange.select(); - } else if (Util$1.paramType(eventIDEle.selectionStart) !== 'Undefined') { - eventIDEle.selectionStart = eventIDEle.value.length; - } - eventNameEle.onblur = eventIDEle.onblur = inputOnblur; - Util$1.addEvent([eventNameEle, eventIDEle], 'focus', inputOnfocus); - // eventNameEle.onfocus = eventIDEle.onfocus = inputOnfocus - saveEle.onclick = function () { - inputOnblur({ - target: eventIDEle - }); - if (eventIdErrorEle.style.display && eventIdErrorEle.style.display !== 'none' || eventNameErrorEle.style.display && eventNameErrorEle.style.display !== 'none') { - return; - } - - var eventName = eventNameEle.value || ''; - var eventID = eventIDEle.value || ''; - - var relatedEles = document.getElementsByClassName('PROVALUE'); - var relatedTypeEles = document.getElementsByClassName('PROTYPE'); - var relatedKeyEles = document.getElementsByClassName('PROID'); - var relatedRegexEles = document.getElementsByClassName('PROREX'); - var relateds = []; - var properties = []; - for (var i = 0; i < relatedEles.length; i++) { - var relatedEle = relatedEles[i]; - var typeEle = relatedTypeEles[i]; - var relatedKeyEle = relatedKeyEles[i]; - var relatedRegexEle = relatedRegexEles[i]; - var related = relatedEle.getAttribute('data-ark-related'); - var relatedType = typeEle.getAttribute('data-type'); - var relatedValue = relatedEle.value; - var relatedKey = relatedKeyEle.value; - var relatedTegex = relatedRegexEle.value; - if (related && relatedKey !== '') { - related = JSON.parse(related); - related['properties'] = [{ - key: relatedKey, - prop_name: 'text', - prop_type: relatedType - }]; - if (relatedTegex !== '') { - related['properties'][0]['regex'] = Util$1.encode(relatedTegex); - } - - delete related['target']['path']; - delete related['target']['newPath']; - relateds.push(related); - } else if (relatedValue !== '' && relatedKey !== '') { - properties.push({ - key: relatedKey, - prop_name: 'text', - prop_type: relatedType, - value: relatedValue - }); - } - } - config.related = relateds; - config.properties = properties; - - // var isAll = isPageEle.getAttribute('checked') === 'checked' ? 0 : 1 - // var isText = isTextEle.getAttribute('checked') === 'checked' ? 1 : 0 - var isAll = isPageEle.getAttribute('data-type') === 'isAll' ? 1 : 0; - var isText = isTextEle.getAttribute('checked') === 'checked' ? 1 : 0; - config = Util$1.objMerge(config, { - appEventId: eventID, - appEventName: eventName, - isAll: isAll, - isText: isText === 1 ? config.content : '' - }); - - var isChange = config.isChange; - delete config.content; - delete config.isChange; - delete config.newPath; - delete config.classes; - delete config.bindings; - var obj = { - type: isChange ? 'change_update' : 'change_request', - payload: { - path: [config] - } - }; - sendMsg(obj); - delClickBox(); - }; - cancelEle.onclick = function () { - delClickBox(); - showVisualEvent(visualEvetnList); - }; - moveBox.init(headMove); - } - function clearDisposeEles() { - var className = 'ARK_SHOW_DISPOSE'; - var hasSetEles = document.getElementsByClassName(className); - // var delEles = [] - while (hasSetEles.length > 0) { - var eventID = hasSetEles[0].getAttribute('data-ark-attr'); - if (eventID) { - hasSetEles[0].className = hasSetEles[0].className.replace(/ ARK_SHOW_DISPOSE/g, ''); - } else { - var parentEls = hasSetEles[0].parentNode || document.body; - parentEls.removeChild(hasSetEles[0]); - } - } - } - var boxOption = { - top: null, - left: null - }; - function delClickBox() { - clearDisposeEles(); - clearShowDoms('ARK_SAVE_PRO'); - clearShowDoms('ARK_PRO_ELE'); - clearShowDoms('debugLog'); - - var clickBoxElement = document.getElementById('ARK_BOX'); - if (clickBoxElement) { - boxOption.left = clickBoxElement.style.left; - boxOption.top = clickBoxElement.style.top; - var boxParent = clickBoxElement.parentNode || document.body; - boxParent.removeChild(clickBoxElement); - } - var isEditEle = document.getElementById('ARK_IS_CLICK'); - if (isEditEle) { - var editParent = isEditEle.parentNode || document.body; - editParent.removeChild(isEditEle); - } - var isBox = document.getElementById('ARK_SAVE_CLICK'); - if (isBox) { - var isBoxParent = isBox.parentNode || document.body; - isBoxParent.removeChild(isBox); - } - } - - function clearShowDoms(className) { - var hasSetEles = document.getElementsByClassName(className); - while (hasSetEles.length > 0) { - var parentEls = hasSetEles[0].parentNode || document.body; - parentEls.removeChild(hasSetEles[0]); - } - - isAddPro = false; - } - function setShowDoms(ele) { - var eventID = ele.getAttribute('data-ark-id'); - var eventEle = document.getElementById(eventID); - if (eventEle) { - eventEle.className += ' ARK_SHOW_DISPOSE'; - } else { - var eleParent = ele.parentNode || document.body; - var diposeDiv = setOnceBox(ele, '', 'ARK_SHOW_DISPOSE'); - eleParent.appendChild(diposeDiv); - } - } - function setVisualEvent(ele, config, isOpen) { - - ele.setAttribute('data-ark-attr', JSON.stringify(config)); - var eventPostion = setBoxPostion(ele); - var width = eventPostion.width; - var height = eventPostion.height; - if (!width || !height) { - return; - } - - if (Util$1.paramType(ele.className) === 'String' && ele.className.indexOf('ARK_') > -1) { - ele.className = ele.className.replace(/ ARK_NO_LIGHT/g, ''); - return; - } - var eventEleId = ele.getAttribute('data-ark-id'); - var disposeDiv = null; - if (eventEleId) { - disposeDiv = document.getElementById(eventEleId); - } - if (!disposeDiv) { - eventEleId = +new Date() + '' + Math.floor(Math.random() * 1000000); - ele.setAttribute('data-ark-id', eventEleId); - var eleParent = ele.parentNode || document.body; - disposeDiv = setOnceBox(ele, '', 'ARK_SAVE_DISPOSE'); - eleParent.appendChild(disposeDiv); - // clearShowDoms('ARK_SAVE_DISPOSE') - // Util.addEvent(disposeDiv, 'click', (function (ele) { - // return function (event) { - // event.stopPropagation() - // setEleMessage(ele) - // openVisualBox(disposeDiv) - // return false - // } - // })(ele)) - } else { - disposeDiv.style.left = eventPostion.x + 'px'; - disposeDiv.style.top = eventPostion.y + 'px'; - disposeDiv.style.width = eventPostion.width + 'px'; - disposeDiv.style.height = eventPostion.height + 'px'; - } - disposeDiv.setAttribute('data-ark-attr', JSON.stringify(config)); - disposeDiv.id = eventEleId; - - if (isOpen) { - setEleMessage(ele); - openVisualBox(); - } - } - - function removeVisualEvent(ele) { - delClickBox(); - ele.removeAttribute('data-ark-attr'); - var eventID = ele.getAttribute('data-ark-id'); - if (eventID) { - ele.removeAttribute('data-ark-id'); - ele.removeAttribute('data-ark-attr'); - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var eventEle = document.getElementById(eventID); - if (eventEle) { - var eventParentEle = eventEle.parentNode || document.body; - eventParentEle.removeChild(eventEle); - } - } - } - var elePath = null; - var patt = /\d{13}/g; - - // function checkChildrenEvent (ele) { - // var eleAttr = ele.getAttribute('data-ark-attr') - - // if (!eleAttr && visualEvetnList.length > 0) { - // showVisualEvent(visualEvetnList) - // } - - // } - function offset(curEle) { - var totalLeft = null, - totalTop = null, - par = curEle; - var eleTable = null; - //首先加自己本身的左偏移和上偏移 - // totalLeft += curEle.offsetLeft; - // totalTop += curEle.offsetTop - //只要没有找到body,我们就把父级参照物的边框和偏移也进行累加 - while (par) { - if (par.tagName === 'TABLE') { - eleTable = par; - } - if (navigator.userAgent.indexOf("MSIE 8.0") === -1) { - //累加父级参照物的边框 - totalLeft += par.clientLeft; - totalTop += par.clientTop; - } - //累加父级参照物本身的偏移 - totalLeft += par.offsetLeft; - totalTop += par.offsetTop; - par = par.offsetParent; - } - - return { - left: totalLeft, - top: totalTop, - eleTable: eleTable - }; - } - var moveX = 0; - var moveY = 0; - var hiddenEle = []; - function mouseMoveEvent(e) { - - var ele = e.target || e.srcElement; - if (ele.id && (ele.id === 'ARK_PRO' || ele.id === 'ARK_SAVE_CLICK') || Util$1.paramType(ele.className) === 'String' && (ele.className.indexOf('ARK_SAVE_DISPOSE') > -1 || ele.className === 'ARK_SAVE_PRO') || ele.className === 'ARK_SHOW_DISPOSE') { - ele.style.display = 'none'; - - hiddenEle.push(ele); - return true; - } - if (isParent(ele, document.getElementById('ARK_SAVE_CLICK'))) { - document.getElementById('ARK_SAVE_CLICK').style.display = 'none'; - hiddenEle.push(document.getElementById('ARK_SAVE_CLICK')); - return true; - } - var tagName = ele.tagName; - - if (isParent(ele, document.getElementById('ARK_BOX')) || isParent(ele, document.getElementById('ARK_DEBUG_BOX')) || ['html', 'body', 'hr', 'br', 'canvas', 'svg', 'use'].indexOf(tagName.toLowerCase()) > -1) { - var clickEle = document.getElementById('ARK_CLICK'); - if (clickEle) { - var parentClickEle = clickEle.parentNode || document.body; - parentClickEle.removeChild(clickEle); - } - return true; - } - var moveEle = isAddPro === true ? proEleObj.ele : clickEleObj.ele; - eleDiv = isAddPro === true ? document.getElementById('ARK_PRO') : document.getElementById('ARK_CLICK'); - if (eleDiv && (Math.abs(e.clientX - moveX) > 2 || Math.abs(e.clientY - moveY) > 2)) { - // if (eleDiv) { - eleDiv.style.display = 'none'; - } - - if (ele !== eleDiv && moveEle !== ele) { - var eleParent = ele.parentNode || document.body; - // var eleParent = document.body - moveEle = ele; - setEleMessage(ele); - if (debugModel !== true) { - if (eleDiv) { - var parentEle = eleDiv.parentNode || document.body; - // var parentEle = document.body - parentEle.removeChild(eleDiv); - } - var eleDivTemp = isAddPro === true ? setOnceBox(moveEle, 'ARK_PRO', 'ARK_PRO_ELE') : setOnceBox(moveEle, 'ARK_CLICK', 'ARK_CLICK_ELE'); - eleParent.appendChild(eleDivTemp); - } - checkPoints(); - } - - clearTimeout(timer); - timer = null; - timer = setTimeout(function () { - if (!eleDiv) return; - eleDiv.style.display = 'block'; - }, 20); - } - function mouseOutEvent(e) { - var ele = (e || window.event).target; - // if (ele.id && (ele.id === 'ARK_IS_CLICK'||)) { - // return - // } - if (ele.id && ele.id === 'ARK_PRO' || Util$1.paramType(ele.className) === 'String' && ele.className.indexOf('ARK_') > -1) { - return; - } - // var proEles = document.getElementsByClassName('ARK_SAVE_PRO') - for (var i = 0; i < hiddenEle.length; i++) { - hiddenEle[i].style.display = 'block'; - } - // var disposeEle = document.getElementsByClassName('ARK_SAVE_DISPOSE') - // for (var y = 0; y < disposeEle.length; y++) { - // disposeEle[y].style.display = 'block' - // } - hiddenEle = []; - } - - Util$1.addEvent(document, 'click', function (event) { - var ele = (event || window.evnet).target; - var ulELes = document.getElementsByClassName('ARK_DROPDOWN'); - for (var i = 0; i < ulELes.length; i++) { - ulELes[i].style.display = 'none'; - } - if (highlightStatus === false || isParent(ele, document.getElementById('ARK_BOX'))) { - return true; - } - if (debugModel === true) { - if (isParent(ele, document.getElementById('ARK_DEBUG_BOX')) === false) { - event.stopPropagation(); - event.preventDefault(); - delDebugBox(); - sendDebugMsg(); - return false; - } - return true; - } - delDebugBox(); - if (isAddPro === true && proEleObj.ele) { - event.stopPropagation(); - event.preventDefault(); - addProEleBox(); - return false; - } - if (isParent(ele, document.getElementById('ARK_BOX')) === false) { - event.stopPropagation(); - event.preventDefault(); - delClickBox(); - openVisualBox(); - return false; - } - // if (isAddPro === true) { - // Util.addEvent(eleDivTemp, 'click', function () { - // event.stopPropagation() - // addProEleBox() - // return false - // }) - // } else if (debugModel === false) { - // Util.addEvent(eleDivTemp, 'click', function (event) { - - // }, true) - // } - }, true); - - function setBoxPostion(ele) { - var eleOffsetParent = ele.offsetParent || document.body; - var mouseElePosition = offset(ele); - var parentPostion = offset(eleOffsetParent); - var y = mouseElePosition.top - parentPostion.top; - var x = mouseElePosition.left - parentPostion.left; - if (mouseElePosition.eleTable !== null) { - parentPostion = offset(mouseElePosition.eleTable.offsetParent); - x = mouseElePosition.left - parentPostion.left; - y = mouseElePosition.top - parentPostion.top; - } - var width = ele.offsetWidth; - var height = ele.offsetHeight; - return { - x: x - 1.5, - y: y - 1.5, - width: width, - height: height - }; - } - function setOnceBox(ele, id, className) { - var boxDiv = document.createElement('div'); - boxDiv.id = id; - boxDiv.className = className; - var eventPostion = setBoxPostion(ele); - boxDiv.style.top = eventPostion.y + 'px'; - boxDiv.style.left = eventPostion.x + 'px'; - boxDiv.style.width = eventPostion.width + 'px'; - boxDiv.style.height = eventPostion.height + 'px'; - return boxDiv; - } - - var eleDiv = null; - var timer = null; - var clickEleObj = {}; - var proEleObj = {}; - function setEleMessage(ele) { - var pathObj = domParentList(ele); - var path = pathObj.path; - var index = setIndex(ele, pathObj.path); - if (isAddPro === true) { - proEleObj = { - index: index, - elePath: elePath, - path: path, - newPath: pathObj.newPath, - ele: ele - }; - } else { - clickEleObj = { - index: index, - elePath: elePath, - path: path, - newPath: pathObj.newPath, - ele: ele - }; - } - } - - function addVisualListener() { - delClickBox(); - Util$1.addEvent(document, 'mousemove', mouseMoveEvent, true); - Util$1.addEvent(document, 'mouseout', mouseOutEvent, true); - // Util.addEvent(document, 'mouseover', showEleHover, true) - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].className = hoverEles[i].className.replace(' ARK_NO_LIGHT', ''); - } - } - function delEvents() { - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - while (hoverEles.length > 0) { - var hoverParentEle = hoverEles[0].parentNode || document.body; - hoverParentEle.removeChild(hoverEles[0]); - } - var eventDivs = Util$1.selectorAllEleList('[data-ark-id]'); - for (var i = 0; i < eventDivs.length; i++) { - eventDivs[i].removeAttribute('data-ark-id'); - eventDivs[i].removeAttribute('data-ark-attr'); - } - } - function removeVisualListener() { - delClickBox(); - // Util.removeEvent(document, 'mouseover', showEleHover, true) - Util$1.removeEvent(document, 'mousemove', mouseMoveEvent, true); - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].className += ' ARK_NO_LIGHT'; - } - } - var visualEvetnList = []; - function checkPoints() { - var ele = clickEleObj.ele; - var pageEvents = visualEvetnList; - var childrenList = ele.childNodes || []; - for (var i = 0; i < childrenList.length; i++) { - for (var y = 0; y < pageEvents.length; y++) { - var eventEleObj = pageEvents[y]; - if (checkNewPathBase(clickEleObj.newPath, eventEleObj.newPath) == true && pathContrast(clickEleObj, eventEleObj, true) === true) { - setVisualEvent(ele, eventEleObj); - } - } - } - } - function showVisualEvent(list) { - delEvents(); - var localList = []; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var newEvent = []; - for (var i = 0; i < list.length; i++) { - list[i]['inPage'] = false; - if (url === list[i].url || list[i].isAll === 1) { - - var eleShowPath = list[i].link; - var newPath = list[i].new_path; - var bindings = list[i].props_binding; - // var related = list[i].related - if (!newPath && !bindings) { - var index = list[i].index; - if (patt.test(eleShowPath) === true) { - eleShowPath = eleShowPath.replace(patt, ''); - } - var ele = parseEvent(eleShowPath)[index]; - if (ele) { - setVisualEvent(ele, list[i]); - list[i]['inPage'] = true; - } - } else { - list[i].newPath = newPath; - newEvent.push(list[i]); - } - localList.push(list[i]); - } - } - if (newEvent.length > 0) { - var eles = parserPageEvents(newEvent); - for (var y = 0; y < eles.length; y++) { - setVisualEvent(eles[y].ele, eles[y].config); - } - for (var t = 0; t < list.length; t++) { - for (var z = 0; z < newEvent.length; z++) { - if (list[t].appEventId === newEvent[z].newEvent && list[t].inPage === false) { - if (list[i].isAll === 1) { - list[t].inPage = newEvent[z].inPage; - } - } - } - } - } - visualEvetnList = localList; - - return list; - } - - function delVisualEvent(obj) { - var newPath = obj.new_path; - var bindings = obj.props_binding; - var ele = null; - var eles = []; - if (!newPath && !bindings) { - var eleShowPath = obj.link; - var index = obj.index; - ele = parseEvent(eleShowPath)[index]; - } else { - eles = parserPageEvents([obj]); - } - if (ele) { - removeVisualEvent(ele); - } - for (var i = 0; i < eles.length; i++) { - removeVisualEvent(eles[i].ele); - } - } - var highlightStatus = true; - function hiddenVisualEvent(status) { - delClickBox(); - // var eleList = Util.selectorAllEleList('[data-ark-attr]') // document.querySelectorAll('[data-ark-attr]') - if (!status) { - highlightStatus = false; - removeVisualListener(); - // var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE') - // for (var i = 0; i < hoverEles.length; i++) { - // hoverEles[i].className += ' ARK_NO_LIGHT' - // } - } else { - highlightStatus = true; - addVisualListener(); - } - // for (var i = 0; i < eleList.length; i++) { - // var ele = eleList[i] - // if (status) { - // var eleAttr = ele.getAttribute('data-ark-attr') - // setVisualEvent(ele, JSON.parse(eleAttr)) - // } - // } - } - - function openVisualEvent(obj) { - var newPath = obj.new_path; - var bindings = obj.props_binding; - var ele = null; - obj.isPage = true; - if (!newPath && !bindings) { - var eleShowPath = obj.link; - var index = obj.index; - ele = parseEvent(eleShowPath)[index]; - } else { - var eles = parserPageEvents([obj]); - if (eles.length > 0) { - ele = eles[0].ele; - } - } - if (ele) { - setVisualEvent(ele, obj, true); - } - } - var debugModel = false; - function openDebugModule(status) { - debugModel = status; - } - - /** - * 清除当前展示的debug框 - */ - function delDebugBox() { - var ele = document.getElementById('ARK_DEBUG_BOX'); - if (ele) { - var parent = ele.parentNode; - parent.removeChild(ele); - } - } - function openDebugEvent(obj) { - var ele = clickEleObj.ele; - var attrConfig = ele.getAttribute('data-ark-attr'); - attrConfig = JSON.parse(attrConfig); - var relateds = attrConfig.related || []; - var properties = attrConfig.properties || []; - var elePosition = boxPosition(ele, 'debug'); - var config = { - top: elePosition.top, - left: elePosition.left, - list: obj.event_info || [], - newPath: domParentList(ele).newPath - }; - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var eRelated = Util$1.toDeep(relateds[i].target); - eRelated['path'] = eRelated.h5_path; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(config.newPath, eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var value = relatedEele ? getElementContent(relatedEele, true) : ''; - if (value !== '') { - var rxegx = relateds[i].properties[0].regex; - if (rxegx) { - try { - rxegx = Util$1.decode(rxegx); - // rexegValue = rexegValue.replace('\\', '\\\\') - var _regex = new RegExp(rxegx); - var regexVal = _regex.exec(value); //value.match(rexegValue)// - if (regexVal && regexVal.length > 0) { - value = regexVal[0]; - } - } catch (e) {} - } - config.list.push({ - title: relateds[i].properties[0].key, - val: value - }); - } - } - } - } - } - for (var y = 0; y < properties.length; y++) { - config.list.push({ - title: properties[y].key, - val: properties[y].value - }); - } - - var debugTemp = setDebugTemp(config); - - var debugDiv = document.createElement('div'); - debugDiv.innerHTML = debugTemp; - document.body.appendChild(debugDiv.childNodes[0]); - - var cancelEle = document.getElementById('ARK_DEBUG_CHA'); - Util$1.addEvent(cancelEle, 'click', delDebugBox); - } - - function sendDebugMsg() { - - var eventConfig = clickEleObj.ele.getAttribute('data-ark-attr'); - if (!eventConfig) return; - var eventId = JSON.parse(eventConfig).appEventId; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var config = { - event_info: { - $event_id: eventId, - $lib_version: $lib_version, - $screen_width: window.screen.width, - $screen_height: window.screen.height - }, - type: 'debug', - target_page: url - }; - sendMsg(config); - } - - // 设置文字提示 - function delTipEle() { - var ele = document.getElementById('ARKTOOLTIP'); - if (ele) { - var parentEle = ele.parentNode || document.body; - parentEle.removeChild(ele); - tooltipObj.ele = null; - } - } - var tooltipObj = {}; - var hiddenTipTimer = null; - - Util$1.addEvent(document, 'mouseover', function (e) { - clearTimeout(hiddenTipTimer); - var ele = (e || window.event).target; - - var attr = ele.getAttribute('data-ark-tip'); - var attrPostion = ele.getAttribute('data-ark-tip-pos') || {}; - if (Util$1.paramType(attrPostion) === 'String') { - attrPostion = attrPostion.replace(/'/g, '"'); - attrPostion = JSON.parse(attrPostion); - } - if (attr) { - tooltipObj.ele = ele; - - delTipEle(); - try { - attr = JSON.parse(attr); - } catch (e) {} - var msg = ''; - var classPostion = 'ARKTOP'; - if (Util$1.paramType(attr) === 'String') { - msg = attr; - } - if (Util$1.paramType(attr) === 'Object' || Util$1.paramType(attrPostion) === 'Object') { - msg = attr.msg || msg; - if (attr['pos'] === 'right' || attrPostion['pos'] === 'right') { - classPostion = 'ARKRIGHT'; - } - if (attr['pos'] === 'bottom' || attrPostion['pos'] === 'bottom') { - classPostion = 'ARKBOTTOM'; - } - } - delTipEle(); - var tipDiv = setOnceBox(ele, 'ARKTOOLTIP', 'ARKTOOLTIP'); - if (classPostion === 'ARKBOTTOM') { - tipDiv.style.bottom = '-44px'; - tipDiv.style.top = 'unset'; - } else { - tipDiv.style.top = ele.offsetTop - 44 + 'px'; - } - - if (attrPostion['left']) { - tipDiv.style.left = attrPostion['left']; - } - if (attrPostion['top']) { - tipDiv.style.top = attrPostion['top']; - } - tipDiv.style.width = 'auto'; - tipDiv.style.height = 'auto'; - tipDiv.innerHTML = '
    ' + msg + ''; - ele.parentNode.appendChild(tipDiv); - } else { - hiddenTipTimer = setTimeout(function () { - if (isParent(ele, tooltipObj.ele) === false && isParent(ele, document.getElementById('ARKTOOLTIP')) === false) { - delTipEle(); - } - }, 200); - } - }); - - function setVisualStatus(status) { - tooltipObj['newVision'] = status; - } - - var isVisaulInit = true; - var visualStatus = false; - var highlightStatus$1 = true; - - /** - * 监听服务端iframeMessage消息 - * - * @param {JSON} msg 消息 - */ - function processMsg(msg) { - if (!isVisaulInit) { - return; - } - var eventList = []; - var type = msg.type; - // var url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.hash - switch (type) { - case 'INIT': - // 初始化验证 - if (msg.appid !== visualConfig.appkey) { - sendMsg({ - code: 400, - type: 'INIT', - msg: 'appkey不相同' - }); - isVisaulInit = false; - return; - } - sendMsg({ - code: 200, - type: 'INIT', - isNewVisual: true - }); - var obj = { - type: 'checkUrl', - code: 200, - url: window.location.href, - skip: true - }; - sendMsg(obj); - setVisualStatus(msg.isNewVisual || false); - sendChangeUrl(); - break; - case 'point_list': - // 所有已埋点元素绑定debug模式 - - eventList = msg.data || []; - if (highlightStatus$1 === false) { - return; - } - if (!isElmentReady() || document.readyState !== 'complete') { - setTimeout(function () { - processMsg(msg); - }, 1000); - return; - } else { - var pageList = showVisualEvent(eventList); - sendMsg({ - type: 'check_points', - list: pageList - }); - } - break; - // case 'EVENT_URL': - // // 验证埋点元素是否为当前页元素 - - // var eventUrlObj = { - // type: 'checkUrl', - // code: 200, - // url: url, - // skip: msg.url === url - // } - // sendMsg(eventUrlObj) - // break - case 'VISUAL': - if (highlightStatus$1 === false) { - visualStatus = msg.visual || false; - return; - } - if (msg.visual === true) { - // 开始初始化可视化埋点 - openDebugModule(false); - } else if (msg.debugmode === true) { - // 开始初始化debug模式 - openDebugModule(true); - } - if (highlightStatus$1 === true) { - addVisualListener(); - } - break; - case 'change_update': - if (highlightStatus$1 === false) { - return; - } - if (msg.path && msg.path.length > 0) { - // if (msg.path[0].url.charAt(msg.path[0].url.length - 1) === '/' && url.charAt(url.length - 1) !== '/') { - // url += '/' - // } - // if (url !== msg.path[0].url) { - // sendMsg({ - // type: 'change_page', - // code: 200, - // msg: '跳转埋点页面', - // path: msg.path, - // url: url - // }) - // } else { - openVisualEvent(msg.path[0]); - // } - } - break; - case 'change_delete': - if (visualStatus === false) { - openDebugModule(false); - } - - if (msg.path && msg.path.length > 0) { - delVisualEvent(msg.path[0]); - sendMsg({ - code: 200, - type: 'change_delete' - }); - } else { - sendMsg({ - code: 400, - type: 'change_delete', - msg: '删除失败' - }); - } - break; - case 'add_success': - sendMsg({ - code: 200, - type: 'add_success', - msg: '添加成功' - }); - break; - case 'success_update': - if (msg.path && msg.path.length > 0) { - showVisualEvent(msg.path); - } - break; - case 'debug': - // openDebugBox(msg) - openDebugEvent(msg); - break; - case 'highlight': - highlightStatus$1 = msg.highlight; - // if (highlightStatus === true) { - // showVisualEvent(eventList) - // } - // if (visualStatus) { - hiddenVisualEvent(highlightStatus$1); - - // } else { - // hiddenVisualEvent(highlightStatus) - - // } - break; - case 'like_pro': - backProInputList(msg); - break; - } - } - /** - * [initHeatmap description]初始化可视化并建立通讯 - * @return {[type]} [description] - */ - function initVisual() { - Util$1.changeHash(function () { - highlightStatus$1 = true; - visualStatus = true; - delEvents(); - hiddenVisualEvent(true); - sendChangeUrl(); - }); - } - // } - function sendChangeUrl() { - // var url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.hash - sendMsg({ - type: 'change_page_now', - code: 200, - msg: '跳转埋点页面', - url: window.location.href.replace('?visual=true&', '?').replace('?visual=true', '') - }); - } - - initVisual(); - - getMsg(msg => { - processMsg(msg); - }); - - // window.AnalysysModule = Util.objMerge(window.AnalysysModule || {}, { - // visual: { - // init: initVisual, - // msg: processMsg, - // version: '4.5.1' - // } - // }) - -}()); diff --git a/demo/jquery/sdk/5.0.4/index.d.ts b/demo/jquery/sdk/5.0.4/index.d.ts deleted file mode 100644 index aa9c4d7..0000000 --- a/demo/jquery/sdk/5.0.4/index.d.ts +++ /dev/null @@ -1,131 +0,0 @@ -/** - * sdk配置参数类型 - */ -export interface initConfig { - appkey: string; - uploadURL: string; - debugMode?: 0 | 1 | 2; - name?: string; //设置 JS SDK 全局对象别名 - - auto?: boolean; //是否自动采集pageview - pageProperty?: object; //设置自动采集时页面自定义属性 - pageViewBlackList?: any; //设置自动采集页面统计黑名单 - - autoProfile?: boolean; - encryptType?: number; - allowTimeCheck?: boolean; //设置是否开启时间校准 - maxDiffTimeInterval?: number; //设置最大时间校准分 - autoPageViewDuration?: boolean; //设置是否开启页面关闭事件自动采集 - sendDataTimeout?: number; // 上报超时时间 - - hash?: boolean; //设置检测 url hash 变化: - - sendType?: 'img' | 'post'; //设置上传日志方式 - crossSubdomain?: boolean; //设置在二级域名下存储cookie - - visitorConfigURL?: string; //(若使用可视化埋点,则必须) 设置可视化配置获取接口 - SDKFileDirectory?: string; //设置可视化模块SDK与热图模块SDK存放目录 - getDataTimeout?: number; //设置获取可视化埋点列表的超时时间 - - autoTrack?: boolean; // - autoClickBlackList?: string | (() => boolean) | Array; //设置全埋点统计黑名单 - userClickProperty?: any | object | (() => boolean); //设置全部或某个全埋点元素自定义属性 - trackList?: Array | ((path: string) => boolean); //设置除默认可输出元素外的可触控元素列表 - - autoHeatmap?: boolean; //设置是否启用热图数据采集,即在产品当中可使用热图分析功能 - autoWebstay?: boolean; //在开启热图功能(autoHeatmap设置为true)后,设置是否追踪页面滚动行为,即在产品当中可分析页面浏览深度 - webstayDuration?: number; //设置追踪页面滚动行为时,最大停留时长 - heatMapBlackList?: string; //设置热图统计黑名单 - - exposure: { - valid_time: number; - element_list: () => void | Array; - exposure_click: boolean; - property: object | (() => void); - multiple: boolean | number - }; - - beforePageView?: ((res:buriedPointData, setAttrs: Function) => boolean); //pageView上报之前钩子,若返回false,则终止pageView上报 - beforePageClose?: ((res:buriedPointData, setAttrs: Function) => boolean); //pageClose上报之前钩子,若返回false,则终止pageView上报 - beforeTrack?: ((res:buriedPointData, setAttrs: Function) => boolean); //track之前的钩子,参数为当前上报的数据对象,若返回false,就会终止track上报 - - beforeInit?: ((config:initConfig, next: Function) => Promise); //通知sdk客户端程序已经准备就绪了,你可以开始工作了 -} - - -/** - * 埋点数据类型 - */ - -export interface xcontextValue { - $url?: string; - $is_login?: boolean; -} - - -// 上报数据格式 -export interface buriedPointData { - appid: string; - xwho: string; - xwhat: string; - xwhen: number; - xcontext: xcontextValue; -} - -// 日志提示类型 -export interface msgetype { - key?: string - value?: any - code: string | number - fn?: string - keyType?: string -} - -// 请求入参 -export interface requestOptions { - url: string; - data?: any; - method?: string; - header?: object; - timeout?: number; - success?: Function; - error?: Function; -} - -type distinctId = string - -type attrs = {[key:string]: any} -type superAttrs = attrs -type eventAttrs = attrs -type userAttrs = attrs -type presetAttrs = attrs - -declare class arkSdk { - config: initConfig; - init(config: initConfig): void; - pageView(pageTitle: string, pageProperties: object): buriedPointData; - track(eventName: string, eventAttrs: eventAttrs): buriedPointData; - timeEvent(eventName: string): void; - alias(aliasId: string, callback?: () => void): void; - identify(distinctId: distinctId, callback?: () => void): void; - getDistinctId(callback?: (distinctId: distinctId) => void): distinctId; - registerSuperProperty(attrKey: string, attrValue: any, callback?: (attrs: superAttrs) => void): void; - registerSuperProperties(attrs: superAttrs, callback?: (attrs: superAttrs) => void): void; - getSuperProperty(attrName: string, callback?: (attrs: superAttrs) => void): superAttrs; - getSuperProperties(callback?: (attrs: superAttrs) => void): superAttrs; - unRegisterSuperProperty(attrName: string, callback?: (attrs: superAttrs) => void): void; - clearSuperProperties(callback?: (attrs: superAttrs) => void): void; - pageProperty(attrs: attrs): void; - profileSetOnce(attrs: userAttrs): void; - profileSet(attrs: userAttrs): void; - profileAppend(attrKey: string, attrValue: any): void; - profileIncrement(attrs: userAttrs): void; - profileDelete(): void; - profileUnset(attrName: string): void; - getPresetProperties(callback?: (attrs: presetAttrs) => void): presetAttrs; - reset(callback?: () => void): void; -} - -export const AnalysysAgent: arkSdk - -export default AnalysysAgent \ No newline at end of file diff --git a/demo/jquery/sdk/AnalysysAgent_Encrypt.amd.min.js b/demo/jquery/sdk/AnalysysAgent_Encrypt.amd.min.js deleted file mode 100644 index e1c8e66..0000000 --- a/demo/jquery/sdk/AnalysysAgent_Encrypt.amd.min.js +++ /dev/null @@ -1 +0,0 @@ -define(["exports"],function(t){"use strict";function e(t,e){return t(e={exports:{}},e.exports),e.exports}var n=e(function(t,e){var r;t.exports=(r=r||function(d){var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var t={},e=t.lib={},i=e.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=e.WordArray=i.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=s<<24-(n+a)%4*8}else for(a=0;a>>2]=r[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=d.ceil(e/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>16)&n)<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n;return t/=4294967296,(t+=.5)*(.5>>2]>>>24-i%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new f.init(r,e/2)}},o=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new f.init(r,e)}},h=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(o.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return o.parse(unescape(encodeURIComponent(t)))}},l=e.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,r=e.words,n=e.sigBytes,i=this.blockSize,a=n/(4*i),s=(a=t?d.ceil(a):d.max((0|a)-this._minBufferSize,0))*i,o=d.min(4*s,n);if(s){for(var h=0;h>>2]>>>24-a%4*8&255)<<16|(e[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|e[a+2>>>2]>>>24-(a+2)%4*8&255,o=0;o<4&&a+.75*o>>6*(3-o)&63));var h=n.charAt(64);if(h)for(;i.length%4;)i.push(h);return i.join("")},parse:function(t){var e=t.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var i=0;i>>6-o%4*2,a[s>>>2]|=(n|i)<<24-s%4*8,s++)}return h.create(a,s)}(t,e,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),r.enc.Base64)}),e(function(t,e){var s;t.exports=(s=n,function(d){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,S=[];!function(){for(var t=0;t<64;t++)S[t]=4294967296*d.abs(d.sin(t+1))|0}();var a=i.MD5=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var a=this._hash.words,s=t[e+0],o=t[e+1],h=t[e+2],l=t[e+3],d=t[e+4],f=t[e+5],c=t[e+6],u=t[e+7],_=t[e+8],p=t[e+9],g=t[e+10],v=t[e+11],m=t[e+12],w=t[e+13],y=t[e+14],b=t[e+15],k=A(k=a[0],B=a[1],z=a[2],x=a[3],s,7,S[0]),x=A(x,k,B,z,o,12,S[1]),z=A(z,x,k,B,h,17,S[2]),B=A(B,z,x,k,l,22,S[3]);k=A(k,B,z,x,d,7,S[4]),x=A(x,k,B,z,f,12,S[5]),z=A(z,x,k,B,c,17,S[6]),B=A(B,z,x,k,u,22,S[7]),k=A(k,B,z,x,_,7,S[8]),x=A(x,k,B,z,p,12,S[9]),z=A(z,x,k,B,g,17,S[10]),B=A(B,z,x,k,v,22,S[11]),k=A(k,B,z,x,m,7,S[12]),x=A(x,k,B,z,w,12,S[13]),z=A(z,x,k,B,y,17,S[14]),k=E(k,B=A(B,z,x,k,b,22,S[15]),z,x,o,5,S[16]),x=E(x,k,B,z,c,9,S[17]),z=E(z,x,k,B,v,14,S[18]),B=E(B,z,x,k,s,20,S[19]),k=E(k,B,z,x,f,5,S[20]),x=E(x,k,B,z,g,9,S[21]),z=E(z,x,k,B,b,14,S[22]),B=E(B,z,x,k,d,20,S[23]),k=E(k,B,z,x,p,5,S[24]),x=E(x,k,B,z,y,9,S[25]),z=E(z,x,k,B,l,14,S[26]),B=E(B,z,x,k,_,20,S[27]),k=E(k,B,z,x,w,5,S[28]),x=E(x,k,B,z,h,9,S[29]),z=E(z,x,k,B,u,14,S[30]),k=C(k,B=E(B,z,x,k,m,20,S[31]),z,x,f,4,S[32]),x=C(x,k,B,z,_,11,S[33]),z=C(z,x,k,B,v,16,S[34]),B=C(B,z,x,k,y,23,S[35]),k=C(k,B,z,x,o,4,S[36]),x=C(x,k,B,z,d,11,S[37]),z=C(z,x,k,B,u,16,S[38]),B=C(B,z,x,k,g,23,S[39]),k=C(k,B,z,x,w,4,S[40]),x=C(x,k,B,z,s,11,S[41]),z=C(z,x,k,B,l,16,S[42]),B=C(B,z,x,k,c,23,S[43]),k=C(k,B,z,x,p,4,S[44]),x=C(x,k,B,z,m,11,S[45]),z=C(z,x,k,B,b,16,S[46]),k=O(k,B=C(B,z,x,k,h,23,S[47]),z,x,s,6,S[48]),x=O(x,k,B,z,u,10,S[49]),z=O(z,x,k,B,y,15,S[50]),B=O(B,z,x,k,f,21,S[51]),k=O(k,B,z,x,m,6,S[52]),x=O(x,k,B,z,l,10,S[53]),z=O(z,x,k,B,g,15,S[54]),B=O(B,z,x,k,o,21,S[55]),k=O(k,B,z,x,_,6,S[56]),x=O(x,k,B,z,b,10,S[57]),z=O(z,x,k,B,c,15,S[58]),B=O(B,z,x,k,w,21,S[59]),k=O(k,B,z,x,d,6,S[60]),x=O(x,k,B,z,v,10,S[61]),z=O(z,x,k,B,h,15,S[62]),B=O(B,z,x,k,p,21,S[63]),a[0]=a[0]+k|0,a[1]=a[1]+B|0,a[2]=a[2]+z|0,a[3]=a[3]+x|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32;var i=d.floor(r/4294967296),a=r;e[15+(64+n>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),e[14+(64+n>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,o=s.words,h=0;h<4;h++){var l=o[h];o[h]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});function A(t,e,r,n,i,a,s){var o=t+(e&r|~e&n)+i+s;return(o<>>32-a)+e}function E(t,e,r,n,i,a,s){var o=t+(e&n|r&~n)+i+s;return(o<>>32-a)+e}function C(t,e,r,n,i,a,s){var o=t+(e^r^n)+i+s;return(o<>>32-a)+e}function O(t,e,r,n,i,a,s){var o=t+(r^(e|~n))+i+s;return(o<>>32-a)+e}t.MD5=n._createHelper(a),t.HmacMD5=n._createHmacHelper(a)}(Math),s.MD5)}),e(function(t,e){var s;t.exports=(s=n,function(){var t=s,e=t.lib,r=e.WordArray,n=e.Hasher,i=t.algo,f=[],a=i.SHA1=n.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r,n=this._hash.words,i=n[0],a=n[1],s=n[2],o=n[3],h=n[4],l=0;l<80;l++){l<16?f[l]=0|t[e+l]:(r=f[l-3]^f[l-8]^f[l-14]^f[l-16],f[l]=r<<1|r>>>31);var d=(i<<5|i>>>27)+h+f[l];d+=l<20?1518500249+(a&s|~a&o):l<40?1859775393+(a^s^o):l<60?(a&s|a&o|s&o)-1894007588:(a^s^o)-899497514,h=o,o=s,s=a<<30|a>>>2,a=i,i=d}n[0]=n[0]+i|0,n[1]=n[1]+a|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+h|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(64+n>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+n>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=n._createHelper(a),t.HmacSHA1=n._createHmacHelper(a)}(),s.SHA1)}),e(function(t,e){var r;t.exports=(r=n,void function(){var t=r.lib.Base,l=r.enc.Utf8;r.algo.HMAC=t.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=l.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),a=this._iKey=e.clone(),s=i.words,o=a.words,h=0;h>>2];t.sigBytes-=e}},g=(e.BlockCipher=o.extend({cfg:o.cfg.extend({mode:u,padding:p}),reset:function(){o.reset.call(this);var t,e=this.cfg,r=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(n,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?h.create([1398893684,1701076831]).concat(r).concat(e):e).toString(a)},parse:function(t){var e,r=a.parse(t),n=r.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=h.create(n.slice(2,4)),n.splice(0,4),r.sigBytes-=16),g.create({ciphertext:r,salt:e})}},m=e.SerializableCipher=r.extend({cfg:r.extend({format:v}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),a=i.finalize(e),s=i.cfg;return g.create({ciphertext:a,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=(t.kdf={}).OpenSSL={execute:function(t,e,r,n){n=n||h.random(8);var i=s.create({keySize:e+r}).compute(t,n),a=h.create(i.words.slice(e),4*r);return i.sigBytes=4*e,g.create({key:i,iv:a,salt:n})}},y=e.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:w}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var a=m.encrypt.call(this,t,e,i.key,n);return a.mixIn(i),a},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,m.decrypt.call(this,t,e,i.key,n)}})}())}),e(function(t,e){var i;t.exports=(i=n,function(){var t=i,e=t.lib.BlockCipher,r=t.algo,l=[],d=[],f=[],c=[],u=[],_=[],p=[],g=[],v=[],m=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=0,n=0,e=0;e<256;e++){var i=(i=n^n<<1^n<<2^n<<3^n<<4)>>>8^255&i^99;l[r]=i;var a=t[d[i]=r],s=t[a],o=t[s],h=257*t[i]^16843008*i;f[r]=h<<24|h>>>8,c[r]=h<<16|h>>>16,u[r]=h<<8|h>>>24,_[r]=h,h=16843009*o^65537*s^257*a^16843008*r,p[i]=h<<24|h>>>8,g[i]=h<<16|h>>>16,v[i]=h<<8|h>>>24,m[i]=h,r?(r=a^t[t[t[o^a]]],n^=t[t[n]]):r=n=1}}();var w=[0,1,2,4,8,16,32,64,128,27,54],n=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*(1+(this._nRounds=6+r)),i=this._keySchedule=[],a=0;a>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h]):(h=l[(h=h<<8|h>>>24)>>>24]<<24|l[h>>>16&255]<<16|l[h>>>8&255]<<8|l[255&h],h^=w[a/r|0]<<24),i[a]=i[a-r]^h);for(var s=this._invKeySchedule=[],o=0;o>>24]]^g[l[h>>>16&255]]^v[l[h>>>8&255]]^m[l[255&h]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,c,u,_,l)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,g,v,m,d),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,a,s,o){for(var h=this._nRounds,l=t[e]^r[0],d=t[e+1]^r[1],f=t[e+2]^r[2],c=t[e+3]^r[3],u=4,_=1;_>>24]^i[d>>>16&255]^a[f>>>8&255]^s[255&c]^r[u++],g=n[d>>>24]^i[f>>>16&255]^a[c>>>8&255]^s[255&l]^r[u++],v=n[f>>>24]^i[c>>>16&255]^a[l>>>8&255]^s[255&d]^r[u++],m=n[c>>>24]^i[l>>>16&255]^a[d>>>8&255]^s[255&f]^r[u++],l=p,d=g,f=v,c=m;p=(o[l>>>24]<<24|o[d>>>16&255]<<16|o[f>>>8&255]<<8|o[255&c])^r[u++],g=(o[d>>>24]<<24|o[f>>>16&255]<<16|o[c>>>8&255]<<8|o[255&l])^r[u++],v=(o[f>>>24]<<24|o[c>>>16&255]<<16|o[l>>>8&255]<<8|o[255&d])^r[u++],m=(o[c>>>24]<<24|o[l>>>16&255]<<16|o[d>>>8&255]<<8|o[255&f])^r[u++],t[e]=p,t[e+1]=g,t[e+2]=v,t[e+3]=m},keySize:8});t.AES=e._createHelper(n)}(),i.AES)})),d=e(function(t,e){var r;t.exports=((r=n).mode.ECB=function(){var t=r.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),t.Decryptor=t.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),t}(),r.mode.ECB)}),R=e(function(t,e){var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;e.assign=function(t){for(var e,r,n=Array.prototype.slice.call(arguments,1);n.length;){var i=n.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var a in i)e=i,r=a,Object.prototype.hasOwnProperty.call(e,r)&&(t[a]=i[a])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,n,i){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+n),i);else for(var a=0;a>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function H(t,e,r){t.bi_valid>i-r?(t.bi_buf|=e<>i-t.bi_valid,t.bi_valid+=r-i):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function P(t,e,r){for(var n,i=new Array(m+1),a=0,s=1;s<=m;s++)i[s]=a=a+r[s-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=K(i[o]++,o))}}function $(t){for(var e=0;e<_;e++)t.dyn_ltree[2*e]=0;for(e=0;e>1;1<=r;r--)W(t,a,r);for(i=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],W(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,W(t,a,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){for(var r,n,i,a,s,o=e.dyn_tree,h=e.max_code,l=e.stat_desc.static_tree,d=e.stat_desc.has_stree,f=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,u=e.stat_desc.max_length,_=0,p=0;p<=m;p++)t.bl_count[p]=0;for(o[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r>=7;a>>=1)if(1&e&&0!==t.dyn_ltree[2*r])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return f;for(r=32;r>>3,(a=t.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==e?tt(t,e,r,n):4===t.strategy||a===i?(H(t,2+(n?1:0),3),Y(t,E,C)):(H(t,4+(n?1:0),3),function(t,e,r,n){var i;for(H(t,e-257,5),H(t,r-1,5),H(t,n-4,4),i=0;i>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(D[r]+u+1)]++,t.dyn_dtree[2*I(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){var e;H(t,2,3),L(t,y,E),16===(e=t).bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}};var rt=function(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:t>>>1;e[r]=t}return e}();var it,at=function(t,e,r,n){var i=nt,a=n+r;t^=-1;for(var s=n;s>>8^i[255&(t^e[s])];return-1^t},st={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},ot=0,ht=4,lt=0,dt=-2,ft=-1,ct=4,ut=2,_t=8,pt=9,gt=286,vt=30,mt=19,wt=2*gt+1,yt=15,bt=3,kt=258,xt=kt+bt+1,zt=42,Bt=113,St=1,At=2,Et=3,Ct=4;function Ot(t,e){return t.msg=st[e],e}function Dt(t){return(t<<1)-(4t.avail_out&&(r=t.avail_out),0!==r&&(R.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function Rt(t,e){et._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Mt(t.strm)}function Nt(t,e){t.pending_buf[t.pending++]=e}function jt(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function Ft(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-xt?t.strstart-(t.w_size-xt):0,l=t.window,d=t.w_mask,f=t.prev,c=t.strstart+kt,u=l[a+s-1],_=l[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(r=e)+s]===_&&l[r+s-1]===u&&l[r]===l[a]&&l[++r]===l[a+1]){a+=2,r++;do{}while(l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&ah&&0!=--i);return s<=t.lookahead?s:t.lookahead}function Zt(t){var e,r,n,i,a,s,o,h,l,d,f=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-xt)){for(R.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;n=t.head[--e],t.head[e]=f<=n?n-f:0,--r;);for(e=r=f;n=t.prev[--e],t.prev[e]=f<=n?n-f:0,--r;);i+=f}if(0===t.strm.avail_in)break;if(s=t.strm,o=t.window,h=t.strstart+t.lookahead,l=i,d=void 0,d=s.avail_in,l=bt)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt)if(n=et._tr_tally(t,t.strstart-t.match_start,t.match_length-bt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=bt){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=bt&&(t.ins_h=(t.ins_h<=bt&&t.match_length<=t.prev_length){for(i=t.strstart+t.lookahead-bt,n=et._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-bt),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=i&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Zt(t),0===t.lookahead&&e===ot)return St;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Rt(t,!1),0===t.strm.avail_out))return St;if(t.strstart-t.block_start>=t.w_size-xt&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):(t.strstart>t.block_start&&(Rt(t,!1),t.strm.avail_out),St)}),new Ht(4,4,8,4,It),new Ht(4,5,16,8,It),new Ht(4,6,32,32,It),new Ht(4,4,16,16,Ut),new Ht(8,16,32,32,Ut),new Ht(8,16,128,128,Ut),new Ht(8,32,128,256,Ut),new Ht(32,128,258,1024,Ut),new Ht(32,258,258,4096,Ut)];var Xt={deflateInit:function(t,e){return $t(t,e,_t,15,8,0)},deflateInit2:$t,deflateReset:Pt,deflateResetKeep:Kt,deflateSetHeader:function(t,e){return!t||!t.state||2!==t.state.wrap?dt:(t.state.gzhead=e,lt)},deflate:function(t,e){var r,n,i,a,s;if(!t||!t.state||5>8&255),Nt(n,n.gzhead.time>>16&255),Nt(n,n.gzhead.time>>24&255),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Nt(n,255&n.gzhead.extra.length),Nt(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=at(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,0),Nt(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),Nt(n,3),n.status=Bt)):(s=_t+(n.w_bits-8<<4)<<8,s|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(s|=32),s+=31-s%31,n.status=Bt,jt(n,s),0!==n.strstart&&(jt(n,t.adler>>>16),jt(n,65535&t.adler)),t.adler=1)),69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending!==n.pending_buf_size));)Nt(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),Mt(t),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}a=n.gzindexi&&(t.adler=at(t.adler,n.pending_buf,n.pending-i,i)),0===a&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&Mt(t),n.pending+2<=n.pending_buf_size&&(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),t.adler=0,n.status=Bt)):n.status=Bt),0!==n.pending){if(Mt(t),0===t.avail_out)return n.last_flush=-1,lt}else if(0===t.avail_in&&Dt(e)<=Dt(r)&&e!==ht)return Ot(t,-5);if(666===n.status&&0!==t.avail_in)return Ot(t,-5);if(0!==t.avail_in||0!==n.lookahead||e!==ot&&666!==n.status){var o=2===n.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(Zt(t),0===t.lookahead)){if(e===ot)return St;break}if(t.match_length=0,r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):3===n.strategy?function(t,e){for(var r,n,i,a,s=t.window;;){if(t.lookahead<=kt){if(Zt(t),t.lookahead<=kt&&e===ot)return St;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=bt&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=bt?(r=et._tr_tally(t,1,t.match_length-bt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=et._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Rt(t,!1),0===t.strm.avail_out))return St}return t.insert=0,e===ht?(Rt(t,!0),0===t.strm.avail_out?Et:Ct):t.last_lit&&(Rt(t,!1),0===t.strm.avail_out)?St:At}(n,e):it[n.level].func(n,e);if(o!==Et&&o!==Ct||(n.status=666),o===St||o===Et)return 0===t.avail_out&&(n.last_flush=-1),lt;if(o===At&&(1===e?et._tr_align(n):5!==e&&(et._tr_stored_block(n,0,0,!1),3===e&&(Tt(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Mt(t),0===t.avail_out))return n.last_flush=-1,lt}return e!==ht?lt:n.wrap<=0?1:(2===n.wrap?(Nt(n,255&t.adler),Nt(n,t.adler>>8&255),Nt(n,t.adler>>16&255),Nt(n,t.adler>>24&255),Nt(n,255&t.total_in),Nt(n,t.total_in>>8&255),Nt(n,t.total_in>>16&255),Nt(n,t.total_in>>24&255)):(jt(n,t.adler>>>16),jt(n,65535&t.adler)),Mt(t),0=r.w_size&&(0===a&&(Tt(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new R.Buf8(r.w_size),R.arraySet(l,e,d-r.w_size,r.w_size,0),e=l,d=r.w_size),s=t.avail_in,o=t.next_in,h=t.input,t.avail_in=d,t.next_in=0,t.input=e,Zt(r);r.lookahead>=bt;){for(n=r.strstart,i=r.lookahead-(bt-1);r.ins_h=(r.ins_h<>>6:(r<65536?e[i++]=224|r>>>12:(e[i++]=240|r>>>18,e[i++]=128|r>>>12&63),e[i++]=128|r>>>6&63),e[i++]=128|63&r);return e},buf2binstring:function(t){return Jt(t,t.length)},binstring2buf:function(t){for(var e=new R.Buf8(t.length),r=0,n=e.length;r>10&1023,a[s++]=56320|1023&r)}return Jt(a,s)},utf8border:function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return!(r<0)&&0!==r&&r+Yt[t[r]]>e?r:e}};var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},te=Object.prototype.toString,ee=0,re=-1,ne=0,ie=8;function ae(t){if(!(this instanceof ae))return new ae(t);this.options=R.assign({level:re,method:ie,chunkSize:16384,windowBits:15,memLevel:8,strategy:ne,to:""},t||{});var e=this.options;if(e.raw&&0u?(p=T[M+s[w]],E[C+s[w]]):(p=96,0),h=1<>z)+(l-=h)]=_<<24|p<<16|g|0,0!==l;);for(h=1<>=1;if(0!==h?(A&=h-1,A+=h):A=0,w++,0==--O[m]){if(m===b)break;m=e[r+s[w]]}if(k>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function be(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new R.Buf16(320),this.work=new R.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function ke(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=ve,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new R.Buf32(me),e.distcode=e.distdyn=new R.Buf32(we),e.sane=1,e.back=-1,pe):ge}function xe(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,ke(t)):ge}function ze(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=a.wsize?(R.arraySet(a.window,e,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n<(i=a.wsize-a.wnext)&&(i=n),R.arraySet(a.window,e,r-n,i,a.wnext),(n-=i)?(R.arraySet(a.window,e,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=at(r.check,A,2,0),d=l=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&l)){t.msg="unknown compression method",r.mode=30;break}if(d-=4,k=8+(15&(l>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=3;case 3:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>8&255,A[2]=l>>>16&255,A[3]=l>>>24&255,r.check=at(r.check,A,4,0)),d=l=0,r.mode=4;case 4:for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>8),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=at(r.check,A,2,0)),d=l=0,r.mode=5;case 5:if(1024&r.flags){for(;d<16;){if(0===o)break t;o--,l+=n[a++]<>>8&255,r.check=at(r.check,A,2,0)),d=l=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(u=r.length)&&(u=o),u&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),R.arraySet(r.head.extra,n,a,u,k)),512&r.flags&&(r.check=at(r.check,n,u,a)),o-=u,a+=u,r.length-=u),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(u=0;k=n[a+u++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&u>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;d<32;){if(0===o)break t;o--,l+=n[a++]<>>=7&d,d-=7&d,r.mode=27;break}for(;d<3;){if(0===o)break t;o--,l+=n[a++]<>>=1)){case 0:r.mode=14;break;case 1:if(!function(t){if(Ee){var e;for(Se=new R.Buf32(512),Ae=new R.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ce(ue,t.lens,0,288,Se,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ce(_e,t.lens,0,32,Ae,0,t.work,{bits:5}),Ee=!1}t.lencode=Se,t.lenbits=9,t.distcode=Ae,t.distbits=5}(r),r.mode=20,6!==e)break;l>>>=2,d-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}l>>>=2,d-=2;break;case 14:for(l>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,l+=n[a++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&l,d=l=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(u=r.length){if(o>>=5,d-=5,r.ndist=1+(31&l),l>>>=5,d-=5,r.ncode=4+(15&l),l>>>=4,d-=4,286>>=3,d-=3}for(;r.have<19;)r.lens[E[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,z={bits:r.lenbits},x=ce(0,r.lens,0,19,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=g,d-=g,r.lens[r.have++]=m;else{if(16===m){for(B=g+2;d>>=g,d-=g,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],u=3+(3&l),l>>>=2,d-=2}else if(17===m){for(B=g+3;d>>=g)),l>>>=3,d-=3}else{for(B=g+7;d>>=g)),l>>>=7,d-=7}if(r.have+u>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;u--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,z={bits:r.lenbits},x=ce(ue,r.lens,0,r.nlen,r.lencode,0,r.work,z),r.lenbits=z.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,z={bits:r.distbits},x=ce(_e,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,z),r.distbits=z.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=s,t.avail_out=h,t.next_in=a,t.avail_in=o,r.hold=l,r.bits=d,function(t,e){var r,n,i,a,s,o,h=t.state,l=t.next_in,d=t.input,f=l+(t.avail_in-5),c=t.next_out,u=t.output,_=c-(e-t.avail_out),p=c+(t.avail_out-257),g=h.dmax,v=h.wsize,m=h.whave,w=h.wnext,y=h.window,b=h.hold,k=h.bits,x=h.lencode,z=h.distcode,B=(1<>>=n=r>>>24,k-=n,0===(n=r>>>16&255))u[c++]=65535&r;else{if(!(16&n)){if(0==(64&n)){r=x[(65535&r)+(b&(1<>>=n,k-=n),k<15&&(b+=d[l++]<>>=n=r>>>24,k-=n,!(16&(n=r>>>16&255))){if(0==(64&n)){r=z[(65535&r)+(b&(1<>>=n,k-=n,(n=c-_)>3,b&=(1<<(k-=i<<3))-1,t.next_in=l,t.next_out=c,t.avail_in=l>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,r.length=m,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=12;break}if(64&v){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;v=(S=r.distcode[l&(1<>>16&255,m=65535&S,!((g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>w)])>>>16&255,m=65535&S,!(w+(g=S>>>24)<=d);){if(0===o)break t;o--,l+=n[a++]<>>=w,d-=w,r.back+=w}if(l>>>=g,d-=g,r.back+=g,64&v){t.msg="invalid distance code",r.mode=30;break}r.offset=m,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(B=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(u=c-h,r.offset>u){if((u=r.offset-u)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}_=u>r.wnext?(u-=r.wnext,r.wsize-u):r.wnext-u,u>r.length&&(u=r.length),p=r.window}else p=i,_=s-r.offset,u=r.length;for(h>16&255,s[o++]=e>>8&255,s[o++]=255&e;2===a&&(e=Ke[t.charCodeAt(r)]<<2|Ke[t.charCodeAt(r+1)]>>4,s[o++]=255&e);1===a&&(e=Ke[t.charCodeAt(r)]<<10|Ke[t.charCodeAt(r+1)]<<4|Ke[t.charCodeAt(r+2)]>>2,s[o++]=e>>8&255,s[o++]=255&e);return s},He=function(t){for(var e,r=t.length,n=r%3,i=[],a=0,s=r-n;a>18&63]+Le[t>>12&63]+Le[t>>6&63]+Le[63&t]}(n));return i.join("")}(t,a,s>2]+Le[e<<4&63]+"==")):2==n&&(e=(t[r-2]<<8)+t[r-1],i.push(Le[e>>10]+Le[e>>4&63]+Le[e<<2&63]+"="));return i.join("")},Le=[],Ke=[],Pe="undefined"!=typeof Uint8Array?Uint8Array:Array,$e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Xe=0,qe=$e.length;Xe>6|192):(e+=String.fromCharCode(n>>12|224),e+=String.fromCharCode(n>>6&63|128)),e+=String.fromCharCode(63&n|128))}return e}(t);l>2,a=(3&e)<<4|(r=t.charCodeAt(l++))>>4,s=(15&r)<<2|(n=t.charCodeAt(l++))>>6,o=63&n,isNaN(r)?s=o=64:isNaN(n)&&(o=64),h=h+Ge.charAt(i)+Ge.charAt(a)+Ge.charAt(s)+Ge.charAt(o);return h},Je.prototype.decode=function(t){var e,r,n,i,a,s,o="",h=0;for(t=t.replace(/[^A-Za-z0-9+/=]/g,"");h>4,r=(15&i)<<4|(a=Ge.indexOf(t.charAt(h++)))>>2,n=(3&a)<<6|(s=Ge.indexOf(t.charAt(h++))),o+=String.fromCharCode(e),64!==a&&(o+=String.fromCharCode(r)),64!==s&&(o+=String.fromCharCode(n));return o=function(t){for(var e="",r=0,n=0,i=0,a=0;r>>32-e}function l(t,e){var r=2147483648&t,n=2147483648&e,i=1073741824&t,a=1073741824&e,s=(1073741823&t)+(1073741823&e);return i&a?2147483648^s^r^n:i|a?1073741824&s?3221225472^s^r^n:1073741824^s^r^n:s^r^n}function r(t,e,r,n,i,a,s){var o;return t=l(t,l(l((o=e)&r|~o&n,i),s)),l(h(t,a),e)}function n(t,e,r,n,i,a,s){var o;return t=l(t,l(l(e&(o=n)|r&~o,i),s)),l(h(t,a),e)}function i(t,e,r,n,i,a,s){return t=l(t,l(l(e^r^n,i),s)),l(h(t,a),e)}function a(t,e,r,n,i,a,s){return t=l(t,l(l(r^(e|~n),i),s)),l(h(t,a),e)}function s(t){for(var e="",r="",n=0;n<=3;n++)e+=(r="0"+(t>>>8*n&255).toString(16)).substr(r.length-2,2);return e}for(var o,d,f,c,u=function(t){for(var e,r=t.length,n=r+8,i=16*(1+(n-n%64)/64),a=Array(i-1),s=0,o=0;o>>29,a}(t),_=1732584193,p=4023233417,g=2562383102,v=271733878,m=0;m>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - - })); - }); - - var encUtf8 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - - })); - }); - - var encBase64 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64; - - })); - }); - - var md5 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - - })); - }); - - var sha1 = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - - })); - }); - - var hmac = createCommonjsModule(function (module, exports) { - (function (root, factory) { - { - // CommonJS - module.exports = exports = factory(core); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - })); - }); - - var evpkdf = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, sha1, hmac); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - - })); - }); - - var cipherCore = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, evpkdf); - } - }(commonjsGlobal, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined$1) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined$1; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - })); - }); - - var aes = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, encBase64, md5, evpkdf, cipherCore); - } - }(commonjsGlobal, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - - })); - }); - - var modeEcb = createCommonjsModule(function (module, exports) { - (function (root, factory, undef) { - { - // CommonJS - module.exports = exports = factory(core, cipherCore); - } - }(commonjsGlobal, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - - })); - }); - - var common = createCommonjsModule(function (module, exports) { - - - var TYPED_OK = (typeof Uint8Array !== 'undefined') && - (typeof Uint16Array !== 'undefined') && - (typeof Int32Array !== 'undefined'); - - function _has(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - } - - exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (var p in source) { - if (_has(source, p)) { - obj[p] = source[p]; - } - } - } - - return obj; - }; - - - // reduce buffer size, avoiding mem copy - exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { return buf; } - if (buf.subarray) { return buf.subarray(0, size); } - buf.length = size; - return buf; - }; - - - var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - } - }; - - var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - } - }; - - - // Enable/Disable typed arrays use, for testing - // - exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } - }; - - exports.setTyped(TYPED_OK); - }); - var common_1 = common.assign; - var common_2 = common.shrinkBuf; - var common_3 = common.setTyped; - var common_4 = common.Buf8; - var common_5 = common.Buf16; - var common_6 = common.Buf32; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - /* eslint-disable space-unary-ops */ - - - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - //var Z_FILTERED = 1; - //var Z_HUFFMAN_ONLY = 2; - //var Z_RLE = 3; - var Z_FIXED = 4; - //var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - var Z_BINARY = 0; - var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN = 2; - - /*============================================================================*/ - - - function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - // From zutil.h - - var STORED_BLOCK = 0; - var STATIC_TREES = 1; - var DYN_TREES = 2; - /* The three kinds of block type */ - - var MIN_MATCH = 3; - var MAX_MATCH = 258; - /* The minimum and maximum match lengths */ - - // From deflate.h - /* =========================================================================== - * Internal compression state. - */ - - var LENGTH_CODES = 29; - /* number of length codes, not counting the special END_BLOCK code */ - - var LITERALS = 256; - /* number of literal bytes 0..255 */ - - var L_CODES = LITERALS + 1 + LENGTH_CODES; - /* number of Literal or Length codes, including the END_BLOCK code */ - - var D_CODES = 30; - /* number of distance codes */ - - var BL_CODES = 19; - /* number of codes used to transfer the bit lengths */ - - var HEAP_SIZE = 2 * L_CODES + 1; - /* maximum heap size */ - - var MAX_BITS = 15; - /* All codes must not exceed MAX_BITS bits */ - - var Buf_size = 16; - /* size of bit buffer in bi_buf */ - - - /* =========================================================================== - * Constants - */ - - var MAX_BL_BITS = 7; - /* Bit length codes must not exceed MAX_BL_BITS bits */ - - var END_BLOCK = 256; - /* end of block literal code */ - - var REP_3_6 = 16; - /* repeat previous bit length 3-6 times (2 bits of repeat count) */ - - var REPZ_3_10 = 17; - /* repeat a zero length 3-10 times (3 bits of repeat count) */ - - var REPZ_11_138 = 18; - /* repeat a zero length 11-138 times (7 bits of repeat count) */ - - /* eslint-disable comma-spacing,array-bracket-spacing */ - var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - - var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - - var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - - var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; - /* eslint-enable comma-spacing,array-bracket-spacing */ - - /* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - - /* =========================================================================== - * Local data. These are initialized only once. - */ - - // We pre-fill arrays with 0 to avoid uninitialized gaps - - var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - - // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 - var static_ltree = new Array((L_CODES + 2) * 2); - zero(static_ltree); - /* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - - var static_dtree = new Array(D_CODES * 2); - zero(static_dtree); - /* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - - var _dist_code = new Array(DIST_CODE_LEN); - zero(_dist_code); - /* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - - var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zero(_length_code); - /* length code for each normalized match length (0 == MIN_MATCH) */ - - var base_length = new Array(LENGTH_CODES); - zero(base_length); - /* First normalized length for each code (0 = MIN_MATCH) */ - - var base_dist = new Array(D_CODES); - zero(base_dist); - /* First normalized distance for each code (0 = distance of 1) */ - - - function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; - } - - - var static_l_desc; - var static_d_desc; - var static_bl_desc; - - - function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ - } - - - - function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; - } - - - /* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ - function put_short(s, w) { - // put_byte(s, (uch)((w) & 0xff)); - // put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; - } - - - /* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } - } - - - function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); - } - - - /* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; - } - - - /* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ - function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } - } - - - /* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - function gen_bitlen(s, desc) - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - { - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } - } - - - /* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - function gen_codes(tree, max_code, bl_count) - // ct_data *tree; /* the tree to decorate */ - // int max_code; /* largest code with non zero frequency */ - // ushf *bl_count; /* number of codes at each bit length */ - { - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; - } - - - /* =========================================================================== - * Initialize a new block. - */ - function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; - } - - - /* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ - function bi_windup(s) - { - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; - } - - /* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ - function copy_block(s, buf, len, header) - //DeflateState *s; - //charf *buf; /* the input data */ - //unsigned len; /* its length */ - //int header; /* true if block header must be written */ - { - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } - // while (len--) { - // put_byte(s, *buf++); - // } - common.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; - } - - /* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); - } - - /* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - function pqdownheap(s, tree, k) - // deflate_state *s; - // ct_data *tree; /* the tree to restore */ - // int k; /* node to move down */ - { - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; - } - - - // inlined manually - // var SMALLEST = 1; - - /* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ - function compress_block(s, ltree, dtree) - // deflate_state *s; - // const ct_data *ltree; /* literal tree */ - // const ct_data *dtree; /* distance tree */ - { - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); - } - - - /* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - function build_tree(s, desc) - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - { - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); - } - - - /* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ - function scan_tree(s, tree, max_code) - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - { - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } - } - - - /* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - function send_tree(s, tree, max_code) - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - { - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } - } - - - /* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; - } - - - /* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - function send_all_trees(s, lcodes, dcodes, blcodes) - // deflate_state *s; - // int lcodes, dcodes, blcodes; /* number of codes for each tree */ - { - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); - } - - - /* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ - function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; - } - - - var static_init_done = false; - - /* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ - function _tr_init(s) - { - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); - } - - - /* =========================================================================== - * Send a stored block - */ - function _tr_stored_block(s, buf, stored_len, last) - //DeflateState *s; - //charf *buf; /* input block */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - { - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ - } - - - /* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ - function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); - } - - - /* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - function _tr_flush_block(s, buf, stored_len, last) - //DeflateState *s; - //charf *buf; /* input block, or NULL if too old */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - { - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); - } - - /* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - function _tr_tally(s, dist, lc) - // deflate_state *s; - // unsigned dist; /* distance of matched string */ - // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ - { - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - - //#ifdef TRUNCATE_BLOCK - // /* Try to guess if it is profitable to stop the current block here */ - // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { - // /* Compute an upper bound for the compressed length */ - // out_length = s.last_lit*8; - // in_length = s.strstart - s.block_start; - // - // for (dcode = 0; dcode < D_CODES; dcode++) { - // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); - // } - // out_length >>>= 3; - // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - // // s->last_lit, in_length, out_length, - // // 100L - out_length*100L/in_length)); - // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { - // return true; - // } - // } - //#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - } - - var _tr_init_1 = _tr_init; - var _tr_stored_block_1 = _tr_stored_block; - var _tr_flush_block_1 = _tr_flush_block; - var _tr_tally_1 = _tr_tally; - var _tr_align_1 = _tr_align; - - var trees = { - _tr_init: _tr_init_1, - _tr_stored_block: _tr_stored_block_1, - _tr_flush_block: _tr_flush_block_1, - _tr_tally: _tr_tally_1, - _tr_align: _tr_align_1 - }; - - // Note: adler32 takes 12% for level 0 and 2% for level 6. - // It isn't worth it to make additional optimizations as in original. - // Small size is preferable. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; - } - - - var adler32_1 = adler32; - - // Note: we can't get significant speed boost here. - // So write code to minimize size - no pregenerated tables - // and array tools dependencies. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // Use ordinary array, since untyped makes no boost here - function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; - } - - // Create table on load. Just 255 signed longs. Not a problem. - var crcTable = makeTable(); - - - function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; - } - - - var crc32_1 = crc32; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var messages = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - - - - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - /* Allowed flush values; see deflate() and inflate() below for details */ - var Z_NO_FLUSH = 0; - var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - var Z_BLOCK = 5; - //var Z_TREES = 6; - - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK = 0; - var Z_STREAM_END = 1; - //var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - //var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - //var Z_VERSION_ERROR = -6; - - - /* compression levels */ - //var Z_NO_COMPRESSION = 0; - //var Z_BEST_SPEED = 1; - //var Z_BEST_COMPRESSION = 9; - var Z_DEFAULT_COMPRESSION = -1; - - - var Z_FILTERED = 1; - var Z_HUFFMAN_ONLY = 2; - var Z_RLE = 3; - var Z_FIXED$1 = 4; - var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - //var Z_BINARY = 0; - //var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN$1 = 2; - - - /* The deflate compression method */ - var Z_DEFLATED = 8; - - /*============================================================================*/ - - - var MAX_MEM_LEVEL = 9; - /* Maximum value for memLevel in deflateInit2 */ - var MAX_WBITS = 15; - /* 32K LZ77 window */ - var DEF_MEM_LEVEL = 8; - - - var LENGTH_CODES$1 = 29; - /* number of length codes, not counting the special END_BLOCK code */ - var LITERALS$1 = 256; - /* number of literal bytes 0..255 */ - var L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1; - /* number of Literal or Length codes, including the END_BLOCK code */ - var D_CODES$1 = 30; - /* number of distance codes */ - var BL_CODES$1 = 19; - /* number of codes used to transfer the bit lengths */ - var HEAP_SIZE$1 = 2 * L_CODES$1 + 1; - /* maximum heap size */ - var MAX_BITS$1 = 15; - /* All codes must not exceed MAX_BITS bits */ - - var MIN_MATCH$1 = 3; - var MAX_MATCH$1 = 258; - var MIN_LOOKAHEAD = (MAX_MATCH$1 + MIN_MATCH$1 + 1); - - var PRESET_DICT = 0x20; - - var INIT_STATE = 42; - var EXTRA_STATE = 69; - var NAME_STATE = 73; - var COMMENT_STATE = 91; - var HCRC_STATE = 103; - var BUSY_STATE = 113; - var FINISH_STATE = 666; - - var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ - var BS_BLOCK_DONE = 2; /* block flush performed */ - var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ - var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - - var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - - function err(strm, errorCode) { - strm.msg = messages[errorCode]; - return errorCode; - } - - function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); - } - - function zero$1(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - - /* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ - function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - common.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } - } - - - function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); - } - - - function put_byte(s, b) { - s.pending_buf[s.pending++] = b; - } - - - /* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ - function putShortMSB(s, b) { - // put_byte(s, (Byte)(b >> 8)); - // put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; - } - - - /* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ - function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - common.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32_1(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32_1(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; - } - - - /* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ - function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH$1; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH$1 - (strend - scan); - scan = strend - MAX_MATCH$1; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; - } - - - /* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ - function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - common.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH$1) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; - //#if MIN_MATCH != 3 - // Call update_hash() MIN_MATCH-3 more times - //#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH$1) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - // if (s.high_water < s.window_size) { - // var curr = s.strstart + s.lookahead; - // var init = 0; - // - // if (s.high_water < curr) { - // /* Previous high water mark below current data -- zero WIN_INIT - // * bytes or up to end of window, whichever is less. - // */ - // init = s.window_size - curr; - // if (init > WIN_INIT) - // init = WIN_INIT; - // zmemzero(s->window + curr, (unsigned)init); - // s->high_water = curr + init; - // } - // else if (s->high_water < (ulg)curr + WIN_INIT) { - // /* High water mark at or above current data, but below current data - // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - // * to end of window, whichever is less. - // */ - // init = (ulg)curr + WIN_INIT - s->high_water; - // if (init > s->window_size - s->high_water) - // init = s->window_size - s->high_water; - // zmemzero(s->window + s->high_water, (unsigned)init); - // s->high_water += init; - // } - // } - // - // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - // "not enough room for search"); - } - - /* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ - function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); - // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || - // s.block_start >= s.w_size)) { - // throw new Error("slide too late"); - // } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); - // if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; - } - - /* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH$1) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH$1) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH$1); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH$1) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - - //#if MIN_MATCH != 3 - // Call UPDATE_HASH() MIN_MATCH-3 more times - //#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH$1 - 1)) ? s.strstart : MIN_MATCH$1 - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH$1) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH$1 - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH$1 && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH$1 - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH$1 && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH$1; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH$1); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH$1 - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH$1 - 1 ? s.strstart : MIN_MATCH$1 - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; - } - - - /* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ - function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH$1) { - fill_window(s); - if (s.lookahead <= MAX_MATCH$1 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH$1 && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH$1; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH$1 - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH$1) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH$1); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ - function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; - } - - var configuration_table; - - configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ - ]; - - - /* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ - function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero$1(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH$1 - 1; - s.match_available = 0; - s.ins_h = 0; - } - - - function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new common.Buf16(HEAP_SIZE$1 * 2); - this.dyn_dtree = new common.Buf16((2 * D_CODES$1 + 1) * 2); - this.bl_tree = new common.Buf16((2 * BL_CODES$1 + 1) * 2); - zero$1(this.dyn_ltree); - zero$1(this.dyn_dtree); - zero$1(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new common.Buf16(MAX_BITS$1 + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new common.Buf16(2 * L_CODES$1 + 1); /* heap used to build the Huffman trees */ - zero$1(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new common.Buf16(2 * L_CODES$1 + 1); //uch depth[2*L_CODES+1]; - zero$1(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ - } - - - function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN$1; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; - } - - - function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; - } - - - function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; - } - - - function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED$1) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH$1 - 1) / MIN_MATCH$1); - - s.window = new common.Buf8(s.w_size * 2); - s.head = new common.Buf16(s.hash_size); - s.prev = new common.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new common.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); - } - - function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); - } - - - function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - - //#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } - //#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero$1(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; - } - - function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; - } - - - /* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ - function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero$1(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new common.Buf8(s.w_size); - common.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH$1) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH$1 - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH$1 - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH$1 - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; - } - - - var deflateInit_1 = deflateInit; - var deflateInit2_1 = deflateInit2; - var deflateReset_1 = deflateReset; - var deflateResetKeep_1 = deflateResetKeep; - var deflateSetHeader_1 = deflateSetHeader; - var deflate_2 = deflate; - var deflateEnd_1 = deflateEnd; - var deflateSetDictionary_1 = deflateSetDictionary; - var deflateInfo = 'pako deflate (from Nodeca project)'; - - /* Not implemented - exports.deflateBound = deflateBound; - exports.deflateCopy = deflateCopy; - exports.deflateParams = deflateParams; - exports.deflatePending = deflatePending; - exports.deflatePrime = deflatePrime; - exports.deflateTune = deflateTune; - */ - - var deflate_1 = { - deflateInit: deflateInit_1, - deflateInit2: deflateInit2_1, - deflateReset: deflateReset_1, - deflateResetKeep: deflateResetKeep_1, - deflateSetHeader: deflateSetHeader_1, - deflate: deflate_2, - deflateEnd: deflateEnd_1, - deflateSetDictionary: deflateSetDictionary_1, - deflateInfo: deflateInfo - }; - - // Quick check if we can use fast array to bin string conversion - // - // - apply(Array) can fail on Android 2.2 - // - apply(Uint8Array) can fail on iOS 5.1 Safari - // - var STR_APPLY_OK = true; - var STR_APPLY_UIA_OK = true; - - try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } - try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } - - - // Table with utf8 lengths (calculated by first byte of sequence) - // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, - // because max possible codepoint is 0x10ffff - var _utf8len = new common.Buf8(256); - for (var q = 0; q < 256; q++) { - _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); - } - _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - - // convert string to array (typed, when possible) - var string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new common.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; - }; - - // Helper (used in 2 places) - function buf2binstring(buf, len) { - // On Chrome, the arguments in a function call that are allowed is `65534`. - // If the length of the buffer is smaller than that, we can use this optimization, - // otherwise we will take a slower path. - if (len < 65534) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, common.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; - } - - - // Convert byte array to binary string - var buf2binstring_1 = function (buf) { - return buf2binstring(buf, buf.length); - }; - - - // Convert binary string (typed, when possible) - var binstring2buf = function (str) { - var buf = new common.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; - }; - - - // convert array to string - var buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); - }; - - - // Calculate max possible position in utf8 buffer, - // that will not break sequence. If that's not possible - // - (very small limits) return max size as is. - // - // buf[] - utf8 bytes array - // max - length limit (mandatory); - var utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means buffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; - }; - - var strings = { - string2buf: string2buf, - buf2binstring: buf2binstring_1, - binstring2buf: binstring2buf, - buf2string: buf2string, - utf8border: utf8border - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; - } - - var zstream = ZStream; - - var toString = Object.prototype.toString; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - var Z_NO_FLUSH$1 = 0; - var Z_FINISH$1 = 4; - - var Z_OK$1 = 0; - var Z_STREAM_END$1 = 1; - var Z_SYNC_FLUSH = 2; - - var Z_DEFAULT_COMPRESSION$1 = -1; - - var Z_DEFAULT_STRATEGY$1 = 0; - - var Z_DEFLATED$1 = 8; - - /* ===========================================================================*/ - - - /** - * class Deflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[deflate]], - * [[deflateRaw]] and [[gzip]]. - **/ - - /* internal - * Deflate.chunks -> Array - * - * Chunks of output data, if [[Deflate#onData]] not overridden. - **/ - - /** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - - /** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - - /** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ - function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = common.assign({ - level: Z_DEFAULT_COMPRESSION$1, - method: Z_DEFLATED$1, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY$1, - to: '' - }, options || {}); - - var opt = this.options; - - if (opt.raw && (opt.windowBits > 0)) { - opt.windowBits = -opt.windowBits; - } - - else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new zstream(); - this.strm.avail_out = 0; - - var status = deflate_1.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - - if (status !== Z_OK$1) { - throw new Error(messages[status]); - } - - if (opt.header) { - deflate_1.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === 'string') { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = deflate_1.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK$1) { - throw new Error(messages[status]); - } - - this._dict_set = true; - } - } - - /** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { return false; } - - _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH$1 : Z_NO_FLUSH$1); - - // Convert data if needed - if (typeof data === 'string') { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new common.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = deflate_1.deflate(strm, _mode); /* no bad return value */ - - if (status !== Z_STREAM_END$1 && status !== Z_OK$1) { - this.onEnd(status); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH$1 || _mode === Z_SYNC_FLUSH))) { - if (this.options.to === 'string') { - this.onData(strings.buf2binstring(common.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(common.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END$1); - - // Finalize on the last chunk. - if (_mode === Z_FINISH$1) { - status = deflate_1.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK$1; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK$1); - strm.avail_out = 0; - return true; - } - - return true; - }; - - - /** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): output data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - - /** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK$1) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = common.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - - /** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ - function deflate$1(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { throw deflator.msg || messages[deflator.err]; } - - return deflator.result; - } - - - /** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate$1(input, options); - } - - - /** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ - function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate$1(input, options); - } - - - var Deflate_1 = Deflate; - var deflate_2$1 = deflate$1; - var deflateRaw_1 = deflateRaw; - var gzip_1 = gzip; - - var deflate_1$1 = { - Deflate: Deflate_1, - deflate: deflate_2$1, - deflateRaw: deflateRaw_1, - gzip: gzip_1 - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // See state defs from inflate.js - var BAD = 30; /* got a data error -- remain here until reset */ - var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - - /* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ - var inffast = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ - //#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ - //#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); - //#ifdef INFLATE_STRICT - dmax = state.dmax; - //#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); - //#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - //#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // if (len <= op - whave) { - // do { - // output[_out++] = 0; - // } while (--len); - // continue top; - // } - // len -= op - whave; - // do { - // output[_out++] = 0; - // } while (--op > whave); - // if (op === 0) { - // from = _out - dist; - // do { - // output[_out++] = output[from++]; - // } while (--len); - // continue top; - // } - //#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - var MAXBITS = 15; - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var CODES = 0; - var LENS = 1; - var DISTS = 2; - - var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 - ]; - - var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 - ]; - - var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 - ]; - - var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 - ]; - - var inftrees = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) - { - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; - // var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new common.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new common.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* process all codes and make table entries */ - for (;;) { - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - - - - - - - var CODES$1 = 0; - var LENS$1 = 1; - var DISTS$1 = 2; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - - /* Allowed flush values; see deflate() and inflate() below for details */ - //var Z_NO_FLUSH = 0; - //var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - //var Z_FULL_FLUSH = 3; - var Z_FINISH$2 = 4; - var Z_BLOCK$1 = 5; - var Z_TREES = 6; - - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK$2 = 0; - var Z_STREAM_END$2 = 1; - var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR$1 = -2; - var Z_DATA_ERROR$1 = -3; - var Z_MEM_ERROR = -4; - var Z_BUF_ERROR$1 = -5; - //var Z_VERSION_ERROR = -6; - - /* The deflate compression method */ - var Z_DEFLATED$2 = 8; - - - /* STATES ====================================================================*/ - /* ===========================================================================*/ - - - var HEAD = 1; /* i: waiting for magic header */ - var FLAGS = 2; /* i: waiting for method and flags (gzip) */ - var TIME = 3; /* i: waiting for modification time (gzip) */ - var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ - var EXLEN = 5; /* i: waiting for extra length (gzip) */ - var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ - var NAME = 7; /* i: waiting for end of file name (gzip) */ - var COMMENT = 8; /* i: waiting for end of comment (gzip) */ - var HCRC = 9; /* i: waiting for header crc (gzip) */ - var DICTID = 10; /* i: waiting for dictionary check value */ - var DICT = 11; /* waiting for inflateSetDictionary() call */ - var TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */ - var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ - var STORED = 14; /* i: waiting for stored size (length and complement) */ - var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ - var COPY = 16; /* i/o: waiting for input or output to copy stored block */ - var TABLE = 17; /* i: waiting for dynamic block table lengths */ - var LENLENS = 18; /* i: waiting for code length code lengths */ - var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ - var LEN_ = 20; /* i: same as LEN below, but only first time in */ - var LEN = 21; /* i: waiting for length/lit/eob code */ - var LENEXT = 22; /* i: waiting for length extra bits */ - var DIST = 23; /* i: waiting for distance code */ - var DISTEXT = 24; /* i: waiting for distance extra bits */ - var MATCH = 25; /* o: waiting for output space to copy string */ - var LIT = 26; /* o: waiting for output space to write literal */ - var CHECK = 27; /* i: waiting for 32-bit check value */ - var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ - var DONE = 29; /* finished check, done -- remain here until reset */ - var BAD$1 = 30; /* got a data error -- remain here until reset */ - var MEM = 31; /* got an inflate() memory error -- remain here until reset */ - var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - - /* ===========================================================================*/ - - - - var ENOUGH_LENS$1 = 852; - var ENOUGH_DISTS$1 = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var MAX_WBITS$1 = 15; - /* 32K LZ77 window */ - var DEF_WBITS = MAX_WBITS$1; - - - function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); - } - - - function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new common.Buf16(320); /* temporary storage for code lengths */ - this.work = new common.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ - } - - function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new common.Buf32(ENOUGH_LENS$1); - state.distcode = state.distdyn = new common.Buf32(ENOUGH_DISTS$1); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK$2; - } - - function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - - } - - function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR$1; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); - } - - function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR$1; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK$2) { - strm.state = null/*Z_NULL*/; - } - return ret; - } - - function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); - } - - - /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ - var virgin = true; - - var lenfix, distfix; // We have no pointers in JS, so keep tables separate - - function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new common.Buf32(512); - distfix = new common.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inftrees(LENS$1, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inftrees(DISTS$1, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; - } - - - /* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ - function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new common.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - common.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - common.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - common.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; - } - - function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new common.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR$1; - } - - state = strm.state; - if (state.mode === TYPE$1) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK$2; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD$1; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED$2) { - strm.msg = 'unknown compression method'; - state.mode = BAD$1; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD$1; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE$1; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED$2) { - strm.msg = 'unknown compression method'; - state.mode = BAD$1; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD$1; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32_1(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32_1(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more convenient processing later - state.head.extra = new Array(state.head.extra_len); - } - common.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32_1(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE$1; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE$1; - /* falls through */ - case TYPE$1: - if (flush === Z_BLOCK$1 || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD$1; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD$1; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - common.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE$1; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - //#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD$1; - break; - } - //#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inftrees(CODES$1, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD$1; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD$1; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD$1; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD$1) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD$1; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inftrees(LENS$1, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD$1; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inftrees(DISTS$1, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD$1; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inffast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE$1) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE$1; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD$1; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD$1; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break; - } - //#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break; - } - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // Trace((stderr, "inflate.c too far\n")); - // copy -= state.whave; - // if (copy > state.length) { copy = state.length; } - // if (copy > left) { copy = left; } - // left -= copy; - // state.length -= copy; - // do { - // output[put++] = 0; - // } while (--copy); - // if (state.length === 0) { state.mode = LEN; } - // break; - //#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' instead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD$1; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END$2; - break inf_leave; - case BAD$1: - ret = Z_DATA_ERROR$1; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR$1; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD$1 && - (state.mode < CHECK || flush !== Z_FINISH$2))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ; - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE$1 ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH$2) && ret === Z_OK$2) { - ret = Z_BUF_ERROR$1; - } - return ret; - } - - function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR$1; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK$2; - } - - function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR$1; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK$2; - } - - function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR$1; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32_1(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR$1; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK$2; - } - - var inflateReset_1 = inflateReset; - var inflateReset2_1 = inflateReset2; - var inflateResetKeep_1 = inflateResetKeep; - var inflateInit_1 = inflateInit; - var inflateInit2_1 = inflateInit2; - var inflate_2 = inflate; - var inflateEnd_1 = inflateEnd; - var inflateGetHeader_1 = inflateGetHeader; - var inflateSetDictionary_1 = inflateSetDictionary; - var inflateInfo = 'pako inflate (from Nodeca project)'; - - /* Not implemented - exports.inflateCopy = inflateCopy; - exports.inflateGetDictionary = inflateGetDictionary; - exports.inflateMark = inflateMark; - exports.inflatePrime = inflatePrime; - exports.inflateSync = inflateSync; - exports.inflateSyncPoint = inflateSyncPoint; - exports.inflateUndermine = inflateUndermine; - */ - - var inflate_1 = { - inflateReset: inflateReset_1, - inflateReset2: inflateReset2_1, - inflateResetKeep: inflateResetKeep_1, - inflateInit: inflateInit_1, - inflateInit2: inflateInit2_1, - inflate: inflate_2, - inflateEnd: inflateEnd_1, - inflateGetHeader: inflateGetHeader_1, - inflateSetDictionary: inflateSetDictionary_1, - inflateInfo: inflateInfo - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var constants = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; - } - - var gzheader = GZheader; - - var toString$1 = Object.prototype.toString; - - /** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - - /* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overridden. - **/ - - /** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - - /** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - - /** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ - function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = common.assign({ - chunkSize: 16384, - windowBits: 0, - to: '' - }, options || {}); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new zstream(); - this.strm.avail_out = 0; - - var status = inflate_1.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== constants.Z_OK) { - throw new Error(messages[status]); - } - - this.header = new gzheader(); - - inflate_1.inflateGetHeader(this.strm, this.header); - - // Setup dictionary - if (opt.dictionary) { - // Convert data if needed - if (typeof opt.dictionary === 'string') { - opt.dictionary = strings.string2buf(opt.dictionary); - } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') { - opt.dictionary = new Uint8Array(opt.dictionary); - } - if (opt.raw) { //In raw mode we need to set the dictionary early - status = inflate_1.inflateSetDictionary(this.strm, opt.dictionary); - if (status !== constants.Z_OK) { - throw new Error(messages[status]); - } - } - } - } - - /** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { return false; } - _mode = (mode === ~~mode) ? mode : ((mode === true) ? constants.Z_FINISH : constants.Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString$1.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new common.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = inflate_1.inflate(strm, constants.Z_NO_FLUSH); /* no bad return value */ - - if (status === constants.Z_NEED_DICT && dictionary) { - status = inflate_1.inflateSetDictionary(this.strm, dictionary); - } - - if (status === constants.Z_BUF_ERROR && allowBufError === true) { - status = constants.Z_OK; - allowBufError = false; - } - - if (status !== constants.Z_STREAM_END && status !== constants.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if (strm.avail_out === 0 || status === constants.Z_STREAM_END || (strm.avail_in === 0 && (_mode === constants.Z_FINISH || _mode === constants.Z_SYNC_FLUSH))) { - - if (this.options.to === 'string') { - - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { common.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } - - this.onData(utf8str); - - } else { - this.onData(common.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== constants.Z_STREAM_END); - - if (status === constants.Z_STREAM_END) { - _mode = constants.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === constants.Z_FINISH) { - status = inflate_1.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === constants.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === constants.Z_SYNC_FLUSH) { - this.onEnd(constants.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; - }; - - - /** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): output data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - - /** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === constants.Z_OK) { - if (this.options.to === 'string') { - // Glue & convert here, until we teach pako to send - // utf8 aligned strings to onData - this.result = this.chunks.join(''); - } else { - this.result = common.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - - /** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ - function inflate$1(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { throw inflator.msg || messages[inflator.err]; } - - return inflator.result; - } - - - /** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate$1(input, options); - } - - - /** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - - var Inflate_1 = Inflate; - var inflate_2$1 = inflate$1; - var inflateRaw_1 = inflateRaw; - var ungzip = inflate$1; - - var inflate_1$1 = { - Inflate: Inflate_1, - inflate: inflate_2$1, - inflateRaw: inflateRaw_1, - ungzip: ungzip - }; - - var assign = common.assign; - - - - - - var pako = {}; - - assign(pako, deflate_1$1, inflate_1$1, constants); - - var pako_1 = pako; - - var byteLength_1 = byteLength; - var toByteArray_1 = toByteArray; - var fromByteArray_1 = fromByteArray; - - var lookup = []; - var revLookup = []; - var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; - - var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; - } - - // Support decoding URL-safe base64 strings, as Node.js does. - // See: https://en.wikipedia.org/wiki/Base64#URL_applications - revLookup['-'.charCodeAt(0)] = 62; - revLookup['_'.charCodeAt(0)] = 63; - - function getLens (b64) { - var len = b64.length; - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('='); - if (validLen === -1) validLen = len; - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4); - - return [validLen, placeHoldersLen] - } - - // base64 is 4/3 + up to two characters of the original data - function byteLength (b64) { - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen - } - - function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen - } - - function toByteArray (b64) { - var tmp; - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); - - var curByte = 0; - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen; - - var i; - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)]; - arr[curByte++] = (tmp >> 16) & 0xFF; - arr[curByte++] = (tmp >> 8) & 0xFF; - arr[curByte++] = tmp & 0xFF; - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4); - arr[curByte++] = tmp & 0xFF; - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2); - arr[curByte++] = (tmp >> 8) & 0xFF; - arr[curByte++] = tmp & 0xFF; - } - - return arr - } - - function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] - } - - function encodeChunk (uint8, start, end) { - var tmp; - var output = []; - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF); - output.push(tripletToBase64(tmp)); - } - return output.join('') - } - - function fromByteArray (uint8) { - var tmp; - var len = uint8.length; - var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes - var parts = []; - var maxChunkLength = 16383; // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1]; - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ); - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1]; - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ); - } - - return parts.join('') - } - - var base64Js = { - byteLength: byteLength_1, - toByteArray: toByteArray_1, - fromByteArray: fromByteArray_1 - }; - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - - var globalWindow = window; - - var reqt = ''; - function getSpv(lib, appid, lib_version) { - var policyversion = ''; - var appversion = ''; - var spv = lib + '|' + appid + '|' + lib_version + '|' + policyversion + '|' + appversion; - return encodeURIComponent(encode(spv)); - } - function encryptKey(lib, appid, libVersion) { - reqt = +new Date() + ''; - var orgkey = lib + appid + libVersion + reqt; - //MD5+base64+切割为数组 - var base64Str = encode(MD5(orgkey, 32).toUpperCase()).split(''); - var F = libVersion.split('.'); - var F1 = F[F.length - 1]; - var F2 = F[F.length - 2]; - if (!(Number(F2) % 2 == 0)) { - //倒叙 - base64Str = base64Str.reverse(); - } - var key = ''; - for (var i = 0; i < base64Str.length; i++) { - //偶数位 - if (i % 2 === 0 && !(Number(F1) % 2 === 0)) { - key += base64Str[i]; - } else if (!(i % 2 === 0) && Number(F1) % 2 === 0) { - key += base64Str[i]; - } - } - if (key.length < 16) { - key += key.split('').reverse().join(''); - } - return key.slice(0, 16); - } - function getEncryptData(data, lib, appid, libVersion, encryptType) { - var key = encryptKey(lib, appid, libVersion); - key = encUtf8.parse(key); - var encryptData = ''; - if (encryptType === 1) { - encryptData = aes.encrypt(data, key, { - mode: modeEcb - }); - } - if (encryptType === 2) { - var iv = encUtf8.parse('Analysys_315$CBC'); - encryptData = aes.encrypt(data, key, { - iv: iv - }); - } - encryptData = encryptData.ciphertext.toString().toUpperCase(); - var pakoZip = pako_1.gzip(encryptData); - return base64Js.fromByteArray(pakoZip); - } - function uploadData(option) { - var dataArray = option.data; - var lib = dataArray[0].xcontext.$lib; - var appid = dataArray[0].appid; - var libVersion = dataArray[0].xcontext.$lib_version; - option.data = getEncryptData(JSON.stringify(dataArray), lib, appid, libVersion, option.encryptType); - option.url += '&spv=' + getSpv(lib, appid, libVersion) + '&reqt=' + reqt + '&reqv=' + option.encryptType; - return option; - } - globalWindow.AnalysysModule ? globalWindow.AnalysysModule.uploadData = uploadData : globalWindow.AnalysysModule = { uploadData: uploadData }; - - exports.uploadData = uploadData; - - return exports; - -}({})); diff --git a/demo/jquery/sdk/AnalysysAgent_ExposurePoint.amd.min.js b/demo/jquery/sdk/AnalysysAgent_ExposurePoint.amd.min.js deleted file mode 100644 index 25aa5e2..0000000 --- a/demo/jquery/sdk/AnalysysAgent_ExposurePoint.amd.min.js +++ /dev/null @@ -1 +0,0 @@ -define(function(){"use strict";function a(e){try{return e.defaultView&&e.defaultView.frameElement||null}catch(t){return null}}function u(e){this.time=e.time,this.target=e.target,this.rootBounds=c(e.rootBounds),this.boundingClientRect=c(e.boundingClientRect),this.intersectionRect=c(e.intersectionRect||o()),this.isIntersecting=!!e.intersectionRect;var t=this.boundingClientRect,n=t.width*t.height,r=this.intersectionRect,i=r.width*r.height;this.intersectionRatio=n?Number((i/n).toFixed(4)):this.isIntersecting?1:0}function e(e,t){var n,r,i,o=t||{};if("function"!=typeof e)throw new Error("callback must be a function");if(o.root&&1!=o.root.nodeType)throw new Error("root must be an Element");this._checkForIntersections=(n=this._checkForIntersections.bind(this),r=this.THROTTLE_TIMEOUT,i=null,function(){i=i||setTimeout(function(){n(),i=null},r)}),this._callback=e,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(o.rootMargin),this.thresholds=this._initThresholds(o.threshold),this.root=o.root||null,this.rootMargin=this._rootMarginValues.map(function(e){return e.value+e.unit}).join(" "),this._monitoringDocuments=[],this._monitoringUnsubscribes=[]}function s(e,t,n,r){"function"==typeof e.addEventListener?e.addEventListener(t,n,r||!1):"function"==typeof e.attachEvent&&e.attachEvent("on"+t,n)}function l(e,t,n,r){"function"==typeof e.removeEventListener?e.removeEventListener(t,n,r||!1):"function"==typeof e.detatchEvent&&e.detatchEvent("on"+t,n)}function b(e){var t;try{t=e.getBoundingClientRect()}catch(n){}return t?(t.width&&t.height||(t={top:t.top,right:t.right,bottom:t.bottom,left:t.left,width:t.right-t.left,height:t.bottom-t.top}),t):o()}function o(){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}function c(e){return!e||"x"in e?e:{top:e.top,y:e.top,bottom:e.bottom,left:e.left,x:e.left,right:e.right,width:e.width,height:e.height}}function _(e,t){var n=t.top-e.top,r=t.left-e.left;return{top:n,left:r,height:t.height,width:t.width,bottom:n+t.height,right:r+t.width}}function t(e,t){for(var n=t;n;){if(n==e)return!0;n=T(n)}return!1}function T(e){var t=e.parentNode;return 9==e.nodeType&&e!=A?a(e):t&&11==t.nodeType&&t.host?t.host:t&&t.assignedSlot?t.assignedSlot.parentNode:t}var A,n,S,O;"object"==typeof window&&("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype?"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return 0=l&&(m.push(b({type:"childList",target:t,addedNodes:[o],removedNodes:[o],nextSibling:o.nextSibling,previousSibling:o.previousSibling})),i--),f.b&&a.b&&_(m,o,a.b,f.f),f.a&&3===o.nodeType&&o.nodeValue!==a.a&&m.push(b({type:"characterData",target:o,oldValue:a.a})),f.g&&v(o,a)}function v(e,t){for(var n,r,i,o,a,s=e.childNodes,l=t.c,u=s.length,c=l?l.length:0,d=0,p=0,h=0;p>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);u>2,o=(3&t)<<4|(n=e.charCodeAt(u++))>>4,a=(15&n)<<2|(r=e.charCodeAt(u++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),l=l+d.charAt(i)+d.charAt(o)+d.charAt(a)+d.charAt(s);return l},r.prototype.decode=function(e){var t,n,r,i,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&i)<<4|(o=d.indexOf(e.charAt(l++)))>>2,r=(3&o)<<6|(a=d.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function u(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=u(e,u(u((s=t)&n|~s&r,i),a)),u(l(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=u(e,u(u(t&(s=r)|n&~s,i),a)),u(l(e,o),t)}function i(e,t,n,r,i,o,a){return e=u(e,u(u(t^n^r,i),a)),u(l(e,o),t)}function o(e,t,n,r,i,o,a){return e=u(e,u(u(n^(t|~r),i),a)),u(l(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,d,p,h=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),m=1732584193,f=4023233417,g=2562383102,y=271733878,v=0;v",JSON.stringify(t,null,2)),n(t)})}function G(e){return e.split("").reverse().join("")}function q(){!0===F.isHybrid&&(X=st.visitorEventList);var e=ut(B.ele),t=Y(e.path);B.elePath=t.clickPath,B.path=e.path,B.newPath=e.newPath;for(var n,r,i,o,a=[],s=0;sf.base.webstayDuration)return f.base.webstayDuration}else if(18e6o.length){if(!0===n)return!1;var l=i.length-o.length;i.splice(0,l);for(var u=0;up.length){for(var h=d.length-p.length,d=d.splice(h),m=u;0")}var vt=new IntersectionObserver(function(e){clearTimeout(bt);for(var t=0;t=l&&(m.push(b({type:"childList",target:t,addedNodes:[o],removedNodes:[o],nextSibling:o.nextSibling,previousSibling:o.previousSibling})),i--),f.b&&a.b&&_(m,o,a.b,f.f),f.a&&3===o.nodeType&&o.nodeValue!==a.a&&m.push(b({type:"characterData",target:o,oldValue:a.a})),f.g&&v(o,a)}function v(e,t){for(var n,r,i,o,a,s=e.childNodes,l=t.c,u=s.length,c=l?l.length:0,d=0,p=0,h=0;p>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);u>2,o=(3&t)<<4|(n=e.charCodeAt(u++))>>4,a=(15&n)<<2|(r=e.charCodeAt(u++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),l=l+d.charAt(i)+d.charAt(o)+d.charAt(a)+d.charAt(s);return l},r.prototype.decode=function(e){var t,n,r,i,o,a,s="",l=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");l>4,n=(15&i)<<4|(o=d.indexOf(e.charAt(l++)))>>2,r=(3&o)<<6|(a=d.indexOf(e.charAt(l++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function u(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=u(e,u(u((s=t)&n|~s&r,i),a)),u(l(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=u(e,u(u(t&(s=r)|n&~s,i),a)),u(l(e,o),t)}function i(e,t,n,r,i,o,a){return e=u(e,u(u(t^n^r,i),a)),u(l(e,o),t)}function o(e,t,n,r,i,o,a){return e=u(e,u(u(n^(t|~r),i),a)),u(l(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,d,p,h=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),m=1732584193,f=4023233417,g=2562383102,y=271733878,v=0;v",JSON.stringify(t,null,2)),n(t)})}function G(e){return e.split("").reverse().join("")}function q(){!0===F.isHybrid&&(X=et.visitorEventList);var e=nt(B.ele),t=Y(e.path);B.elePath=t.clickPath,B.path=e.path,B.newPath=e.newPath;for(var n,r,i,o,a=[],s=0;sf.base.webstayDuration)return f.base.webstayDuration}else if(18e6o.length){if(!0===n)return!1;var l=i.length-o.length;i.splice(0,l);for(var u=0;up.length){for(var h=d.length-p.length,d=d.splice(h),m=u;0")}var dt=new IntersectionObserver(function(e){clearTimeout(ht);for(var t=0;t= min; - } - /** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ - function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; - } - /** - * 自定义属性值校验 - * @param value - */ - function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; - } - /** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ - function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; - } - /** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ - function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; - } - function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; - } - /** - * 判断当前元素是否为可触控元素 - */ - function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // public method for decoding - var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - // private method for UTF-8 decoding - var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - }; - - var document$1 = window.document; - /** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ - function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } - } - - var storageKey = 'FZ_STROAGE'; - var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(decode(data)) : null; - } catch (e) {} - }; - var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} - }; - var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; - }; - var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); - }; - - /** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ - function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; - } - - // 单页面模式下监听路径变化 - function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); - } - var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); - }; - - var dataBase = 'ANALYSYS_AGENT'; - var tableName = 'FZ_STORAGE'; - var IndexedDb = /** @class */function () { - function IndexedDb() { - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - console.log('indexedDB数据库打开成功'); - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - }; - request.onerror = function (event) { - console.log('indexedDB数据库打开报错'); - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - console.log('indexedDB数据库新建成功'); - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - console.log('事务失败'); - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.db.transaction(tableName, 'readwrite').objectStore(tableName).add(data); - request.onsuccess = function (event) { - console.log('数据写入成功'); - successFn && successFn(event); - }; - request.onerror = function (event) { - console.log('数据写入失败'); - errorFn && errorFn(event); - }; - }; - // 编辑数据 - IndexedDb.prototype.edit = function () {}; - // 更新数据 - IndexedDb.prototype.put = function () {}; - return IndexedDb; - }(); - - var domainUrl = getDomainFromUrl(true); - var cookieKey = domainUrl ? 'FZ_STROAGE.' + domainUrl : ''; - var storeDb = new IndexedDb(); - function getStorageV2(fn) { - function getHistoryStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; - } - if (globalWindow.indexedDB) { - storeDb.onConnectSuccess = function () { - storeDb.get(function (res) { - var data = res ? res.content : null; - fn(data); - }); - }; - } else { - fn(getHistoryStorage()); - } - } - function setStorageV2() { - var data = getCore(); - storeDb.add({ - id: 1, - content: data - }); - } - // 获取缓存数据 - function getStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; - } - // 设置缓存数据 - function setStorage() { - var data = getCore(); - if (config.crossSubdomain) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - if (cookieKey) { - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - } - setLocalStorage('FZ_STROAGE', data); - } - // 清空历史cookie,根据场景只保留一个 - function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } - } - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - - function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; - } - function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; - } - - // 启动时间 - var startUpTime; - // 初始化时获取启动时间 - function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; - } - // 设置启动时间 - function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); - } - // 清空时间 - function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); - } - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - - /** - * 返回核心数据默认值 - * @returns object - */ - function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; - } - var core; - /** - * 初始化 - */ - function coreInit() { - initStartUpTime(); - var storageCore = getStorage(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - if (!storageCore) { - setDefCore(); - } else { - var debug = storageCore.ARKDEBUG; - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - if (config.appkey !== storageCore.ARKAPPID || debug === 1 && debug !== config.debugMode || storageCore.ARKUPLOADURL !== config.uploadURL) { - setDefCore(); - } else { - core = storageCore; - } - } - getStorageV2(function (data) { - if (data) { - core = data; - } else { - core = coreDefault(); - setStorageV2(); - } - }); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); - } - function getCore() { - return core; - } - // 重置缓存数据 - function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); - } - /** - * 设置参数 - */ - function setCoreParam(key, value) { - core[key] = value; - setStorage(); - } - /** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ - function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; - } - /** - * 系统设置匿名id - * @returns - */ - function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); - } - /** - * 获取sessionId - */ - function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var nowDay = new Date(nowDate + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - var sessionDay = !core.SEESIONDATE ? 0 : new Date(core.SEESIONDATE + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - if (!core.SEESIONID || !core.SEESIONDATE || nowDate - core.SEESIONDATE > 30 * 60 * 1000 || sessionDay !== nowDay) { - setSessionId(); - } - return core.SEESIONID; - } - /** - * 设置sessionid - */ - function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); - } - /** - * 用户手动设置匿名id - * @param xwho - */ - function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ - function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; - } - // 通用属性 - /** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ - function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return core.ARKSUPER; - } - /** - * 设置通用属性 - * @param property 属性 - */ - function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); - } - /** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ - function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); - } - // 添加上报数据 - function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } - } - // 删除上报数据 - function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); - } - // 获取上报数据 - function getPostData() { - return __spreadArrays(core.POSTDATA); - } - - // 类型转换 - /** - * 值转换成字符串 - */ - function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; - } - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - - /** - * 服务器时间,开始时间校准时用到 - */ - // 服务器时间 - var serverTime = 0; - // 是否已获取过服务器时间 - var isGetServerTime = false; - // 服务器时间与本地时间的差值 - var timeDiff = 0; - /** - * 返回校准后的当前时间 - * - */ - function getNow() { - var now = +new Date(); - return now + timeDiff; - } - // 获取服务器时间 - function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function (err) { - isGetServerTime = true; - fn && fn(serverTime); - }); - } - - var isReady = false; - // 缓存sdk异步加载完成前的函数调用 - var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; - var callbackArr = []; - // 执行缓存函数 - function implementAallbackArr() { - if (isGetServerTime && isInitConfig) { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } - isReady = true; - } - } - function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isGetServerTime || !isInitConfig || !isReady) { - var obj = { - fn: callback, - arg: args - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - callback.apply(callback, args); - } - }; - } - - function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } - } - /** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ - function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } - } - /** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ - function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); - } - /** - * 获取单个通用属性 - */ - function getSuperProperty$1(superPropertyName, fn) { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; - } - /** - * 获取所有通用属性 - */ - function getSuperProperties(fn) { - var value = getSuperProperty(); - fn && fn(value); - return value; - } - /** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ - function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); - } - /** - * 删除所有属性 - */ - function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); - } - - function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; - } - function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - validurl = validurl.replace(config.uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; - } - - var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - } - }; - // 执行事件上报回调函数 - function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } - } - - function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); - } - - var isHybrid = false; - var hybrid = { - userId: '' - }; - console.log('是否Hybrid模式', isHybrid); - /** - * 初始化webViewHybrid模式 - */ - function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - console.log('是否Hybrid模式', isHybrid); - } - if (AnalysysAgentHybrid.getAppStartInfo && isFunction(AnalysysAgentHybrid.getAppStartInfo)) { - var webViewHybridData = AnalysysAgentHybrid.getAppStartInfo(); - console.log('Hybrid模式注入参数', webViewHybridData); - if (isString(webViewHybridData)) { - webViewHybridData = JSON.parse(webViewHybridData); - } - hybrid.userId = webViewHybridData.userId; - } - } - } - - var eventMap = { - '$pageview': 'pageView', - '$startup': 'startUp', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' - }; - function hybridSendDate (functionName, functionParams) { - var _a, _b, _c, _d; - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: ['', functionParams] - }; - // ios - (_c = (_b = (_a = globalWindow.webkit) === null || _a === void 0 ? void 0 : _a.messageHandlers) === null || _b === void 0 ? void 0 : _b.AnalysysAgent) === null || _c === void 0 ? void 0 : _c.postMessage(obj); - // 安卓 - (_d = globalWindow.AnalysysAgentHybrid) === null || _d === void 0 ? void 0 : _d.analysysHybridCallNative(JSON.stringify(obj)); - } - - // 一次最多上报20条 - var MAXLINENUM = 20; - // 上报失败后重试次数 - var RETRNUM = 3; - // 正在上报数据 - var doingList = []; - // 当前重试次数 - var retryCount = 0; - // 发送请求 - function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysAgent.encrypt && isFunction(globalWindow.AnalysysAgent.encrypt.uploadData)) { - // option = globalWindow.AnalysysAgent.encrypt.uploadData(option); - // } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); - } - /** - * img方式上报 - * @param data - */ - function imgGetData(data) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); - } - /** - * 上报数据 - * @param data object - */ - function sendData(data, fn) { - // Hybrid模式下由原生端上报 - if (isHybrid) { - hybridSendDate(data.xwhat, data.xcontext); - return; - } - if (!config.appkey) { - errorLog({ - code: 60006 - }); - return; - } - if (!config.uploadURL) { - errorLog({ - code: 60007 - }); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } - } - - /** - * 路径相关参数信息存储 - */ - var pathParams = { - scene: null, - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '', - share_id: '', - share_level: '', - share_path: '' - }; - - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; - } - function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; - } - // 获取元素内容 - function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); - } - // 获取元素路径 - function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); - } - function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - - /** - * 全埋点相关属性存储 - */ - var userClickAttrs = {}; - var webClickAttrs = {}; - function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); - } - function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; - } - - // 获取设备类型 - function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - } - // 动态加载js - function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } - } - - /** - * 获取属性值 - */ - var getAttr = { - xwho: function () { - return hybrid.userId || getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return ''; - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - $url_path: function () { - return ''; - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return ''; - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } - }; - - function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; - } - - function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), config.pageProperty, userObj); - sendData(res, fn); - } - - /** - * 页面属性 - */ - var pageProperty = {}; - /** - * 设置页面属性 - * @param properties - */ - function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); - } - /** - * 获取页面属性 - * @returns - */ - function getPageProperty() { - return pageProperty; - } - /** - * 删除页面属性 - */ - function delPageProperty() { - pageProperty = {}; - } - - function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); - } - /** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ - function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); - } - /** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ - function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); - } - /** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ - function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); - } - /** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ - function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); - } - /** - * 删除当前用户单个属性值 - * @param propertyName - */ - function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); - } - /** - * 删除当前用户所有属性值 - */ - function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); - } - - function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } - } - - function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } - } - - function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); - } - - function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); - } - - function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); - } - - function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); - } - - /** - * 获取预置属性 - * @returns object - */ - function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; - } - - function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData(eventName); - var trackAttrs = {}; - if (eventAttrs && !isFunction(eventAttrs)) { - trackAttrs = attrCheck(eventAttrs, eventName); - } - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - sendData(res, callback); - } - - /** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ - function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ - function getDistinctId(fn) { - var id = getAnonymousID(); - fn && fn(id); - return id; - } - - /** - * 注册页面自动采集自定义属性 - */ - function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } - } - - function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - if (!eventAttribute.pageClose.hideStartTime) { - return eventAttribute.pageClose.hideTime; - } else { - return eventAttribute.pageClose.hideTime + (res.xwhen - eventAttribute.pageClose.hideStartTime); - } - } - var attrs = { - pagestaytime: res.xwhen - eventAttribute.pageview.xwhen - getHideTime() - }; - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - sendData(res); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; - } - // 触发pageclose - function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; - } - // 设置页面隐藏时间 - function setPageHideTime(hideFn, showFn) { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } - } - - // 获取dom元素标签名称 - function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; - } - // 返回dom元素父节点 - function getParentNode(el) { - return el.parentNode; - } - // 获取所有兄弟节点(包括自己) - function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; - } - // 获取元素在同级中的下标 - function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; - } - // 遍历节点树 - function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } - } - - var visualMap = null; - var href = globalWindow.location.href; - // 上报可视化数据 - function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } - } - // 获取可视化埋点数据 - function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } - } - // 动态加载可视化交互文件 - function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } - } - - var scrollTime = null; - // 是否采集页面属性 - function triggerPageView() { - triggerPageClose(); - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // 获取可视化数据 - getVisualList(); - } - /** - * sdk自动触发器 - */ - function autoTrigger() { - startUp(); - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - var eventName = deviceType === 'desktop' ? 'click' : 'touchstart'; - document.addEventListener(eventName, webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 动态加载可视化交互文件 - loadVisual(); - // 记录页面隐藏时间 - setPageHideTime(); - } - - function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } - } - var configRule = { - appkey: { - verify: [lengthCheck] - }, - uploadURL: { - verify: [lengthCheck] - }, - debugMode: { - verify: [isNumber] - }, - name: { - verify: [isString] - }, - auto: { - verify: [isBoolean] - }, - autoProfile: { - verify: [isBoolean] - }, - encryptType: { - verify: [isNumber] - }, - hash: { - verify: [isBoolean] - }, - allowTimeCheck: { - verify: [isBoolean] - }, - maxDiffTimeInterval: { - verify: [isNumber, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - autoTrack: { - verify: [isBoolean] - }, - autoCompleteURL: { - verify: [isBoolean] - }, - autoPageViewDuration: { - verify: [isBoolean] - }, - sendDataTimeout: { - verify: [isNumber] - }, - sendType: { - verify: [isString] - }, - autoClickBlackList: { - verify: [nameListCheck] - }, - autoHeatmap: { - verify: [isBoolean] - }, - SDKFileDirectory: { - verify: [isString] - }, - visitorConfigURL: { - verify: [isString] - }, - crossSubdomain: { - verify: [isBoolean] - }, - pageProperty: { - verify: [isObject] - }, - pageViewBlackList: { - verify: [nameListCheck] - }, - userClickProperty: { - verify: [isObject] - } - }; - var config = optionsDefault(); - // 是否初始化参数配置 - var isInitConfig = false; - function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.verify.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.verify.length; i++) { - var fn_1 = rule.verify[i]; - if (!fn_1(value)) { - isOk = false; - break; - } - } - if (!isOk) { - errorLog({ - key: o, - code: 60002, - value: value - }, true); - } else { - if (o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - config[o] = value; - } - } - }); - isInitConfig = true; - coreInit(); - successLog({ - code: 20007 - }); - // 自动触发生命周期相关钩子 - autoTrigger(); - getServerTime(function () { - implementAallbackArr(); - }); - implementAallbackArr(); - fn && fn(config); - } - - /** - * 小程序标准版sdk - */ - webViewHybridInit(); - var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.config = optionsDefault(); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = getSuperProperties; - this.unRegisterSuperProperty = unRegisterSuperProperty; - this.clearSuperProperties = clearSuperProperties; - this.profileSetOnce = profileSetOnce; - this.profileSet = profileSet; - this.profileAppend = profileAppend; - this.profileIncrement = profileIncrement; - this.profileDelete = profileDelete; - this.profileUnset = profileUnset; - this.reset = reset; - this.track = ready(track); - this.alias = ready(alias); - this.getPresetProperties = getPresetProperties; - this.identify = identify; - this.getDistinctId = getDistinctId; - this.pageProperty = pageProperty$1; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - setConfig(config, function (o) { - _this.config = o; - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; - }(); - alert('d'); - var ArkSdk = new ArkJsSdk(); - globalWindow.AnalysysAgent = ArkSdk; - - return ArkSdk; - -}); diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK.es6.min.js b/demo/jquery/sdk/AnalysysAgent_JS_SDK.es6.min.js deleted file mode 100644 index 17b255e..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK.es6.min.js +++ /dev/null @@ -1,3103 +0,0 @@ -var $lib = 'JS'; -var $lib_version = '5.0.0'; -var $ans = 'JS'; -var globalWindow = window; -// sdk配置参数默认值 -function optionsDefault() { - return { - appkey: '', - uploadURL: '', - debugMode: 0, - visitorConfigURL: '', - name: '', - auto: true, - SDKFileDirectory: '', - autoTrack: false, - autoClickBlackList: '', - userClickProperty: {}, - trackList: [], - autoHeatmap: false, - autoWebstay: true, - webstayDuration: 18000000, - autoProfile: true, - hash: true, - encryptType: 0, - allowTimeCheck: false, - maxDiffTimeInterval: 30, - autoPageViewDuration: false, - sendDataTimeout: 10000, - getDataTimeout: 10000, - sendType: 'img', - crossSubdomain: false - }; -} - -var typeMap = {}; -var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; -typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); -}); -function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; -} -function isNumber(value) { - return type(value) === 'number'; -} -function isString(value) { - return type(value) === 'string'; -} -function isArray(value) { - return Array.isArray(value); -} -function isBoolean(value) { - return type(value) === 'boolean'; -} -function isObject(value) { - return type(value) === 'object'; -} -function isFunction(value) { - return type(value) === 'function'; -} - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -} - -// 只读属性,无法被更改 -var readOnlyAttrs = ['$lib', '$lib_version', '$platform', '$first_visit_time', '$debug', '$is_login']; -// 通用属性,大部分事件都会上报 -var commonAttrs = ['$screen_width', '$screen_height', '$language', '$time_zone', '$session_id', '$is_time_calibrated', '$web_crawler', '$user_agent', '$title', '$url', '$is_first_day']; -// 公共预制属性,任何事件上报都会带上这些属性 -var publicAttrs = __spreadArrays(['$lib', '$lib_version', '$platform', '$is_login', '$debug'], commonAttrs); -// element相关属性 -var elementAttrs = ['$element_type', '$element_path', '$element_content', '$element_id', '$element_name', '$element_target_url', '$element_class_name', '$device_type', '$url_path']; -// utm相关属性 -var utmAttrs = ['$utm_campaign_id', '$utm_campaign', '$utm_medium', '$utm_source', '$utm_content', '$utm_term']; -// 预制事件列表与事件属性 -var events = { - $startup: __spreadArrays(utmAttrs, ['$is_first_time' //首次访问,只在startUp - ]), - $end: ['$duration' //使用时长 - ], - $pageview: __spreadArrays(utmAttrs, ['$referrer', '$referrer_domain', '$startup_time' // 此行下面5个只在 pageView 中有 - ]), - page_close: ['$referrer', 'pagestaytime'], - $alias: ['$original_id'], - $getPresetProperties: ['$first_visit_time'], - $user_click: elementAttrs, - $web_click: __spreadArrays(elementAttrs, ['$page_width', '$page_height', '$click_x', '$click_y', '$element_x', '$element_y', '$element_clickable']), - $webstay: ['$referrer', '$referrer_domain', '$viewport_width', '$viewport_position', '$viewport_height', '$event_duration', '$device_type'], - $profile_set_once: ['$first_visit_time', '$first_visit_language'] -}; - -var errorMessage = { - 'common': '', - '60001': '{FN}:Property key invalid, support type: String \n' + 'current key:{KEY}\n' + 'current keyType:{KEYTYPE}', - '60002': '{FN}:Property value invalid of key[{KEY}], support type: Number \n' + 'current value: {VALUE}\n' + 'current type: {VALUETYPE}', - '60003': '{FN}:Property value invalid of key[{KEY}], support type: Boolean \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '60005': '{FN}:The length of the property[{KEY}] value (string[{VALUE}]) needs to be 1-255 !', - '60006': 'Please set appkey first.', - '60007': 'Please set uploadURL first.', - '60008': 'Send message failed.', - '60009': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-125 !', - '600010': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-99 !', - '600012': '{FN}:Property key invalid, nonsupport value: ' + readOnlyAttrs.join('/') + ' \n' + 'current KEY:{KEY}', - '600016': '{FN}: Property value invalid, support type: Object \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '600020': 'DebugMode only can be 0,1,2', - '600022': '{FN}: 属性[{KEY}]的值[{VALUE}]无效,支持类型:String/Number/Boolean/string[],若为字符串,长度范围1-255字符', - '600023': '{FN}: 属性key的名称[{KEY}]无效,属性key是以字母开头的字符串,由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;', - '600025': '{FN}: 事件名称[{VALUE}]无效,事件ID必须字母或者$开头,可包含数字字母与下划线,1-99个字符;' -}; -var successMessage = { - 'common': '', - '20001': 'Send message success', - '20002': '{FN}: set success ({VALUE})', - '20003': '{FN}:({VALUE}) delete success', - '20004': '{FN}:clear success', - '20005': '{FN}:reset success', - '20006': 'set appkey success. current appkey : {VALUE}', - '20007': 'Init Analysysdata ' + $lib + ' sdk success, version : ' + $lib_version + '', - '20008': 'set uploadURL success. current uploadURL : {VALUE}', - '20009': '{FN}:[{KEY}] : get failed', - '20010': '{FN}:[{KEY}] : get success. ({VALUE})', - '20011': '{FN}:({VALUE}) delete failed', - '20012': 'Send Message to Server: {KEY} \n' + 'data:{VALUE}', - '20013': "收到服务器的时间: {VALUE} \n" + "本地时间: {KEY} \n" + "时间相差: {FN} \n" + "数据将会进行时间校准", - '20014': 'aliasID already bound' -}; -function successLog(opt) { - if (config.debugMode === 1 || config.debugMode === 2) { - var msgTemp = successMessage[opt.code] || successMessage.common; - var showMsg = msgTemp.replace(/{FN}/, opt.fn).replace(/{KEY}/g, opt.key || '').replace(/{VALUE}/g, JSON.stringify(opt.value)); - console.log(showMsg); - } -} -function errorLog(opt, isInit) { - var msgTemp = errorMessage[opt.code] || errorMessage.common; - var showMsg = msgTemp.replace(/{FN}/g, opt.fn || '').replace(/{KEY}/g, JSON.stringify(opt.key || '')).replace(/{VALUE}/g, JSON.stringify(opt.value)).replace(/{VALUETYPE}/g, type(opt.value)).replace(/{KEYTYPE}/g, type(opt.key)); - if (config.debugMode === 1 || config.debugMode === 2 || isInit) { - console.warn(showMsg); - } -} - -/** - * 长度校验 - * @param value - * @param max - * @param min - * @returns - */ -function lengthCheck(value, max, min) { - if (max === void 0) { - max = 255; - } - if (min === void 0) { - min = 1; - } - if (!isString(value)) { - return false; - } - var len = value.length; - return len < max && len >= min; -} -/** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ -function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; -} -/** - * 自定义属性值校验 - * @param value - */ -function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; -} -/** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ -function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; -} -/** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ -function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; -} -function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; -} -/** - * 判断当前元素是否为可触控元素 - */ -function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; -} - -//base64加密 解密 -/* //1.加密 -let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - -//2.解密 -let result2 = Base.decode(result); //--> '125中文' -*/ -var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -//public method for encoding -var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; -}; -// public method for decoding -var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; -}; -// private method for UTF-8 encoding -var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; -}; -// private method for UTF-8 decoding -var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; -}; - -var document$1 = window.document; -/** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ -function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } -} - -var storageKey = 'FZ_STROAGE'; -var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(decode(data)) : null; - } catch (e) {} -}; -var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} -}; -var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; -}; -var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); -}; - -/** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ -function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; -} - -// 单页面模式下监听路径变化 -function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); -} -var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); -}; - -var dataBase = 'ANALYSYS_AGENT'; -var tableName = 'FZ_STORAGE'; -var IndexedDb = /** @class */function () { - function IndexedDb() { - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - console.log('indexedDB数据库打开成功'); - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - }; - request.onerror = function (event) { - console.log('indexedDB数据库打开报错'); - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - console.log('indexedDB数据库新建成功'); - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - console.log('事务失败'); - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.db.transaction(tableName, 'readwrite').objectStore(tableName).add(data); - request.onsuccess = function (event) { - console.log('数据写入成功'); - successFn && successFn(event); - }; - request.onerror = function (event) { - console.log('数据写入失败'); - errorFn && errorFn(event); - }; - }; - // 编辑数据 - IndexedDb.prototype.edit = function () {}; - // 更新数据 - IndexedDb.prototype.put = function () {}; - return IndexedDb; -}(); - -var domainUrl = getDomainFromUrl(true); -var cookieKey = domainUrl ? 'FZ_STROAGE.' + domainUrl : ''; -var storeDb = new IndexedDb(); -function getStorageV2(fn) { - function getHistoryStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; - } - if (globalWindow.indexedDB) { - storeDb.onConnectSuccess = function () { - storeDb.get(function (res) { - var data = res ? res.content : null; - fn(data); - }); - }; - } else { - fn(getHistoryStorage()); - } -} -function setStorageV2() { - var data = getCore(); - storeDb.add({ - id: 1, - content: data - }); -} -// 获取缓存数据 -function getStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; -} -// 设置缓存数据 -function setStorage() { - var data = getCore(); - if (config.crossSubdomain) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - if (cookieKey) { - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - } - setLocalStorage('FZ_STROAGE', data); -} -// 清空历史cookie,根据场景只保留一个 -function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } -} - -/* -md5.js -*/ -function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); -} - -function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; -} -function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; -} - -// 启动时间 -var startUpTime; -// 初始化时获取启动时间 -function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; -} -// 设置启动时间 -function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); -} -// 清空时间 -function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); -} - -/** - * 对象浅拷贝 - * - */ -function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; -} - -/** - * 返回核心数据默认值 - * @returns object - */ -function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; -} -var core; -/** - * 初始化 - */ -function coreInit() { - initStartUpTime(); - var storageCore = getStorage(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - if (!storageCore) { - setDefCore(); - } else { - var debug = storageCore.ARKDEBUG; - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - if (config.appkey !== storageCore.ARKAPPID || debug === 1 && debug !== config.debugMode || storageCore.ARKUPLOADURL !== config.uploadURL) { - setDefCore(); - } else { - core = storageCore; - } - } - getStorageV2(function (data) { - if (data) { - core = data; - } else { - core = coreDefault(); - setStorageV2(); - } - }); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); -} -function getCore() { - return core; -} -// 重置缓存数据 -function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); -} -/** - * 设置参数 - */ -function setCoreParam(key, value) { - core[key] = value; - setStorage(); -} -/** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ -function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; -} -/** - * 系统设置匿名id - * @returns - */ -function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); -} -/** - * 获取sessionId - */ -function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var nowDay = new Date(nowDate + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - var sessionDay = !core.SEESIONDATE ? 0 : new Date(core.SEESIONDATE + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - if (!core.SEESIONID || !core.SEESIONDATE || nowDate - core.SEESIONDATE > 30 * 60 * 1000 || sessionDay !== nowDay) { - setSessionId(); - } - return core.SEESIONID; -} -/** - * 设置sessionid - */ -function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); -} -/** - * 用户手动设置匿名id - * @param xwho - */ -function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); -} -/** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ -function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; -} -// 通用属性 -/** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ -function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return core.ARKSUPER; -} -/** - * 设置通用属性 - * @param property 属性 - */ -function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); -} -/** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ -function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); -} -// 添加上报数据 -function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } -} -// 删除上报数据 -function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); -} -// 获取上报数据 -function getPostData() { - return __spreadArrays(core.POSTDATA); -} - -// 类型转换 -/** - * 值转换成字符串 - */ -function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; -} -/** - * json转换为串行字符串 - * @param value - */ -function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); -} -/** - * headers字符串转json - */ -function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; -} - -function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); -} - -/** - * 服务器时间,开始时间校准时用到 - */ -// 服务器时间 -var serverTime = 0; -// 是否已获取过服务器时间 -var isGetServerTime = false; -// 服务器时间与本地时间的差值 -var timeDiff = 0; -/** - * 返回校准后的当前时间 - * - */ -function getNow() { - var now = +new Date(); - return now + timeDiff; -} -// 获取服务器时间 -function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function (err) { - isGetServerTime = true; - fn && fn(serverTime); - }); -} - -var isReady = false; -// 缓存sdk异步加载完成前的函数调用 -var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; -var callbackArr = []; -// 执行缓存函数 -function implementAallbackArr() { - if (isGetServerTime && isInitConfig) { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } - isReady = true; - } -} -function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isGetServerTime || !isInitConfig || !isReady) { - var obj = { - fn: callback, - arg: args - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - callback.apply(callback, args); - } - }; -} - -function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } -} -/** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ -function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } -} -/** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ -function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); -} -/** - * 获取单个通用属性 - */ -function getSuperProperty$1(superPropertyName, fn) { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; -} -/** - * 获取所有通用属性 - */ -function getSuperProperties(fn) { - var value = getSuperProperty(); - fn && fn(value); - return value; -} -/** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ -function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); -} -/** - * 删除所有属性 - */ -function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); -} - -function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; -} -function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - validurl = validurl.replace(config.uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; -} - -var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - } -}; -// 执行事件上报回调函数 -function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } -} - -function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); -} - -var isHybrid = false; -var hybrid = { - userId: '' -}; -console.log('是否Hybrid模式', isHybrid); -/** - * 初始化webViewHybrid模式 - */ -function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - console.log('是否Hybrid模式', isHybrid); - } - if (AnalysysAgentHybrid.getAppStartInfo && isFunction(AnalysysAgentHybrid.getAppStartInfo)) { - var webViewHybridData = AnalysysAgentHybrid.getAppStartInfo(); - console.log('Hybrid模式注入参数', webViewHybridData); - if (isString(webViewHybridData)) { - webViewHybridData = JSON.parse(webViewHybridData); - } - hybrid.userId = webViewHybridData.userId; - } - } -} - -var eventMap = { - '$pageview': 'pageView', - '$startup': 'startUp', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' -}; -function hybridSendDate (functionName, functionParams) { - var _a, _b, _c, _d; - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: ['', functionParams] - }; - // ios - (_c = (_b = (_a = globalWindow.webkit) === null || _a === void 0 ? void 0 : _a.messageHandlers) === null || _b === void 0 ? void 0 : _b.AnalysysAgent) === null || _c === void 0 ? void 0 : _c.postMessage(obj); - // 安卓 - (_d = globalWindow.AnalysysAgentHybrid) === null || _d === void 0 ? void 0 : _d.analysysHybridCallNative(JSON.stringify(obj)); -} - -// 一次最多上报20条 -var MAXLINENUM = 20; -// 上报失败后重试次数 -var RETRNUM = 3; -// 正在上报数据 -var doingList = []; -// 当前重试次数 -var retryCount = 0; -// 发送请求 -function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysAgent.encrypt && isFunction(globalWindow.AnalysysAgent.encrypt.uploadData)) { - // option = globalWindow.AnalysysAgent.encrypt.uploadData(option); - // } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); -} -/** - * img方式上报 - * @param data - */ -function imgGetData(data) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); -} -/** - * 上报数据 - * @param data object - */ -function sendData(data, fn) { - // Hybrid模式下由原生端上报 - if (isHybrid) { - hybridSendDate(data.xwhat, data.xcontext); - return; - } - if (!config.appkey) { - errorLog({ - code: 60006 - }); - return; - } - if (!config.uploadURL) { - errorLog({ - code: 60007 - }); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } -} - -/** - * 路径相关参数信息存储 - */ -var pathParams = { - scene: null, - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '', - share_id: '', - share_level: '', - share_path: '' -}; - -/** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ -function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } -} -/** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ -function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } -} -function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; -} -function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; -} -// 获取元素内容 -function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); -} -// 获取元素路径 -function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); -} -function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; -} -/** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ -function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; -} - -/** - * 全埋点相关属性存储 - */ -var userClickAttrs = {}; -var webClickAttrs = {}; -function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); -} -function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; -} - -// 获取设备类型 -function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; -} -// 动态加载js -function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } -} - -/** - * 获取属性值 - */ -var getAttr = { - xwho: function () { - return hybrid.userId || getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return ''; - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - $url_path: function () { - return ''; - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return ''; - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } -}; - -function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; -} - -function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), config.pageProperty, userObj); - sendData(res, fn); -} - -/** - * 页面属性 - */ -var pageProperty = {}; -/** - * 设置页面属性 - * @param properties - */ -function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); -} -/** - * 获取页面属性 - * @returns - */ -function getPageProperty() { - return pageProperty; -} -/** - * 删除页面属性 - */ -function delPageProperty() { - pageProperty = {}; -} - -function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); -} -/** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ -function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); -} -/** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ -function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); -} -/** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ -function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); -} -/** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ -function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); -} -/** - * 删除当前用户单个属性值 - * @param propertyName - */ -function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); -} -/** - * 删除当前用户所有属性值 - */ -function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); -} - -function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } -} - -function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } -} - -function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); -} - -function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); -} - -function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); -} - -function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); -} - -/** -* 获取预置属性 -* @returns object -*/ -function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; -} - -function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData(eventName); - var trackAttrs = {}; - if (eventAttrs && !isFunction(eventAttrs)) { - trackAttrs = attrCheck(eventAttrs, eventName); - } - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - sendData(res, callback); -} - -/** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ -function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } -} -/** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ -function getDistinctId(fn) { - var id = getAnonymousID(); - fn && fn(id); - return id; -} - -/** - * 注册页面自动采集自定义属性 - */ -function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } -} - -function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - if (!eventAttribute.pageClose.hideStartTime) { - return eventAttribute.pageClose.hideTime; - } else { - return eventAttribute.pageClose.hideTime + (res.xwhen - eventAttribute.pageClose.hideStartTime); - } - } - var attrs = { - pagestaytime: res.xwhen - eventAttribute.pageview.xwhen - getHideTime() - }; - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - sendData(res); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; -} -// 触发pageclose -function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; -} -// 设置页面隐藏时间 -function setPageHideTime(hideFn, showFn) { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } -} - -// 获取dom元素标签名称 -function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; -} -// 返回dom元素父节点 -function getParentNode(el) { - return el.parentNode; -} -// 获取所有兄弟节点(包括自己) -function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; -} -// 获取元素在同级中的下标 -function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; -} -// 遍历节点树 -function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } -} - -var visualMap = null; -var href = globalWindow.location.href; -// 上报可视化数据 -function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } -} -// 获取可视化埋点数据 -function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } -} -// 动态加载可视化交互文件 -function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } -} - -var scrollTime = null; -// 是否采集页面属性 -function triggerPageView() { - triggerPageClose(); - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // 获取可视化数据 - getVisualList(); -} -/** - * sdk自动触发器 - */ -function autoTrigger() { - startUp(); - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - var eventName = deviceType === 'desktop' ? 'click' : 'touchstart'; - document.addEventListener(eventName, webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 动态加载可视化交互文件 - loadVisual(); - // 记录页面隐藏时间 - setPageHideTime(); -} - -function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } -} -var configRule = { - appkey: { - verify: [lengthCheck] - }, - uploadURL: { - verify: [lengthCheck] - }, - debugMode: { - verify: [isNumber] - }, - name: { - verify: [isString] - }, - auto: { - verify: [isBoolean] - }, - autoProfile: { - verify: [isBoolean] - }, - encryptType: { - verify: [isNumber] - }, - hash: { - verify: [isBoolean] - }, - allowTimeCheck: { - verify: [isBoolean] - }, - maxDiffTimeInterval: { - verify: [isNumber, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - autoTrack: { - verify: [isBoolean] - }, - autoCompleteURL: { - verify: [isBoolean] - }, - autoPageViewDuration: { - verify: [isBoolean] - }, - sendDataTimeout: { - verify: [isNumber] - }, - sendType: { - verify: [isString] - }, - autoClickBlackList: { - verify: [nameListCheck] - }, - autoHeatmap: { - verify: [isBoolean] - }, - SDKFileDirectory: { - verify: [isString] - }, - visitorConfigURL: { - verify: [isString] - }, - crossSubdomain: { - verify: [isBoolean] - }, - pageProperty: { - verify: [isObject] - }, - pageViewBlackList: { - verify: [nameListCheck] - }, - userClickProperty: { - verify: [isObject] - } -}; -var config = optionsDefault(); -// 是否初始化参数配置 -var isInitConfig = false; -function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.verify.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.verify.length; i++) { - var fn_1 = rule.verify[i]; - if (!fn_1(value)) { - isOk = false; - break; - } - } - if (!isOk) { - errorLog({ - key: o, - code: 60002, - value: value - }, true); - } else { - if (o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - config[o] = value; - } - } - }); - isInitConfig = true; - coreInit(); - successLog({ - code: 20007 - }); - // 自动触发生命周期相关钩子 - autoTrigger(); - getServerTime(function () { - implementAallbackArr(); - }); - implementAallbackArr(); - fn && fn(config); -} - -/** - * 小程序标准版sdk - */ -webViewHybridInit(); -var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.config = optionsDefault(); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = getSuperProperties; - this.unRegisterSuperProperty = unRegisterSuperProperty; - this.clearSuperProperties = clearSuperProperties; - this.profileSetOnce = profileSetOnce; - this.profileSet = profileSet; - this.profileAppend = profileAppend; - this.profileIncrement = profileIncrement; - this.profileDelete = profileDelete; - this.profileUnset = profileUnset; - this.reset = reset; - this.track = ready(track); - this.alias = ready(alias); - this.getPresetProperties = getPresetProperties; - this.identify = identify; - this.getDistinctId = getDistinctId; - this.pageProperty = pageProperty$1; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - setConfig(config, function (o) { - _this.config = o; - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; -}(); -alert('d'); -var ArkSdk = new ArkJsSdk(); -globalWindow.AnalysysAgent = ArkSdk; - -export default ArkSdk; diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK.min.js b/demo/jquery/sdk/AnalysysAgent_JS_SDK.min.js deleted file mode 100644 index 1c599b0..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK.min.js +++ /dev/null @@ -1,3111 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof arkDefine === 'function' && arkDefine.amd ? arkDefine(factory) : - (global = global || self, global.AnalysysAgent = factory()); -}(this, (function () { 'use strict'; - - var $lib = 'JS'; - var $lib_version = '5.0.0'; - var $ans = 'JS'; - var globalWindow = window; - // sdk配置参数默认值 - function optionsDefault() { - return { - appkey: '', - uploadURL: '', - debugMode: 0, - visitorConfigURL: '', - name: '', - auto: true, - SDKFileDirectory: '', - autoTrack: false, - autoClickBlackList: '', - userClickProperty: {}, - trackList: [], - autoHeatmap: false, - autoWebstay: true, - webstayDuration: 18000000, - autoProfile: true, - hash: true, - encryptType: 0, - allowTimeCheck: false, - maxDiffTimeInterval: 30, - autoPageViewDuration: false, - sendDataTimeout: 10000, - getDataTimeout: 10000, - sendType: 'img', - crossSubdomain: false - }; - } - - var typeMap = {}; - var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; - typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); - }); - function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; - } - function isNumber(value) { - return type(value) === 'number'; - } - function isString(value) { - return type(value) === 'string'; - } - function isArray(value) { - return Array.isArray(value); - } - function isBoolean(value) { - return type(value) === 'boolean'; - } - function isObject(value) { - return type(value) === 'object'; - } - function isFunction(value) { - return type(value) === 'function'; - } - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - } - - // 只读属性,无法被更改 - var readOnlyAttrs = ['$lib', '$lib_version', '$platform', '$first_visit_time', '$debug', '$is_login']; - // 通用属性,大部分事件都会上报 - var commonAttrs = ['$screen_width', '$screen_height', '$language', '$time_zone', '$session_id', '$is_time_calibrated', '$web_crawler', '$user_agent', '$title', '$url', '$is_first_day']; - // 公共预制属性,任何事件上报都会带上这些属性 - var publicAttrs = __spreadArrays(['$lib', '$lib_version', '$platform', '$is_login', '$debug'], commonAttrs); - // element相关属性 - var elementAttrs = ['$element_type', '$element_path', '$element_content', '$element_id', '$element_name', '$element_target_url', '$element_class_name', '$device_type', '$url_path']; - // utm相关属性 - var utmAttrs = ['$utm_campaign_id', '$utm_campaign', '$utm_medium', '$utm_source', '$utm_content', '$utm_term']; - // 预制事件列表与事件属性 - var events = { - $startup: __spreadArrays(utmAttrs, ['$is_first_time' //首次访问,只在startUp - ]), - $end: ['$duration' //使用时长 - ], - $pageview: __spreadArrays(utmAttrs, ['$referrer', '$referrer_domain', '$startup_time' // 此行下面5个只在 pageView 中有 - ]), - page_close: ['$referrer', 'pagestaytime'], - $alias: ['$original_id'], - $getPresetProperties: ['$first_visit_time'], - $user_click: elementAttrs, - $web_click: __spreadArrays(elementAttrs, ['$page_width', '$page_height', '$click_x', '$click_y', '$element_x', '$element_y', '$element_clickable']), - $webstay: ['$referrer', '$referrer_domain', '$viewport_width', '$viewport_position', '$viewport_height', '$event_duration', '$device_type'], - $profile_set_once: ['$first_visit_time', '$first_visit_language'] - }; - - var errorMessage = { - 'common': '', - '60001': '{FN}:Property key invalid, support type: String \n' + 'current key:{KEY}\n' + 'current keyType:{KEYTYPE}', - '60002': '{FN}:Property value invalid of key[{KEY}], support type: Number \n' + 'current value: {VALUE}\n' + 'current type: {VALUETYPE}', - '60003': '{FN}:Property value invalid of key[{KEY}], support type: Boolean \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '60005': '{FN}:The length of the property[{KEY}] value (string[{VALUE}]) needs to be 1-255 !', - '60006': 'Please set appkey first.', - '60007': 'Please set uploadURL first.', - '60008': 'Send message failed.', - '60009': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-125 !', - '600010': '{FN}:The length of the property key (string[{KEY}]) needs to be 1-99 !', - '600012': '{FN}:Property key invalid, nonsupport value: ' + readOnlyAttrs.join('/') + ' \n' + 'current KEY:{KEY}', - '600016': '{FN}: Property value invalid, support type: Object \n' + 'current value:{VALUE}\n' + 'current type: {VALUETYPE}', - '600020': 'DebugMode only can be 0,1,2', - '600022': '{FN}: 属性[{KEY}]的值[{VALUE}]无效,支持类型:String/Number/Boolean/string[],若为字符串,长度范围1-255字符', - '600023': '{FN}: 属性key的名称[{KEY}]无效,属性key是以字母开头的字符串,由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;', - '600025': '{FN}: 事件名称[{VALUE}]无效,事件ID必须字母或者$开头,可包含数字字母与下划线,1-99个字符;' - }; - var successMessage = { - 'common': '', - '20001': 'Send message success', - '20002': '{FN}: set success ({VALUE})', - '20003': '{FN}:({VALUE}) delete success', - '20004': '{FN}:clear success', - '20005': '{FN}:reset success', - '20006': 'set appkey success. current appkey : {VALUE}', - '20007': 'Init Analysysdata ' + $lib + ' sdk success, version : ' + $lib_version + '', - '20008': 'set uploadURL success. current uploadURL : {VALUE}', - '20009': '{FN}:[{KEY}] : get failed', - '20010': '{FN}:[{KEY}] : get success. ({VALUE})', - '20011': '{FN}:({VALUE}) delete failed', - '20012': 'Send Message to Server: {KEY} \n' + 'data:{VALUE}', - '20013': "收到服务器的时间: {VALUE} \n" + "本地时间: {KEY} \n" + "时间相差: {FN} \n" + "数据将会进行时间校准", - '20014': 'aliasID already bound' - }; - function successLog(opt) { - if (config.debugMode === 1 || config.debugMode === 2) { - var msgTemp = successMessage[opt.code] || successMessage.common; - var showMsg = msgTemp.replace(/{FN}/, opt.fn).replace(/{KEY}/g, opt.key || '').replace(/{VALUE}/g, JSON.stringify(opt.value)); - console.log(showMsg); - } - } - function errorLog(opt, isInit) { - var msgTemp = errorMessage[opt.code] || errorMessage.common; - var showMsg = msgTemp.replace(/{FN}/g, opt.fn || '').replace(/{KEY}/g, JSON.stringify(opt.key || '')).replace(/{VALUE}/g, JSON.stringify(opt.value)).replace(/{VALUETYPE}/g, type(opt.value)).replace(/{KEYTYPE}/g, type(opt.key)); - if (config.debugMode === 1 || config.debugMode === 2 || isInit) { - console.warn(showMsg); - } - } - - /** - * 长度校验 - * @param value - * @param max - * @param min - * @returns - */ - function lengthCheck(value, max, min) { - if (max === void 0) { - max = 255; - } - if (min === void 0) { - min = 1; - } - if (!isString(value)) { - return false; - } - var len = value.length; - return len < max && len >= min; - } - /** - * 自定义属性key校验 - * @param value - * @param eventName - * @returns - */ - function attrNameCheck(value, logObj) { - var state = true; - if (!lengthCheck(value, 99)) { - state = false; - } else if (readOnlyAttrs.indexOf(value) > -1) { - state = false; - if (logObj) { - logObj.code = 600012; - } - } else { - state = /^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(value); - } - if (logObj && logObj.fn && !state) { - errorLog(logObj); - } - return state; - } - /** - * 自定义属性值校验 - * @param value - */ - function attrValueCheck(value, logObj) { - var state = false; - if (isString(value) || isNumber(value) || isArray(value) || isBoolean(value)) { - state = true; - if (isString(value)) { - if (!lengthCheck(value, 255)) { - state = false; - } - } else if (isArray(value)) { - var some = value.some(function (o) { - return lengthCheck(o, 255); - }); - state = some; - } - } - if (logObj && logObj.fn && logObj.key && !state) { - errorLog(logObj); - } - return state; - } - /** - * 属性校验,不通过的提示并删除 - * @param value - * @param eventName 事件名称, 如果存在则抛出错误提示 - */ - function attrCheck(value, eventName) { - var arrs = {}; - if (!isObject(value)) { - errorLog({ - code: 600016, - fn: eventName, - value: value - }); - return {}; - } - for (var key in value) { - var item = isFunction(value[key]) ? value[key]() : value[key]; - if (attrNameCheck(key, { code: 600023, fn: eventName, key: key }) && attrValueCheck(item, { code: 600022, fn: eventName, key: key, value: item })) { - arrs[key] = item; - } - } - return arrs; - } - /** - * 验证是否全埋点统计黑名单 - * @param autoClickBlackList 全埋点统计黑名单 - * @param el - * @returns boo - */ - function autoClickBlackListCheck(autoClickBlackList, el) { - if (autoClickBlackList) { - var location = window.location; - if (isString(autoClickBlackList)) { - var url = location.href, - urlHost = location.protocol + '//' + location.host, - urlPath = urlHost + location.pathname, - urlIndex = urlPath + 'index.html', - urlHash = urlPath + location.hash, - urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(autoClickBlackList) > -1) { - return true; - } - } else if (isFunction(autoClickBlackList)) { - return autoClickBlackList(el); - } else if (isArray(autoClickBlackList)) { - for (var i = 0; i < autoClickBlackList.length; i++) { - if (autoClickBlackListCheck(autoClickBlackList[i], el) === true) { - return true; - } - } - } - } - return false; - } - function checkElementConfig(trackList, el) { - if (!trackList || isArray(trackList) && trackList.length === 0 || isString(trackList) && trackList === '') { - return false; - } - if (isString(trackList)) { - var tagName = el.tagName.toLowerCase(); - var className = '.' + el.className.split(' ').join('.'); - var id = el.id ? '#' + el.id : ''; - if (tagName === trackList.toLowerCase() || className === trackList || id === trackList || tagName + className === trackList || tagName + id === trackList || id + className === trackList || tagName + id + className === trackList) { - return true; - } - } else if (isArray(trackList)) { - for (var i = 0; i < trackList.length; i++) { - if (checkElementConfig(trackList[i], el)) { - return true; - } - } - } else if (isFunction(trackList)) { - return trackList.call(trackList, el) || false; - } else if (isObject(trackList) && trackList === el) { - return true; - } - return false; - } - /** - * 判断当前元素是否为可触控元素 - */ - function elementClickableCheck(el) { - var trackList = config.trackList; - var tagName = el.tagName.toLowerCase(); - var clickableElementList = ['a', 'button', 'input', 'select', 'textarea', 'svg']; // option无法触发点击事件 - function getElementAttrClick() { - return el.getAttribute('data-ark-click') !== null; - } - var parent = el.parentNode; - if (parent && parent.tagName && clickableElementList.indexOf(tagName) === -1) { - while (parent) { - if (parent.tagName) { - var parentTagName = parent.tagName.toLowerCase(); - if (['button', 'select', 'body'].indexOf(parentTagName) > -1) { - tagName = parentTagName; - break; - } - parent = parent.parentNode; - } else { - break; - } - } - } - if (clickableElementList.indexOf(tagName) > -1 || getElementAttrClick() || checkElementConfig(trackList, el)) { - if (tagName === 'svg' && el.children && el.children.length > 0) { - var svgIsClickable = false; - var svgChildren = el.children; - for (var i = 0; i < svgChildren.length; i++) { - if (svgChildren[i].tagName.toLowerCase() === 'use' && (svgChildren[i].getAttribute('xlink:href') || getElementAttrClick() || checkElementConfig(trackList, el))) { - svgIsClickable = true; - } - } - return svgIsClickable; - } - return true; - } - return false; - } - - //base64加密 解密 - /* //1.加密 - let result = Base.encode('125中文'); //--> "MTI15Lit5paH" - - //2.解密 - let result2 = Base.decode(result); //--> '125中文' - */ - var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - //public method for encoding - var encode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = _utf8_encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - // public method for decoding - var decode = function (input) { - var output = "", - chr1, - chr2, - chr3, - enc1, - enc2, - enc3, - enc4, - i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8_decode(output); - return output; - }; - // private method for UTF-8 encoding - var _utf8_encode = function (string) { - string = string.replace(/\r\n/g, "\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - }; - // private method for UTF-8 decoding - var _utf8_decode = function (utftext) { - var string = "", - i = 0, - c = 0, - c2 = 0, - c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - }; - - var document$1 = window.document; - /** - * Cookie setter & setter - * - * @param {String} name The identify name of cookie. - * @param {String} value (Optional) String to set cookie value. (`null` to remove cookie) - * @param {Object} options (Optional) Set the cooke native options, (path domain, secure, expires) - */ - function cookie (name, value, options) { - options = options || {}; - if (value !== undefined) { - // set cookie - if (value === null) { - value = ''; - options.expires = -1; - } - if (typeof options.expires === 'number') { - var days = options.expires, - t = options.expires = new Date(); - t.setTime(t.getTime() + days * 864e+5); // 24 * 60 * 60 * 1000 - } - var encode = function (s) { - try { - return options.raw ? s : encodeURIComponent(s); - } catch (e) {} - return s; - }; - return document$1.cookie = [encode(name), '=', encode(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''); - } else { - var value_1 = null, - cookie = document$1.cookie, - decode = function (s) { - return options.raw ? s : decodeURIComponent(s); - }, - cookies = cookie ? cookie.split('; ') : []; - for (var i = -1, l = cookies.length, c = name.length + 1; ++i < l;) { - cookie = cookies[i].trim(); - if (cookie.substring(0, c) === name + '=') { - value_1 = decode(cookie.substring(c)); - break; - } - } - return value_1; - } - } - - var storageKey = 'FZ_STROAGE'; - var getLocalStorage = function (key, isSession) { - if (key === void 0) { - key = storageKey; - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - var data = storage.getItem(key); - return data ? JSON.parse(decode(data)) : null; - } catch (e) {} - }; - var setLocalStorage = function (key, data, isSession) { - if (key === void 0) { - key = storageKey; - } - if (data === void 0) { - data = getCore(); - } - try { - var storage = isSession ? globalWindow.sessionStorage : globalWindow.localStorage; - storage.setItem(key, encode(JSON.stringify(data))); - } catch (e) {} - }; - var getCookie = function (key) { - if (key === void 0) { - key = storageKey; - } - var data = cookie(key); - if (data) { - try { - return JSON.parse(decode(data)); - } catch (e) { - return data; - } - } - return null; - }; - var setCookie = function (key, data, option) { - if (key === void 0) { - key = storageKey; - } - cookie(key, data !== null ? encode(JSON.stringify(data)) : null, option); - }; - - /** - * 1.百度:Baiduspider Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - * 百度图片 Baiduspider-image+(+http://www.baidu.com/search/spider.htm) - * 百度PC Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html - * 百度移动端 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html) - * - * 2.谷歌:Googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - * Google图片 AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari - * 3.360蜘蛛:360Spider 360搜索 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); - * 360网站安全 360spider (http://webscan.360.cn) - * 4.Bing爬虫: bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 5.腾讯搜搜蜘蛛:Sosospider Sosospider+(+http://help.soso.com/webspider.htm) - * 搜搜图片 Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm) - * 6.雅虎蜘蛛:Yahoo! 雅虎英文 Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) - * 雅虎中国 Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) - * 4.有道蜘蛛:YoudaoBot Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; ) - * 8.搜狗蜘蛛:Sogou News Spider Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07) - * 9.瑞典 Speedy Spider: Speedy Spider Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/) - * 10.俄罗斯 yandex : YandexBot Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) - * 11.MSN蜘蛛:msnbot/msnbot-media msnbot/1.1 (+http://search.msn.com/msnbot.htm) - * 12.必应蜘蛛:bingbot/compatible Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) - * 13.听云爬虫:networkbench Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv: 11.0;NetworkBench/8.0.1.309-5774440-2481662) like Gecko - * 14.Alexa蜘蛛:ia_archiver ia_archiver/8.9 (Windows NT 3.1; en-US;) - * 15.宜sou蜘蛛:EasouSpider Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) - * 16.华为赛门铁克蜘蛛:HuaweiSymantecSpider HuaweiSymantecSpider/1.0+DSE-support@huaweisymantec.com+(compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR ; http://www.huaweisymantec.com/cn/IRL/spider) - * 17.七牛镜像蜘蛛:qiniu qiniu-imgstg-spider-1.0 - * 18.DNSPod监控:DNSPod DNSPod-Monitor/2.0 - * 19.俄罗斯 LinkpadBot:LinkpadBot Mozilla/5.0 (compatible; LinkpadBot/1.06; +http://www.linkpad.ru) - * 20.英国 MJ12bot:MJ12bot Mozilla/5.0 (compatible; MJ12bot/v1.4.0; http://www.majestic12.co.uk/bot.php?+) - * 21.即刻蜘蛛:JikeSpider - * 22.一淘网蜘蛛:EtaoSpider Mozilla/5.0 (compatible; EtaoSpider/1.0; EtaoSpider) - * 23.人工智能爬虫:crawler Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620 - * 24.Scrapy爬虫: scrapy - * 25.监控宝:jiankongbao Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JianKongBao Monitor 1.1) - * 26.OneAPM爬虫:OneAPM FFAgent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0: OneAPM FFAgent)Gecko/20100101 Firefox/39.0 - * 27.PhantomJS:PhantomJS Mozilla/5.0 (Unknown; Linux x86_64)AppleWebKit/538. 1 (KHTML,like Gecko)PhantomJS/2.1.1 Safari/538.1 - * 28. BingPreview: Mozilla / 5.0 + (Windows + NT + 6.1; + WOW64) + AppleWebKit / 534++(KHTML, +like + Gecko) + BingPreview / 1.0 b - */ - function isSpider() { - var userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)) { - return true; - } - return false; - } - - // 单页面模式下监听路径变化 - function pathChange(fn) { - var pushState = window.history.pushState; - var replaceState = window.history.replaceState; - window.history.pushState = function () { - var arg = arguments; - pushState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - window.history.replaceState = function (e) { - var arg = arguments; - replaceState.apply(window.history, arg); - setTimeout(function () { - fn && fn(arg); - }); - }; - var state = pushState ? 'popstate' : 'hashchange'; - window.addEventListener(state, function () { - var arg = arguments; - setTimeout(function () { - fn && fn(arg); - }); - }); - } - var getDomainFromUrl = function (domianStatus) { - var host = window.location.hostname; - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - } else { - return ''; - } - return urlDomain.reverse().join('.'); - }; - - var dataBase = 'ANALYSYS_AGENT'; - var tableName = 'FZ_STORAGE'; - var IndexedDb = /** @class */function () { - function IndexedDb() { - this.open(); - } - // 打开数据库 - IndexedDb.prototype.open = function () { - var _this = this; - var request = window.indexedDB.open(dataBase); - request.onsuccess = function (event) { - _this.db = request.result; - console.log('indexedDB数据库打开成功'); - _this.onConnectSuccess && _this.onConnectSuccess(_this.db); - }; - request.onerror = function (event) { - console.log('indexedDB数据库打开报错'); - _this.onConnectError && _this.onConnectError(event); - }; - request.onupgradeneeded = function (event) { - console.log('indexedDB数据库新建成功'); - var db = event.target.result; - if (!db.objectStoreNames.contains(tableName)) { - db.createObjectStore(tableName, { keyPath: 'id' }); - } - }; - }; - // 读取数据 - IndexedDb.prototype.get = function (successFn, errorFn) { - var objectStore = this.db.transaction(tableName).objectStore(tableName); - var request = objectStore.get(1); - request.onsuccess = function (event) { - successFn && successFn(request.result); - }; - request.onerror = function (event) { - console.log('事务失败'); - errorFn && errorFn(event); - }; - }; - // 添加数据 - IndexedDb.prototype.add = function (data, successFn, errorFn) { - var request = this.db.transaction(tableName, 'readwrite').objectStore(tableName).add(data); - request.onsuccess = function (event) { - console.log('数据写入成功'); - successFn && successFn(event); - }; - request.onerror = function (event) { - console.log('数据写入失败'); - errorFn && errorFn(event); - }; - }; - // 编辑数据 - IndexedDb.prototype.edit = function () {}; - // 更新数据 - IndexedDb.prototype.put = function () {}; - return IndexedDb; - }(); - - var domainUrl = getDomainFromUrl(true); - var cookieKey = domainUrl ? 'FZ_STROAGE.' + domainUrl : ''; - var storeDb = new IndexedDb(); - function getStorageV2(fn) { - function getHistoryStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; - } - if (globalWindow.indexedDB) { - storeDb.onConnectSuccess = function () { - storeDb.get(function (res) { - var data = res ? res.content : null; - fn(data); - }); - }; - } else { - fn(getHistoryStorage()); - } - } - function setStorageV2() { - var data = getCore(); - storeDb.add({ - id: 1, - content: data - }); - } - // 获取缓存数据 - function getStorage() { - // 跨子域 - if (config.crossSubdomain) { - return (cookieKey ? getCookie(cookieKey) : null) || getLocalStorage() || null; - } - return getLocalStorage() || getCookie(cookieKey) || null; - } - // 设置缓存数据 - function setStorage() { - var data = getCore(); - if (config.crossSubdomain) { - // 通用属性不存储在cookie里,防止太大 - var cookieData = __assign({}, data); - delete cookieData.ARKSUPER; - if (cookieKey) { - setCookie(cookieKey, cookieData, { - expires: 365 * 20, - domain: domainUrl - }); - } - } - setLocalStorage('FZ_STROAGE', data); - } - // 清空历史cookie,根据场景只保留一个 - function emptyHistoryCookie() { - var ARKID = getCookie('ARK_ID'); - var ARKSTARTUP = getCookie('ARK_STARTUP'); - if (ARKID) { - setCookie('ARK_ID', null, { - domain: domainUrl - }); - } - if (ARKSTARTUP) { - setCookie('ARK_STARTUP', null, { - domain: domainUrl - }); - } - // 删掉cookie - if (!config.crossSubdomain) { - var cookie = cookieKey ? getCookie(cookieKey) : null; - if (cookie) { - setCookie(cookieKey, null, { - domain: domainUrl - }); - } - } - } - - /* - md5.js - */ - function MD5(str, bit) { - var sMessage = str; - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - function F(x, y, z) { - return x & y | ~x & z; - } - function G(x, y, z) { - return x & z | y & ~z; - } - function H(x, y, z) { - return x ^ y ^ z; - } - function I(x, y, z) { - return y ^ (x | ~z); - } - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWords_temp1 = lMessageLength + 8; - var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - function WordToHex(lValue) { - var WordToHexValue = "", - WordToHexValue_temp = "", - lByte, - lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; - var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; - var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; - var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } - return WordToHex(b) + WordToHex(c); - } - - function dateFormat(date, format) { - var offset_GMT = date.getTimezoneOffset(); - date = new Date(date.getTime() + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000); //转换为东八区时间 - var o = { - "M+": date.getMonth() + 1, - "d+": date.getDate(), - "h+": date.getHours(), - "m+": date.getMinutes(), - "s+": date.getSeconds(), - "q+": Math.floor((date.getMonth() + 3) / 3), - "S+": date.getMilliseconds() //millisecond - }; - if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); - for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? ("" + o[k]).length < 3 ? ("00" + o[k]).substr(("00" + o[k]).length - 3, ("00" + o[k]).length) : o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - return format; - } - function clientTimeZone() { - var munites = new Date().getTimezoneOffset(); - var hour = munites / 60; - var munite = munites % 60; - var prefix = "-"; - if (hour <= 0 || munite < 0) { - prefix = "+"; - hour = -hour; - if (munite < 0) { - munite = -munite; - } - } - hour = hour + ""; - munite = munite + ""; - if (hour.length == 1) { - hour = "0" + hour; - } - if (munite.length == 1) { - munite = "0" + munite; - } - return prefix + hour + ':' + munite; - } - - // 启动时间 - var startUpTime; - // 初始化时获取启动时间 - function initStartUpTime() { - var data = getCookie('ARK_STARTUP') || getLocalStorage('FZ_SESSION', true) || {}; - startUpTime = data; - } - // 设置启动时间 - function setStartUpTime() { - startUpTime = { - STARTUP: true, - STARTUPTIME: dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }; - setLocalStorage('FZ_SESSION', startUpTime, true); - } - // 清空时间 - function clearStartUpTime() { - startUpTime = {}; - window.sessionStorage.removeItem('FZ_SESSION'); - } - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - - /** - * 返回核心数据默认值 - * @returns object - */ - function coreDefault() { - return { - ARKAPPID: config.appkey, - ARKDEBUG: config.debugMode, - ARKUPLOADURL: config.uploadURL, - ARKFRISTPROFILE: '', - ARKSUPER: {}, - ARK_ID: setId(), - FRISTDAY: 0, - POSTDATA: [], - SEESIONDATE: 0, - SEESIONID: '' - }; - } - var core; - /** - * 初始化 - */ - function coreInit() { - initStartUpTime(); - var storageCore = getStorage(); - function setDefCore() { - clearStartUpTime(); - core = coreDefault(); - setStorage(); - } - if (!storageCore) { - setDefCore(); - } else { - var debug = storageCore.ARKDEBUG; - // 检测缓存appkey debug uploadurl是否和sdk初始化一致,不一致则重新生成匿名用户 - if (config.appkey !== storageCore.ARKAPPID || debug === 1 && debug !== config.debugMode || storageCore.ARKUPLOADURL !== config.uploadURL) { - setDefCore(); - } else { - core = storageCore; - } - } - getStorageV2(function (data) { - if (data) { - core = data; - } else { - core = coreDefault(); - setStorageV2(); - } - }); - // 5.0.0版本后,清空所有不需要的cookie,只根据场景保留一个 - emptyHistoryCookie(); - } - function getCore() { - return core; - } - // 重置缓存数据 - function resetCore() { - core.ARK_ID = setId(); - core.ARK_TRACKID = ''; - core.ARK_LOGINID = ''; - core.ARKSUPER = {}; - core.ARKFRISTPROFILE = ''; - setSessionId(); - clearStartUpTime(); - } - /** - * 设置参数 - */ - function setCoreParam(key, value) { - core[key] = value; - setStorage(); - } - /** - * 获取当前用户id - * 优先获取登录后id => 用户自定义匿名id => 系统生成匿名id - */ - function getId() { - return core.ARK_LOGINID || core.ARK_TRACKID || core.ARK_ID; - } - /** - * 系统设置匿名id - * @returns - */ - function setId() { - var timeRandom = new Date().getTime() + '' + Math.random() * 10000; - return $ans + MD5(timeRandom, 32) + MD5(timeRandom, 32).slice(0, 4); - } - /** - * 获取sessionId - */ - function getSessionId() { - var date = new Date(); - var nowDate = date.getTime(); - var offset_GMT = date.getTimezoneOffset(); - var nowDay = new Date(nowDate + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - var sessionDay = !core.SEESIONDATE ? 0 : new Date(core.SEESIONDATE + offset_GMT * 60 * 1000 + 8 * 60 * 60 * 1000).getDate(); - if (!core.SEESIONID || !core.SEESIONDATE || nowDate - core.SEESIONDATE > 30 * 60 * 1000 || sessionDay !== nowDay) { - setSessionId(); - } - return core.SEESIONID; - } - /** - * 设置sessionid - */ - function setSessionId() { - var date = +new Date(); - core.SEESIONDATE = date; - core.SEESIONID = MD5($ans + date + '' + Math.random(), 16); - setStorage(); - } - /** - * 用户手动设置匿名id - * @param xwho - */ - function setAnonymousID(xwho) { - core.ARK_TRACKID = xwho; - setStorage(); - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - */ - function getAnonymousID() { - return core.ARK_TRACKID || core.ARK_ID; - } - // 通用属性 - /** - * 获取指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - * @returns - */ - function getSuperProperty(superPropertyName) { - if (superPropertyName) { - return core.ARKSUPER[superPropertyName]; - } - return core.ARKSUPER; - } - /** - * 设置通用属性 - * @param property 属性 - */ - function setSuperProperty(property) { - core.ARKSUPER = assign({}, core.ARKSUPER, property); - setStorage(); - } - /** - * 删除指定通用属性或全部通用属性 - * @param superPropertyName 属性名称 - */ - function delSuperProperty(superPropertyName) { - // 删除指定属性 - if (superPropertyName && core.ARKSUPER[superPropertyName]) { - delete core.ARKSUPER[superPropertyName]; - } - // 删除全部 - if (superPropertyName === undefined) { - core.ARKSUPER = {}; - } - setStorage(); - } - // 添加上报数据 - function addPostData(option) { - if (!core.POSTDATA) { - core.POSTDATA = []; - } - if (core.POSTDATA.length < 200) { - core.POSTDATA.push(option); - setStorage(); - } - } - // 删除上报数据 - function delPostData(arrData) { - var arrDataMap = {}; - arrData.forEach(function (o) { - arrDataMap[o.xwhen] = 1; - }); - for (var i = core.POSTDATA.length - 1; i >= 0; i--) { - var item = core.POSTDATA[i]; - if (arrDataMap[item.xwhen]) { - core.POSTDATA.splice(i, 1); - } - } - setStorage(); - } - // 获取上报数据 - function getPostData() { - return __spreadArrays(core.POSTDATA); - } - - // 类型转换 - /** - * 值转换成字符串 - */ - function valToString(value) { - if (value === undefined || value === null) { - return ''; - } - if (isObject(value)) { - return JSON.stringify(value); - } - return value + ''; - } - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - - /** - * 服务器时间,开始时间校准时用到 - */ - // 服务器时间 - var serverTime = 0; - // 是否已获取过服务器时间 - var isGetServerTime = false; - // 服务器时间与本地时间的差值 - var timeDiff = 0; - /** - * 返回校准后的当前时间 - * - */ - function getNow() { - var now = +new Date(); - return now + timeDiff; - } - // 获取服务器时间 - function getServerTime(fn) { - if (!config.allowTimeCheck || serverTime) { - isGetServerTime = true; - fn && fn(serverTime); - return; - } - ajax({ - url: config.uploadURL, - timeout: 800 - }, function (res) { - if (res && res.header && res.header.date) { - var timeNow = +new Date(); - serverTime = +new Date(res.header.date); - var diff = Math.abs((serverTime - timeNow) / 1000); - // 开启时间校准 - if (diff > config.maxDiffTimeInterval) { - timeDiff = serverTime - timeNow; - successLog({ - code: 20013, - value: dateFormat(new Date(serverTime), 'yyyy-MM-dd hh:mm:ss +SSS'), - key: dateFormat(new Date(timeNow), 'yyyy-MM-dd hh:mm:ss +SSS'), - fn: diff + 's' - }); - } - } - isGetServerTime = true; - fn && fn(serverTime); - }, function (err) { - isGetServerTime = true; - fn && fn(serverTime); - }); - } - - var isReady = false; - // 缓存sdk异步加载完成前的函数调用 - var cacheFn = globalWindow.AnalysysAgent && globalWindow.AnalysysAgent.param ? globalWindow.AnalysysAgent.param : []; - var callbackArr = []; - // 执行缓存函数 - function implementAallbackArr() { - if (isGetServerTime && isInitConfig) { - // 执行sdk异步加载完成前的缓存函数 - if (cacheFn && cacheFn.length) { - cacheFn.forEach(function (o) { - var fn = globalWindow.AnalysysAgent[o.fn]; - fn && fn.apply(void 0, o.arg); - }); - cacheFn = null; - } - // 执行sdk没有初始化完成之前缓存函数 - if (callbackArr && callbackArr.length) { - callbackArr.forEach(function (o) { - o.fn.apply(o.fn, o.arg); - }); - callbackArr = []; - } - isReady = true; - } - } - function ready(callback, isTop) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 没有获取到ServerTime 和 初始化之前先把触发事件存起来,等初始化和ServerTime完成后再调用 - if (!isGetServerTime || !isInitConfig || !isReady) { - var obj = { - fn: callback, - arg: args - }; - isTop ? callbackArr.unshift(obj) : callbackArr.push(obj); - } else { - callback.apply(callback, args); - } - }; - } - - function setAttrs(superProperty, methodName) { - var attrs = attrCheck(superProperty, methodName); - if (Object.keys(attrs).length) { - setSuperProperty(attrs); - successLog({ - fn: methodName, - code: 20002, - value: superProperty - }); - } - } - /** - * 设置单个通用属性 - * @param name string - * @param value string number boolean Array - */ - function registerSuperProperty(name, value, fn) { - var _a; - var methodName = '$registerSuperProperty'; - // 兼容用友传入的是对象 - if (isObject(name)) { - setAttrs(name, methodName); - fn && fn(getSuperProperty()); - return; - } - if (attrNameCheck(name, { code: 600023, fn: methodName, key: name })) { - var obj = (_a = {}, _a[name] = value, _a); - setAttrs(obj, methodName); - fn && fn(getSuperProperty()); - } - } - /** - * 设置多个属性 - * @param superProperty 属性 - * @returns - */ - function registerSuperProperties(superProperty, fn) { - setAttrs(superProperty, '$registerSuperProperties'); - fn && fn(getSuperProperty()); - } - /** - * 获取单个通用属性 - */ - function getSuperProperty$1(superPropertyName, fn) { - var value = getSuperProperty(superPropertyName); - fn && fn(value); - return value; - } - /** - * 获取所有通用属性 - */ - function getSuperProperties(fn) { - var value = getSuperProperty(); - fn && fn(value); - return value; - } - /** - * 删除单个属性 - * @param superPropertyName 属性名称 - */ - function unRegisterSuperProperty(superPropertyName, fn) { - delSuperProperty(superPropertyName); - successLog({ - fn: '$unRegisterSuperProperty', - code: 20003, - value: superPropertyName - }); - fn && fn(getSuperProperty()); - } - /** - * 删除所有属性 - */ - function clearSuperProperties(fn) { - delSuperProperty(); - successLog({ - fn: '$clearSuperProperties', - code: 20004 - }); - fn && fn(getSuperProperty()); - } - - function image (options, successFn, errorFn) { - var img = new Image(1, 1), - sendTime = null; - img.crossOrigin = 'anonymous'; - // 清空 - function empty() { - img.src = ''; - img.onload = null; - img.onerror = null; - img.onabort = null; - } - function success() { - clearTimeout(sendTime); - successFn && successFn({ - header: {}, - data: { code: 200 } - }); - empty(); - } - img.onload = function () { - success(); - }; - img.onerror = function (e, v) { - success(); - }; - // 超时后 - img.onabort = function () { - empty(); - errorFn && errorFn(); - }; - var url = options.url; - if (options.data) { - var data = encode(options.data); - var newData = setValidKey(data, url); - url += "&data=" + encodeURIComponent(newData.data) + "&send_type=" + encodeURIComponent(newData.send_type); - } - // 超时后自动取消 - sendTime = setTimeout(function () { - img.onabort(); - }, config.sendDataTimeout); - img.src = url; - } - function setValidKey(optionData, url) { - var data = { - data: optionData, - send_type: '' - }; - var param = []; - for (var key in data) { - param.push(key + '=' + encodeURIComponent(data[key])); - } - var validurl = url + '&' + param.join('&'); - validurl = validurl.replace(config.uploadURL, ''); - var validValue = MD5(validurl, 32).split(''); - var validkey = validValue[2] + '' + validValue[0] + '' + validValue[4]; - data.send_type = validkey; - return data; - } - - var eventAttribute = { - startup: { - state: false, - xwhen: 0 - }, - pageview: { - xwhen: 0, - state: {// 当前页面pageview上报状态 - }, - prevPath: document.referrer, - path: document.location.href - }, - webstay: { - xwhen: 0 - }, - // 页面是否在卸载 - isUnload: false, - // 事件发送成功后回调函数 - eventCallback: {}, - // 页面关闭 - pageClose: { - // 页面隐藏时间 - hideTime: 0, - // 页面开始隐藏时间 - hideStartTime: 0 - } - }; - // 执行事件上报回调函数 - function implementEventCallback(data) { - if (eventAttribute.eventCallback[data.xwhen]) { - eventAttribute.eventCallback[data.xwhen](data); - delete eventAttribute.eventCallback[data.xwhen]; - } - } - - function beacon (options) { - var url = options.url; - var data = JSON.stringify(options.data); - navigator.sendBeacon(url, data); - } - - var isHybrid = false; - var hybrid = { - userId: '' - }; - console.log('是否Hybrid模式', isHybrid); - /** - * 初始化webViewHybrid模式 - */ - function webViewHybridInit() { - var AnalysysAgentHybrid = globalWindow.AnalysysAgentHybrid; - if (AnalysysAgentHybrid) { - if (AnalysysAgentHybrid.isHybrid) { - isHybrid = AnalysysAgentHybrid.isHybrid(); - console.log('是否Hybrid模式', isHybrid); - } - if (AnalysysAgentHybrid.getAppStartInfo && isFunction(AnalysysAgentHybrid.getAppStartInfo)) { - var webViewHybridData = AnalysysAgentHybrid.getAppStartInfo(); - console.log('Hybrid模式注入参数', webViewHybridData); - if (isString(webViewHybridData)) { - webViewHybridData = JSON.parse(webViewHybridData); - } - hybrid.userId = webViewHybridData.userId; - } - } - } - - var eventMap = { - '$pageview': 'pageView', - '$startup': 'startUp', - '$alias': 'alias', - 'page_close': 'pageClose', - '$profile_set_once': 'profileSetOnce', - '$profile_set': 'profileSet', - '$profile_increment': 'profileIncrement', - '$profile_append': 'profileAppend', - '$profile_unset': 'profileUnset', - '$profile_delete': 'profileDelete' - }; - function hybridSendDate (functionName, functionParams) { - var _a, _b, _c, _d; - var obj = { - functionName: eventMap[functionName] || functionName, - functionParams: ['', functionParams] - }; - // ios - (_c = (_b = (_a = globalWindow.webkit) === null || _a === void 0 ? void 0 : _a.messageHandlers) === null || _b === void 0 ? void 0 : _b.AnalysysAgent) === null || _c === void 0 ? void 0 : _c.postMessage(obj); - // 安卓 - (_d = globalWindow.AnalysysAgentHybrid) === null || _d === void 0 ? void 0 : _d.analysysHybridCallNative(JSON.stringify(obj)); - } - - // 一次最多上报20条 - var MAXLINENUM = 20; - // 上报失败后重试次数 - var RETRNUM = 3; - // 正在上报数据 - var doingList = []; - // 当前重试次数 - var retryCount = 0; - // 发送请求 - function postData() { - // 待上报数据 - var todoList = getPostData(); - if (doingList.length || !todoList.length) { - return; - } - // 取出最多 MAXLINENUM 条数据进入上报队列 - doingList = todoList.splice(0, MAXLINENUM); - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: doingList, - encryptType: config.encryptType - }; - successLog({ - key: option.url, - value: doingList, - code: 20012 - }); - // 开启调试模式,不入库 - if (config.debugMode === 1) { - delPostData(doingList); - doingList = []; - return; - } - // if (globalWindow.AnalysysAgent.encrypt && isFunction(globalWindow.AnalysysAgent.encrypt.uploadData)) { - // option = globalWindow.AnalysysAgent.encrypt.uploadData(option); - // } - ajax({ - url: option.url, - method: 'POST', - data: option.data, - timeout: config.sendDataTimeout - }, function () { - // 成功后回调函数 - doingList.forEach(function (o) { - implementEventCallback(o); - }); - // 上报成功后删除队列与相应的缓存数据 - delPostData(doingList); - doingList = []; - // 继续上报剩下的数据,如果有的话 - postData(); - successLog({ - code: 20001 - }); - retryCount = 0; - }, function () { - doingList = []; - errorLog({ - code: 60008 - }); - // 失败后重试上报,最多重试RETRNUM次 - if (retryCount < RETRNUM) { - postData(); - retryCount++; - } - }); - } - /** - * img方式上报 - * @param data - */ - function imgGetData(data) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: JSON.stringify([data]) - }; - successLog({ - key: option.url, - value: [data], - code: 20012 - }); - image(option, function () { - successLog({ - code: 20001 - }); - // 成功后回调函数 - implementEventCallback(data); - }, function () { - errorLog({ - code: 60008 - }); - addPostData(data); - postData(); - }); - } - /** - * 上报数据 - * @param data object - */ - function sendData(data, fn) { - // Hybrid模式下由原生端上报 - if (isHybrid) { - hybridSendDate(data.xwhat, data.xcontext); - return; - } - if (!config.appkey) { - errorLog({ - code: 60006 - }); - return; - } - if (!config.uploadURL) { - errorLog({ - code: 60007 - }); - return; - } - // 设置回调函数 - if (fn && isFunction(fn)) { - eventAttribute.eventCallback[data.xwhen] = fn; - } - // 页面卸载时采用beacon上报 - if (eventAttribute.isUnload && navigator && navigator.sendBeacon) { - var option = { - url: config.uploadURL + '/up' + '?appid=' + config.appkey, - data: [data] - }; - beacon(option); - return; - } - if (config.sendType === 'img') { - imgGetData(data); - } else { - // 加入待上报队列 - addPostData(data); - postData(); - } - } - - /** - * 路径相关参数信息存储 - */ - var pathParams = { - scene: null, - utm_campaign_id: '', - utm_source: '', - utm_medium: '', - utm_term: '', - utm_content: '', - utm_campaign: '', - share_id: '', - share_level: '', - share_path: '' - }; - - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (isString(property)) { - return getConstantStyle(element, property); - } else if (isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - function getElementClassName(el) { - var eleClassName = el.getAttribute('class') || ''; - if (eleClassName) { - var eleClassList = eleClassName.split(' '); - var eleClassArray = []; - for (var i = 0; i < eleClassList.length; i++) { - if (eleClassList[i] !== '') { - eleClassArray.push(eleClassList[i]); - } - } - eleClassName = '.' + eleClassArray.join('.'); - return eleClassName; - } - return ''; - } - function getElementTargetUrl(el) { - var href = el.getAttribute('href'); - if (href && href.indexOf('javascript:') < 0) { - try { - href = decodeURIComponent(href); - } catch (e) {} - // if (config.isHybrid === true) { - // href = href.replace(/"/g, '\\"') - // } - return href; - } - return ''; - } - // 获取元素内容 - function getElementContent(el) { - var eleContent = ''; - if (el.tagName.toLowerCase() === 'input' && ['button', 'submit'].indexOf(el.type) > -1) { - eleContent = el.value || ''; - } else if (el.tagName.toLowerCase() === 'img') { - eleContent = el.getAttribute('alt') || el.getAttribute('title') || ''; - } else if (el.tagName.toLowerCase() === 'a') { - eleContent = el.getAttribute('title') || ''; - } - if (!eleContent) { - var children = el.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - } - if (eleContent && isString(eleContent)) { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - return eleContent.trim(); - } - // 获取元素路径 - function getElementPath(el) { - var list = []; - var parent = el; - while (parent != null) { - var index = 0; - if (parent.parentNode) { - var clildrenEles = parent.parentNode.children; - if (clildrenEles) { - for (var i = 0; i < clildrenEles.length; i++) { - if (clildrenEles[i] === parent) { - index = i; - } - } - } - } - var tagName = parent.tagName; - if (!tagName) { - parent = parent.parentNode; - continue; - } - tagName = tagName.toLowerCase(); - if (tagName === 'button') { - list = []; - } - var parentID = parent.id ? '#' + parent.id : ''; - var eleClassNameList = parent.className && isString(parent.className) ? parent.className.split(' ') : []; - if (eleClassNameList.length > 0) { - var eleClassName = ''; - for (var y = 0; y < eleClassNameList.length; y++) { - if (eleClassNameList[y] && eleClassNameList[y].indexOf('ARK') < 0) { - eleClassName += '.' + eleClassNameList[y]; - } - } - list.push(tagName + parentID + eleClassName + '|' + index); - } else { - list.push(tagName + parentID + '|' + index); - } - parent = parent.parentNode; - } - return list.join('<'); - } - function getElementScroll(ele) { - var scrollTop = 0; - var scrollLeft = 0; - while (ele !== null && ele !== document.body) { - if (ele.nodeType === 1) { - scrollTop += ele.scrollTop; - scrollLeft += ele.scrollLeft; - } - ele = ele.parentNode; - } - return { - scrollLeft: scrollLeft, - scrollTop: scrollTop - }; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getElementOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele != null) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - - /** - * 全埋点相关属性存储 - */ - var userClickAttrs = {}; - var webClickAttrs = {}; - function setUserClickAttrs(el) { - userClickAttrs.element_id = el.getAttribute('id') || ''; - userClickAttrs.element_content = getElementContent(el); - userClickAttrs.element_type = el.tagName.toLowerCase(); - userClickAttrs.element_name = el.getAttribute('name') || ''; - userClickAttrs.element_class_name = getElementClassName(el); - userClickAttrs.element_target_url = getElementTargetUrl(el); - userClickAttrs.element_path = getElementPath(el); - } - function setWebClickAttrs(e) { - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var x = e.pageX || e.clientX + scrollX; - var y = e.pageY || e.clientY + scrollY; - var el = e.target || e.srcElement; - webClickAttrs.click_x = x; - webClickAttrs.click_y = y; - var eleScr = getElementScroll(el); - var eleOff = getElementOffset(el); - webClickAttrs.element_x = x - (eleOff.left - eleScr.scrollLeft); - webClickAttrs.element_y = y - (eleOff.top - eleScr.scrollTop); - webClickAttrs.element_clickable = elementClickableCheck(el) ? 1 : 0; - } - - // 获取设备类型 - function getDeviceType() { - var u = globalWindow.navigator.userAgent; - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - } - // 动态加载js - function loadJs(fillPath, fn) { - var createScript = document.createElement('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.src = fillPath; - createScript.onload = fn; - var body = document.getElementsByTagName('body')[0] || document.getElementsByTagName('head')[0]; - if (body) { - body.appendChild(createScript); - } - } - - /** - * 获取属性值 - */ - var getAttr = { - xwho: function () { - return hybrid.userId || getId(); - }, - xwhen: function () { - return getNow(); - }, - xwhat: function (xwhat) { - return xwhat; - }, - $lib: function () { - return $lib; - }, - $lib_version: function () { - return $lib_version; - }, - $platform: function () { - return $lib; - }, - $debug: function () { - return config.debugMode; - }, - $is_login: function () { - return !!core.ARK_LOGINID; - }, - $session_id: function () { - return getSessionId(); - }, - $screen_width: function () { - return globalWindow.screen.width || 0; - }, - $screen_height: function () { - return globalWindow.screen.height || 0; - }, - $language: function () { - return (globalWindow.navigator.language || globalWindow.navigator.browserLanguage).toLowerCase(); - }, - $user_agent: function () { - return globalWindow.navigator.userAgent.replace(/"/g, '\\"'); - }, - $time_zone: function () { - return 'GMT' + clientTimeZone(); - }, - $startup_time: function () { - return startUpTime.STARTUPTIME; - }, - // 是否安装后首次访问 - $is_first_time: function () { - return !core.FRISTDAY; - }, - // 是否安装后首日访问 - $is_first_day: function () { - if (!core.FRISTDAY) { - return true; - } - if (isString(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === core.FRISTDAY; - } - if (isNumber(core.FRISTDAY)) { - return dateFormat(new Date(getNow()), 'yyyyMMdd') === dateFormat(new Date(core.FRISTDAY), 'yyyyMMdd'); - } - return false; - }, - $first_visit_time: function () { - return core.ARKFRISTPROFILE; - }, - $first_visit_language: function () { - return ''; - }, - $original_id: function () { - return core.ARK_TRACKID || core.ARK_ID; - }, - // 是否校准了时间 - $is_time_calibrated: function () { - return config.allowTimeCheck && timeDiff ? true : false; - }, - $referrer: function () { - return eventAttribute.pageview.prevPath; - }, - $title: function () { - return document.title; - }, - $url: function () { - return eventAttribute.pageview.path; - }, - $url_path: function () { - return ''; - }, - // 页面URL-去参的页面URL - $url_domain: function () { - return ''; - }, - $utm_campaign_id: function () { - return pathParams.utm_campaign_id; - }, - $utm_source: function () { - return pathParams.utm_source; - }, - $utm_medium: function () { - return pathParams.utm_medium; - }, - $utm_term: function () { - return pathParams.utm_term; - }, - $utm_content: function () { - return pathParams.utm_content; - }, - $utm_campaign: function () { - return pathParams.utm_campaign; - }, - // 点击元素相关 - $element_content: function () { - return valToString(userClickAttrs.element_content); - }, - $element_id: function () { - return valToString(userClickAttrs.element_id); - }, - $element_type: function () { - return valToString(userClickAttrs.element_type); - }, - $element_name: function () { - return valToString(userClickAttrs.element_name); - }, - $element_class_name: function () { - return valToString(userClickAttrs.element_class_name); - }, - $element_target_url: function () { - return valToString(userClickAttrs.element_target_url); - }, - $element_path: function () { - return valToString(userClickAttrs.element_path); - }, - $page_width: function () { - return document.documentElement.scrollWidth; - }, - $page_height: function () { - return document.documentElement.scrollHeight; - }, - $click_x: function () { - return webClickAttrs.click_x; - }, - $click_y: function () { - return webClickAttrs.click_y; - }, - $element_x: function () { - return webClickAttrs.element_x; - }, - $element_y: function () { - return webClickAttrs.element_y; - }, - $element_clickable: function () { - return webClickAttrs.element_clickable; - }, - $viewport_width: function () { - return document.documentElement.clientWidth || document.body.clientWidth; - }, - $viewport_height: function () { - return document.documentElement.clientHeight || document.body.clientHeight; - }, - $viewport_position: function () { - return document.documentElement.scrollTop || document.body.scrollTop; - }, - $event_duration: function () { - var duration = +new Date() - (eventAttribute.webstay.xwhen || eventAttribute.pageview.xwhen); - if (duration > config.webstayDuration) { - return config.webstayDuration; - } - return duration; - }, - // 设备类型 - $device_type: function () { - return getDeviceType(); - }, - // 是否爬虫 - $web_crawler: function () { - return isSpider(); - } - }; - - function fillData (eventName) { - var obj = { - appid: config.appkey, - xwho: getAttr.xwho(), - xwhat: getAttr.xwhat(eventName), - xwhen: getAttr.xwhen(), - xcontext: {} - }; - var event = events[eventName]; - // 设置事件属性 - function setEventAttr(attrName) { - var getAttrFn = getAttr[attrName]; - if (getAttrFn) { - var value = getAttrFn(); - if (value !== '' && value !== null && value !== undefined) { - obj.xcontext[attrName] = value; - } - } - } - // 填充公共属性 - publicAttrs.forEach(function (o) { - setEventAttr(o); - }); - // 填充事件私有属性 - if (event) { - event.forEach(function (o) { - setEventAttr(o); - }); - } - return obj; - } - - function pageView(pageName, properties, fn) { - // 排除黑名单 - if (autoClickBlackListCheck(config.pageViewBlackList)) { - return; - } - var eventName = '$pageview'; - var userObj = {}, - customProperties = {}; - if (lengthCheck(pageName)) { - userObj['$title'] = pageName; - if (properties) { - customProperties = attrCheck(properties, eventName); - } - } - userObj = assign({}, customProperties, userObj); - // 获取上报数据模块 - var res = fillData(eventName); - // 重置webstay触发时间 - eventAttribute.webstay.xwhen = 0; - // 记录浏览页面时间 - eventAttribute.pageview.xwhen = res.xwhen; - // 合并通用属性 // 绑定页面属性 // 绑定传入的属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), config.pageProperty, userObj); - sendData(res, fn); - } - - /** - * 页面属性 - */ - var pageProperty = {}; - /** - * 设置页面属性 - * @param properties - */ - function setPageProperty(properties) { - pageProperty = assign({}, pageProperty, properties); - } - /** - * 获取页面属性 - * @returns - */ - function getPageProperty() { - return pageProperty; - } - /** - * 删除页面属性 - */ - function delPageProperty() { - pageProperty = {}; - } - - function sendProfile(eventName, propertyName, propertyValue, fn) { - // 获取上报数据模块 - var res = fillData(eventName); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - var property = {}; - if (isObject(propertyName)) { - property = propertyName; - } - if (lengthCheck(propertyName) && attrValueCheck(propertyValue)) { - property[propertyName] = propertyValue; - } - res.xcontext = assign({}, res.xcontext, attrCheck(property, eventName)); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(propertyValue) && !fn) { - callback = propertyValue; - } - sendData(res, callback); - } - /** - * 设置用户固有属性 - * @param propertyName - * @param propertyValue - */ - function profileSetOnce(propertyName, propertyValue, fn) { - sendProfile('$profile_set_once', propertyName, propertyValue, fn); - } - /** - * 给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖 - * @param propertyName - * @param propertyValue - */ - function profileSet(propertyName, propertyValue, fn) { - sendProfile('$profile_set', propertyName, propertyValue, fn); - } - /** - * 设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile之前不存在,则初始值为0。 - * @param propertyName - * @param propertyValue - */ - function profileIncrement(propertyName, propertyValue, fn) { - sendProfile('$profile_increment', propertyName, propertyValue, fn); - } - /** - * 用户列表属性增加元素。 - * @param propertyName - * @param propertyValue - */ - function profileAppend(propertyName, propertyValue, fn) { - sendProfile('$profile_append', propertyName, propertyValue, fn); - } - /** - * 删除当前用户单个属性值 - * @param propertyName - */ - function profileUnset(propertyName, fn) { - var _a; - // 获取上报数据模块 - var res = fillData('$profile_unset'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - if (attrNameCheck(propertyName)) { - res.xcontext = assign({}, res.xcontext, (_a = {}, _a[propertyName] = '', _a)); - } else { - errorLog({ - code: 600010, - fn: 'profileUnset', - key: propertyName - }); - } - sendData(res, fn); - } - /** - * 删除当前用户所有属性值 - */ - function profileDelete(fn) { - // 获取上报数据模块 - var res = fillData('$profile_delete'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - sendData(res, fn); - } - - function startUp() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - // 获取上报数据模型 - var res = fillData('$startup'); - // 设置首次启动时间 - if (!core.ARKFRISTPROFILE) { - setCoreParam('ARKFRISTPROFILE', dateFormat(new Date(res.xwhen), 'yyyy-MM-dd hh:mm:ss.SSS')); - // 是否已发送首次用户属性,没有则发送 - if (config.autoProfile) { - profileSetOnce(); - } - } - if (!startUpTime.STARTUP) { - // 设置启动时间 - setStartUpTime(); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty()); - // 记录启动时间 - eventAttribute.startup.xwhen = res.xwhen; - sendData(res); - } - } - - function alias(aliasId, fn) { - // 验证id是否符合格式 - if (!lengthCheck(aliasId)) { - errorLog({ - code: 60005, - value: aliasId, - fn: 'alias' - }); - return false; - } - // 设置登录后id - setCoreParam('ARK_LOGINID', aliasId); - successLog({ - code: 20014 - }); - // 获取上报数据模块 - var res = fillData('$alias'); - // 删除掉不相关属性 - commonAttrs.forEach(function (o) { - if (res.xcontext[o]) { - delete res.xcontext[o]; - } - }); - // 是否设置自动采集 - if (config.autoProfile === true) { - sendData(res, fn); - profileSetOnce(); - } else { - sendData(res, fn); - } - } - - function userClick(event) { - if (!config.autoTrack) { - return; - } - var el = event.target || event.srcElement; - // 不做上报的页面路径 - var autoClickBlackList = config.autoClickBlackList; - if (autoClickBlackListCheck(autoClickBlackList, el)) { - return; - } - // 是否可以点击的页面元素 - if (!elementClickableCheck(el)) { - return; - } - // 获取用户自定义上报属性 - var configUserClickPro = config.userClickProperty; - var userClickPro = {}; - if (isObject(configUserClickPro)) { - for (var key in configUserClickPro) { - var item = configUserClickPro[key]; - if (isFunction(item)) { - userClickPro[key] = item.call(item, el); - } else { - userClickPro[key] = item; - } - } - } else if (isFunction(configUserClickPro)) { - userClickPro = configUserClickPro.call(configUserClickPro, el); - } - // ???属性 - var property = el.getAttribute('data-ark-click') || {}; - if (isString(property)) { - try { - property = JSON.parse(property); - } catch (e) {} - } - if (!isObject(property)) { - property = {}; - } - // 设置全埋点预制属性 - setUserClickAttrs(el); - // 获取上报数据模块 - var res = fillData('$user_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), userClickPro, property); - sendData(res); - } - - function webClick(event) { - var el = event.target || event.srcElement; - // 设置点击相关预制属性 - setUserClickAttrs(el); - // 设置热图相关属性 - setWebClickAttrs(event); - // 获取上报数据模块 - var res = fillData('$web_click'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - sendData(res); - } - - function webClick$1() { - // 获取上报数据模块 - var res = fillData('$webstay'); - // 合并通用属性 - res.xcontext = assign({}, res.xcontext); - eventAttribute.webstay.xwhen = res.xwhen; - sendData(res); - } - - function reset(fn) { - resetCore(); - if (config.autoProfile === true) { - profileSetOnce({ - '$reset_time': dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss.SSS') - }); - } - successLog({ - fn: '$reset', - code: 20005 - }); - fn && fn(); - } - - /** - * 获取预置属性 - * @returns object - */ - function getPresetProperties(fn) { - // 获取上报数据模块 - var res = fillData('$getPresetProperties'); - delete res.xcontext.$is_login; - successLog({ - code: 20010, - fn: 'getPresetProperties', - value: res.xcontext - }); - fn && fn(res.xcontext); - return res.xcontext; - } - - function track(eventName, eventAttrs, fn) { - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(eventName)) { - errorLog({ - code: 600025, - fn: 'track', - value: eventName - }); - return; - } - // 获取上报数据模块 - var res = fillData(eventName); - var trackAttrs = {}; - if (eventAttrs && !isFunction(eventAttrs)) { - trackAttrs = attrCheck(eventAttrs, eventName); - } - // 合并通用属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), trackAttrs); - // 回调函数 - var callback = fn ? fn : null; - if (isFunction(eventAttrs) && !fn) { - callback = eventAttrs; - } - sendData(res, callback); - } - - /** - * 唯一匿名ID标识设置 - * @param distinctId 自定义设备身份标识,取值长度 1 - 255字符, 支持类型:String - */ - function identify(distinctId, fn) { - if (lengthCheck(distinctId)) { - setAnonymousID(distinctId); - successLog({ - code: 20002, - value: distinctId, - fn: 'identify' - }); - fn && fn(); - // ea 触达 - globalWindow.AnalysysModal && globalWindow.AnalysysModal([{ xwhat: '$identify', xwho: distinctId }]); - } else { - errorLog({ - code: 60009, - fn: 'identify', - value: distinctId - }); - } - } - /** - * 获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id - * @returns - */ - function getDistinctId(fn) { - var id = getAnonymousID(); - fn && fn(id); - return id; - } - - /** - * 注册页面自动采集自定义属性 - */ - function pageProperty$1(properties) { - var methodName = '$pageProperty'; - var attrs = attrCheck(properties, methodName); - setPageProperty(attrs); - if (Object.keys(attrs).length) { - successLog({ - fn: methodName, - code: 20002, - value: properties - }); - } - } - - function pageClose() { - // 获取上报数据模块 - var res = fillData('page_close'); - // 过滤掉某些机型获取不到$url的pageclose - if (res.xcontext && !res.xcontext.$url) { - return; - } - function getHideTime() { - if (!eventAttribute.pageClose.hideStartTime) { - return eventAttribute.pageClose.hideTime; - } else { - return eventAttribute.pageClose.hideTime + (res.xwhen - eventAttribute.pageClose.hideStartTime); - } - } - var attrs = { - pagestaytime: res.xwhen - eventAttribute.pageview.xwhen - getHideTime() - }; - // 合并通用属性 // 绑定页面属性 - res.xcontext = assign({}, res.xcontext, getSuperProperty(), getPageProperty(), attrs); - // 删除页面属性 - delPageProperty(); - sendData(res); - eventAttribute.pageClose.hideStartTime = 0; - eventAttribute.pageClose.hideTime = 0; - } - // 触发pageclose - function triggerPageClose() { - if (config.autoPageViewDuration && eventAttribute.pageview.xwhen) { - pageClose(); - } - eventAttribute.pageview.prevPath = eventAttribute.pageview.path; - eventAttribute.pageview.path = document.location.href; - } - // 设置页面隐藏时间 - function setPageHideTime(hideFn, showFn) { - if ('onvisibilitychange' in document && config.autoPageViewDuration) { - document.addEventListener('visibilitychange', function () { - if (document.hidden) { - eventAttribute.pageClose.hideStartTime = +new Date(); - } else { - eventAttribute.pageClose.hideTime = eventAttribute.pageClose.hideTime + (+new Date() - eventAttribute.pageClose.hideStartTime); - eventAttribute.pageClose.hideStartTime = 0; - } - }); - } - } - - // 获取dom元素标签名称 - function getTagName(el) { - return el && el.tagName && el.tagName.toLowerCase() || ''; - } - // 返回dom元素父节点 - function getParentNode(el) { - return el.parentNode; - } - // 获取所有兄弟节点(包括自己) - function getbrotherNode(el) { - var parentNode = getParentNode(el); - return parentNode ? parentNode.children : null; - } - // 获取元素在同级中的下标 - function getEleIndex(el) { - var list = getbrotherNode(el); - if (list) { - for (var i = 0; i < list.length; i++) { - if (list[i] === el) { - return i; - } - } - } - return -1; - } - // 遍历节点树 - function eleForEach(el, fn) { - while (el) { - var isBreak = fn && fn(el); - // 返回break则推出循环 - if (isBreak === 'break') { - break; - } - el = el.parentNode; - } - } - - var visualMap = null; - var href = globalWindow.location.href; - // 上报可视化数据 - function visualClick(e) { - if (!visualMap) { - return false; - } - var pathList = []; - eleForEach(e.target || e.srcElement, function (el) { - pathList.push(el); - if (getTagName(el) === 'body') { - return 'break'; - } - }); - var max = pathList.length - 2; - function getPath(min) { - var path = ''; - var pathIndex = ''; - for (var i = max; i >= min; i--) { - var item = pathList[i]; - var tagName = getTagName(pathList[i]); - if (tagName) { - var str = tagName + (item.id ? "#" + item.id : ''); - path += str; - pathIndex += str; - if (tagName !== 'html' && tagName !== 'body' && !item.id) { - pathIndex += "" + getEleIndex(item); - } - if (tagName === 'button') { - break; - } - } - } - return { - path: path, pathIndex: pathIndex - }; - } - // 获取dom链条组合 - var pathArr = []; - for (var i = 0; i < max; i++) { - var _a = getPath(i), - path = _a.path, - pathIndex = _a.pathIndex; - pathArr.push(path, pathIndex); - } - // 匹配链条对应的可视化埋点 - var itemMap = {}; - pathArr.forEach(function (o) { - var item = visualMap[o]; - if (item && !itemMap[item.appEventId]) { - itemMap[item.appEventId] = item; - } - }); - var _loop_1 = function (key) { - var attrs = {}; - itemMap[key].properties.forEach(function (o) { - attrs[o.key] = o.value; - }); - track(key, attrs); - }; - // 上报可视化埋点数据 - for (var key in itemMap) { - _loop_1(key); - } - } - // 获取可视化埋点数据 - function getVisualList() { - var visitorConfigURL = config.visitorConfigURL; - if (visitorConfigURL && href.indexOf('arkheatmap=true') === -1 && href.indexOf('visual=true') === -1) { - ajax({ - url: visitorConfigURL + 'configure', - data: { - appkey: config.appkey, - lib: 'Js', - url: window.location.href - }, - timeout: config.getDataTimeout - }, function (res) { - var list = res.data.data; - if (list && list.length) { - visualMap = {}; - list.forEach(function (o) { - var path = ''; - for (var i = o.new_path.length - 3; i >= 0; i--) { - var item = o.new_path[i]; - var tagName = item.tagName; - var str = tagName + (item.id ? "#" + item.id : '') + (item.row !== undefined && !item.id ? item.row : ''); - path += str; - } - visualMap[path] = o; - }); - } else { - visualMap = null; - } - }); - } - } - // 动态加载可视化交互文件 - function loadVisual() { - // 设置可视化埋点 - if (href.indexOf('visual=true') > -1 && config.visitorConfigURL) { - loadJs((config.SDKFileDirectory || '/sdk/') + "AnalysysAgent_JS_SDK_VISUAL.min.js"); - } - } - - var scrollTime = null; - // 是否采集页面属性 - function triggerPageView() { - triggerPageClose(); - if (config.auto) { - ready(pageView)(); - } else { - eventAttribute.webstay.xwhen = 0; - eventAttribute.pageview.xwhen = +new Date(); - } - // 获取可视化数据 - getVisualList(); - } - /** - * sdk自动触发器 - */ - function autoTrigger() { - startUp(); - triggerPageView(); - // 监听路径变化 - if (config.hash) { - pathChange(function () { - var path = eventAttribute.pageview.path; - if (path !== document.location.href) { - triggerPageView(); - } - }); - } - // 退出页面监听 - var closeEventName = 'onpageshow' in globalWindow ? 'pagehide' : 'beforeunload'; - globalWindow.addEventListener(closeEventName, function () { - // 设置页面卸载状态 - eventAttribute.isUnload = true; - triggerPageClose(); - }); - var deviceType = getDeviceType(); - // 全埋点 - if (config.autoTrack || config.visitorConfigURL) { - var eventName = deviceType === 'desktop' ? 'mousedown' : 'touchstart'; - document.addEventListener(eventName, function (e) { - userClick(e); - visualClick(e); - }); - } - var href = globalWindow.location.href; - var SDKFileDirectory = config.SDKFileDirectory || '/sdk/'; - // 热图 - if (config.autoHeatmap) { - if (href.indexOf('arkheatmap=true') === -1) { - if (href.indexOf('visual=true') === -1) { - // 不是是在热图模式和可视化模式下上报热图数据 - var eventName = deviceType === 'desktop' ? 'click' : 'touchstart'; - document.addEventListener(eventName, webClick); - // 滚动行为 - document.addEventListener('scroll', function () { - clearTimeout(scrollTime); - scrollTime = setTimeout(function () { - webClick$1(); - }, 1000); - }); - } - } else { - // 动态加载热图显示文件 - loadJs(SDKFileDirectory + "AnalysysAgent_JS_SDK_HEATMAP.min.js"); - } - } - // 动态加载可视化交互文件 - loadVisual(); - // 记录页面隐藏时间 - setPageHideTime(); - } - - function nameListCheck(value) { - if (isString(value)) { - return true; - } else if (isFunction(value)) { - return true; - } else if (isArray(value)) { - for (var i = 0; i < value.length; i++) { - var item = value[i]; - if (!isString(item) && !isFunction(item)) { - return false; - } - } - return true; - } - } - var configRule = { - appkey: { - verify: [lengthCheck] - }, - uploadURL: { - verify: [lengthCheck] - }, - debugMode: { - verify: [isNumber] - }, - name: { - verify: [isString] - }, - auto: { - verify: [isBoolean] - }, - autoProfile: { - verify: [isBoolean] - }, - encryptType: { - verify: [isNumber] - }, - hash: { - verify: [isBoolean] - }, - allowTimeCheck: { - verify: [isBoolean] - }, - maxDiffTimeInterval: { - verify: [isNumber, function (value) { - if (value <= 0) { - return false; - } - return true; - }] - }, - autoTrack: { - verify: [isBoolean] - }, - autoCompleteURL: { - verify: [isBoolean] - }, - autoPageViewDuration: { - verify: [isBoolean] - }, - sendDataTimeout: { - verify: [isNumber] - }, - sendType: { - verify: [isString] - }, - autoClickBlackList: { - verify: [nameListCheck] - }, - autoHeatmap: { - verify: [isBoolean] - }, - SDKFileDirectory: { - verify: [isString] - }, - visitorConfigURL: { - verify: [isString] - }, - crossSubdomain: { - verify: [isBoolean] - }, - pageProperty: { - verify: [isObject] - }, - pageViewBlackList: { - verify: [nameListCheck] - }, - userClickProperty: { - verify: [isObject] - } - }; - var config = optionsDefault(); - // 是否初始化参数配置 - var isInitConfig = false; - function setConfig(options, fn) { - var optionArr = Object.keys(options); - optionArr.forEach(function (o) { - var rule = configRule[o]; - if (rule && rule.verify.length) { - var value = options[o]; - var isOk = true; - for (var i = 0; i < rule.verify.length; i++) { - var fn_1 = rule.verify[i]; - if (!fn_1(value)) { - isOk = false; - break; - } - } - if (!isOk) { - errorLog({ - key: o, - code: 60002, - value: value - }, true); - } else { - if (o === 'SDKFileDirectory' || o === 'visitorConfigURL') { - if (value && value[value.length - 1] !== '/') { - value += '/'; - } - } - config[o] = value; - } - } - }); - isInitConfig = true; - coreInit(); - successLog({ - code: 20007 - }); - // 自动触发生命周期相关钩子 - autoTrigger(); - getServerTime(function () { - implementAallbackArr(); - }); - implementAallbackArr(); - fn && fn(config); - } - - /** - * 小程序标准版sdk - */ - webViewHybridInit(); - var ArkJsSdk = /** @class */function () { - function ArkJsSdk() { - this.isInit = false; - this.config = optionsDefault(); - this.pageView = ready(pageView); - this.registerSuperProperty = ready(registerSuperProperty, true); - this.registerSuperProperties = ready(registerSuperProperties, true); - this.getSuperProperty = ready(getSuperProperty$1); - this.getSuperProperties = getSuperProperties; - this.unRegisterSuperProperty = unRegisterSuperProperty; - this.clearSuperProperties = clearSuperProperties; - this.profileSetOnce = profileSetOnce; - this.profileSet = profileSet; - this.profileAppend = profileAppend; - this.profileIncrement = profileIncrement; - this.profileDelete = profileDelete; - this.profileUnset = profileUnset; - this.reset = reset; - this.track = ready(track); - this.alias = ready(alias); - this.getPresetProperties = getPresetProperties; - this.identify = identify; - this.getDistinctId = getDistinctId; - this.pageProperty = pageProperty$1; - } - // 初始化传入配置 - ArkJsSdk.prototype.init = function (config) { - var _this = this; - setConfig(config, function (o) { - _this.config = o; - if (_this.config.name) { - globalWindow[_this.config.name] = globalWindow.AnalysysAgent; - } - _this.isInit = true; - }); - }; - return ArkJsSdk; - }(); - alert('d'); - var ArkSdk = new ArkJsSdk(); - globalWindow.AnalysysAgent = ArkSdk; - - return ArkSdk; - -}))); diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.css b/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.css deleted file mode 100644 index 9881669..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.css +++ /dev/null @@ -1,455 +0,0 @@ -.ark-heatmap-location { - position: absolute !important; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 10000; } - -.ark-headmap-body-location-none .ark-heatmap-location { - display: none; } - -.ark-headmap-loading, .ark-headmap-nodata { - position: fixed; - top: 0; - right: 0; - width: 100%; - height: 100%; - background-color: rgba(255, 255, 255, 0.5); - text-align: center; - z-index: 10000; - display: none; } - .ark-headmap-loading .ark-loading-box, .ark-headmap-nodata .ark-loading-box { - width: 260px; - height: 182px; - margin: 0 auto; - top: 50%; - margin-top: -91px; - position: relative; - background-color: rgba(0, 0, 0, 0.8); - border-radius: 4px; } - .ark-headmap-loading .ark-loading-box .ark-loading-img, .ark-headmap-nodata .ark-loading-box .ark-loading-img { - width: 64px; - height: 64px; - margin: 0 auto; - top: 40px; - position: relative; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAAAXNSR0IArs4c6QAACXNJREFUaAXtG1tsVMd1Hte7XnsNBnv9XD9rC4iJaCAqRFBhKlVKmzRVpQS1UtWqkWpURYnyABPSj25/oOYRChFSo0qVWqn9AFIVJelnsUNThSiOmghDSI29Xq+N7TVg/N69OzM9Y9jttblz72xiO+vKV1rdmfOac87MnHvmsRgt81NxfLDY5CwEze5GSDQKgboRRu9R7AkNHygbWWZ1oOllfEqP9W/nAr0jhChe2CxG+BbG5PsjrZXvL8QtZX3ZHPDY68LXnezvgh6vUxuEI7k5aGP05aoZNc3iYsjiilNL6xUDO5yNl7yiOiHYI2opi49ZNgcIxhp11BfcCOrQLRaNkamgyrZoEHrpOYTxTujRUoT4IHjxXVGQ97vYcyWTKnkC0VmgVaHTcCwES1cUBYghuPLXN32G1/QyQYmX5CVJ3q3Z7hca4woWJTijEVDeFnk0gVi7QOinoEQDDNkChPAGjvDLYmLmHxUnBqqULVHcrcRZEJTwsKX6QLE5dNEoOz4cSPiShdME++KUe8fxZP7YjLco+Hr/eumcB5gcANoOKG6LVJgC/Rl6PU8hL5hg7A0FDu2uqrgMkf4DFX4OjtFHu16p/reKRhp3LX/TesYTtiN31hS5VSej61T8dnBtB0Bv773X43Zi7sO4+EZpW+8OO4pzezGjHuNH8OHttMODcz4hyPvDcxgrp4Ac9irjUzKlE7a9KXJSdbe3rSftmGBc7YSh7/owjDcDkW1PD71UHn7mrNje3hv5ASJ4Kxa4RhAUQRx/3Fxb+VfpJKcG5JxPaKQufWOjuSDHdJKVwmk7AIZfAuZ7ik/5JoI4yrxv5HkQIH/p51y6pC5wL8EI5uFiPhlMAWI7dBcqQxHvWAhbrPqsmavVq55C03EkWfXRdoDfy/6AMVJ+5qRQjHHHzYO116wNLGZ588wV1wyReL1soKXclS6ll7YDwi/VjSGBnoVJMJVitr4B/jHy5/7cClvscntoT9Jfwm47yV1DSsagI7TnifukXtBa4GhvmUCkBZrYBXFhDSxgwvDlvVCzduR8575HtYboApEZV5vOCs/YyEBBfIp7U8xeRuJlRUPjy6VDqt2v9C3zAviqUPn+ShVZbXwFeyA9dGpDvblTPvIkJmQzF9gPcSRiYPPCzf31fSvYPhQKhcjb5U/S2XXbcOBqO7/4q2bI1f4XJOccUHG8d6PJ6G9hJi3YqcEMI/6XWGvNqZXmBBkXSk+NlKBZs4wLlk7ODIxm81Ay2vPq1+5Km3Dl4WhR3OBvQdmvMpIgcnqkNfgnFT4b4RW/uQGbK0ZApRus6Hoih2ruENPgPwMipfFSgMBin5wiKmHZBt/Q9lmBk/FS31nMqkMhQQhkDA+7GQDDyTtd4NnqRpct+Kmc/DVuunBBjXMPXTUI5K9FbsQSL8ykdtaoI28paShjHh35gak8GAECdekQU8GjOnTZQGPGk0kdPaITSQHrS/GOGzGku5eHDtWF3eiyBZ8bWD/uqgvNET9+vsEksdbqS7Ab80cHhkEvFYcd8FmHutGybtxDDMeVK8XT0RDGfG5ex1qr3oBYsB8jkt64hFRhBkbHeRD0LBxUDGSdlQ4KyURnZ9373RShOwvJMOWMcBYdPtAwdww3lwhZiSreHMxj48Q/tL80Zs2YrDQrqdx8URgoHDYmEl5SEi9n259Hpuz5lWTDqq6rHlj1wKoHlswD874CgTNdfjrhr0kaKJcYLDryYv3wkrWcJYLnHFARGswzfeYzcO7xPUiN0xuN8rjKoMnfr9RNkeojfeumc1A9ZahQcEwR5pOcod7RX9beTPkfNhXP0vbwjhCs+L6eAlrfkAxNEpL7Gtzf6bXCs71ceqSvHnZzmuz0pJyPDB2q/VDmOaSj77GnVMZLZoGwn/H4L+wEZSus4vj1YpXxUmdGSEn5icgmWSacs12y4PJsChwdKXOhyRp0MuF1vY3COKmVox9Wg7hSR3NixJXbSzr8y0qDSYFbe4Jz+q/uhwvlhsioG/EcnuU4rq60ZCwTkYCLRjpN+fyGSZBgrqe+EAhjKykIUso1OlXw4O3oNEH+/HMwDWJqj8HKCRun1fjswxBq9iDoWifNPIbnhjxsJfJmFyGJVyHef76QAT4TowTTo7HWoPLezkKebKgP7t8wajB+RekEjG+2TJbP2TsvEyw9FtkMn71GAPo4M6Ml9TMfdO1tgpshK/MJhLr8yJvfCNdwCqlMhAwywQwWib1YM/T/sNexMntlVess88C8GKCjW3lbeFMS0W9DjG1AGC4nYDxMMf5ncE3lpc59eFluiNSevFM4Hb/7EKdoHWzewmVZElvLfJ9dPxiY0LHBSpORA4qPRZ9AXDxlFZAqw/Zyd6AueKprL17SoFlyIrqFM7Y91W7qDesaBq54D3a4/5OC6by1j7tKT/bVq4yXDcE2a8NwOPoTnUa/KA3822SjnfFSHpyGU4H4ntJjQyWZyNd2AI/j77gKFmJbw+lbrgeTrnJsCOR5f0IkXA9ogeoRG3YlSNsBkFRUKKWkEZjcnZ2pT1cXsRA8M7Aezukdj/Flc+CnYCbNai0a7gnEWs6ihDrGALkEvXRjx1aYsLWQghdBGL1FBen7Zl2w0/GusDzt09AWFkJwIKT/aBklxUG0veImFiJqgvloREUnt6g6ena0JJF4AhL1Jo5EGYSupiTn3+3o6W+pPHxNeVTv889MgsNcT30JFg7rmgc103aAF4mLcFXW+R8ZFHeo/jUie34ao6e5EKUPqgFBFOBxkve0vPdnh5f/BoFV6XU7nBXGiaF13J/i0XZA/8HqwRxBzsheTjFb37D4+qS6YOiCFWYtX+rZvhFyB+fNF4HKO/qitvt4Utaa3MRHhBDlUhfuMHw6+krwc2u7buWM8gApTEb58Zmpb3FC4LPI8+F6/AgsNi67rRgDR3ofhyu2tn+msCoJ/xn6MPZa7d+tMGu5OSSMK/7IFogbG5jgEBQJJ4Ldhqn/aexQVfp028rjVNYIK/PZu18okuHob/Oh7jXIGKnzCv2eDEKd/2/QHpqLA3ITp1Oe/DZ3IB4KffHT3owd4G6qPQUE0UHHHYr7bIwL7bsI7Xtwst2+OW2odgzQlqggXJtvXoUg+sCFhfnk+K4/zjMKYvP5M68tmwNkFPfgxFsQxKbs1CSYTHs89Hw4VDdrh18qWMZB8MsqIm+gmHfYbli81MCUKIKpcRuuavURfLtj+MAWW+d82Tad+P8LufZiufSFSrMAAAAASUVORK5CYII=) no-repeat; - background-size: 100% 100%; - animation: ark-around linear 2s infinite; } - .ark-headmap-loading .ark-loading-box .ark-loading-text, .ark-headmap-nodata .ark-loading-box .ark-loading-text { - padding-top: 65px; - color: #fff; - font-size: 14px; } - .ark-headmap-loading .ark-nodata-box, .ark-headmap-nodata .ark-nodata-box { - width: 280px; - height: 200px; - margin: 0 auto; - top: 50%; - margin-top: -100px; - position: relative; } - .ark-headmap-loading .ark-nodata-box .ark-nodata-img, .ark-headmap-nodata .ark-nodata-box .ark-nodata-img { - width: 110px; - height: 72px; - margin: 0 auto; - top: 32px; - position: relative; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABICAYAAAAXrsDQAAAFu0lEQVR42u2dXWgcVRTHo4IP6oM+iGC0rRalKoo09UHFvgiKiIgPYqX6oCL4IErrmw/2pfWl9UGwIJiIgqJVm1oFsQht+pHZzSaZOx872bl3dvYr2c2mNgnWoFJr13uStJu5u7M7s7szO82egT8M87m5vznnnnvumUlfHy5X93JGNrdJxMyPyvTiqGxWUK2IXoQ2hLYME9p/2PCdEbRlKPBWLA0bvMPw8oGDQ/cYjNsMARw2dBBCcAgOwSE4VDTAFQq/347qnBAcgkNwCA6F4BAcgkNwKASH4BAcgkNwCA6F4AJSJrO4MU6sTyRCyyBYh20ILuICUGLyF7YhuIgLrKy2rICWERyC611wx09rA18cOXVkaHikDIJ12IauMsLgANDg4ZGFwR9OVBzi2zoBD4OTgATWVQNtVbAPhwMRBQeu0Q0c7ENwCA7BoatEcIEHJwjuKh0OhK2EZr8WI+y35aEHoTbXj3FiPo8D8IjKsGbvl2Q26f4SCD1kGGdvQnARkl1a2CARU/LwIsi3CC5KiWyVfey5wlmlOxBcM0uwz94zplkfSQrTuUUsLYuvwzbY14l7aKn8gCTTvxxuUaGnNFbYLhu5Z7iLtASXmTGMyvUIzkUThvWiJJvTrn0O3wfHtHufmEIPCddeLBTmNl/eT1K5x/i9Lqw9hp+zG8G5QSP0UvO3RumlduDJhv0kv4bjFewJzdpdB+6g8LbqvKblb1nX4L4/ltg5NHyyCIJ1L+6xkaXVs7xW3SYHMOK4HqHmzMz8HeJxVn72Ae5O/xCs7sC6BgfAqimwk8Vmx0P/5fd1KDjHt7UlszvE60zqmVdcf5fO9gqQ/4mR7CYEd9kKFJb0/aI9D1j8/Kbp6XP94n34oPt0o3NyufJd3K3OCC7za3SVVfe11MIXEpZ8ZUdU+12xr1RShaean5d+RzwvrqUHMDgJARzLz93NG7wo9FeHfViq7nSZ5nEEt+Iq9SBdZUK1PhT7qqQ9+8jaYyY1eyfABcG643wl/VLNbyDs2a6A61Z5QNjByUp06LTouGodrFOgVFzjDmv65RgxTwjwk5VK5brQwXWrICfs4UBcYZ8LLnaB0tKWelM6a+Vl/Bcj9M3QwXWrBC7MAThkQMQvMI2p1h63ubhG4FYfgm+E40qqWr6xp8EFkfLi1nXMeQ2Wd+sOvIBTp3Jba3KcMv2gZ12lS5I52U6SeTKZeU78+yZ09laj2e9m4OrOKhDzz7ieua0ng5MgxPsf1elNmNysbMELuJQ9cy/ff07wBJ/ifFwHNK5n3qhJbU3lXugEuOUoWKXv13ysVKNbEFwbKhbn7xQH2zyo+NVLoZBXcKv3SAvnHEVwbVmbJViD+a9KC090EpybVY9qbDuCa0HQ/0gKPe8MuOiXXkvz/IBbjcwTQlSe4IPyaxCc34BEpQfFfKZuTj8UFLh6kWvT+hQEV3eMdcFpbWy/j3Ftw5RXgzKIn33VpyA4MfxnR2uTCdU6kqbW0yDJ3Cw7U6c+ZReC815H4kiXJZT0e6HNbshsSKxPISR7swu4VNlgMw8jOGg4c9xLHUlQWp6BIM6giMPb7/Z/B76DmohehzapZ2vmyviQ4FXf12nRVVYH5dY+cc5vdCqzsRacQvv5AXMAr1ctb3l2mtCc0LedaTHp3lJw0miWfZSYX9W3Og4PLA/cJn4I+0odydPdAOdW1xJTra19uFQXGOjyh5YJ0dxwyy63TVfpVknmORXWK8uYZj3arI4kCn0uzJq7Rpi9uEiK9bpQRvBLdKJc50sjY7q9DYmtLlDv4XST7KcIfRnJck7gWpuR2BVw5uPinNi4ln47m53d1C1gjJXui6vWAXF2YqJUugGJVYOTa/mTbUQ+2iX0M6QlBii874AnOrrQzPMThr0BSdULUmT2Mn+qFyMILi9p9oNIqGGESfvBJUFjdfc/WdK/eUQ5xS1tryxbtyKZdbL8D1VmQJH/LyQBAAAAAElFTkSuQmCC) no-repeat; - background-size: 100% 100%; } - .ark-headmap-loading .ark-nodata-box .ark-nodata-text, .ark-headmap-nodata .ark-nodata-box .ark-nodata-text { - padding-top: 65px; - color: #fff; - font-size: 14px; } - -.ark-headmap-nodata { - background-color: rgba(0, 0, 0, 0.8); } - -@keyframes ark-around { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); } } - -.ark-heat-click-element { - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 100%; - background-color: #ff0000; - color: #fff; - text-align: center; - font-size: 12px; - z-index: 10000; - line-height: 22px; } - .ark-heat-click-element .ark-heat-click-element-text { - display: block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - position: absolute; - width: 100%; - top: 50%; - margin-top: -11px; - text-align: center; } - .ark-heat-click-element:hover .ark-heat-click-element-tips { - display: block; } - .ark-heat-click-element .ark-heat-click-element-tips { - position: absolute; - background-color: #252d39; - font-size: 12px; - display: none; - top: 100%; - top: calc(100% + 5px); - font-size: 14px; - padding: 10px 0; - border-radius: 4px; - left: 50%; - transform: translate(-50%, 0); - white-space: nowrap; } - .ark-heat-click-element .ark-heat-click-element-tips::after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - top: 5px; - left: 50%; - margin-top: -10px; - border-width: 0 7px 5px; - border-bottom-color: #252d39; - margin-left: -7px; } - .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent { - display: inline-block; - text-align: right; - padding: 0 10px; } - .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num label, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent label { - display: block; - color: #9cacbf; } - -.ark-headmap-body-element-none .ark-heat-click-element { - display: none; } - -.ark-heatmap-head { - position: fixed; - left: 0; - top: 0; - background-color: rgba(0, 0, 0, 0.8); - z-index: 10001; - width: 100%; - height: 64px; - font-size: 16px; - color: #9cacbf; - transition: all 0.3s; } - .ark-heatmap-head .ark-icon { - display: inline-block; - background-size: 100% 100%; - width: 14px; - height: 14px; - margin-right: 10px; } - .ark-heatmap-head .ark-icon.ark-icon-point { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQFJREFUOBGlUjEKwlAMTVR0cRGsQ1HP4QFcPIfgZl28gINDi4t2EzyHV/AcrXQRdNBFUWPTNiWUFsV+KC8vfXk/PwSg5MFf68110H/cnzskHBDSod6ojYOZ6VXEoOP4i7btnRklp5GLgWBIQE3GiIeC1OBNNA15K0FdG8V8s04KTw0qiG4ouCSotVHMbeuk8NIzyDUwVv6IXrDlG7EKk9O8t9e36zh9gk7GxdQFoK4Y6f86zjXQgm9xrgG3HTZ/5C+Oi21yZ5CVFy0R66IODMdbGrZ/ZcwWMy9aIv4XP4HQijcMLU5mjyyN5DVPZkAuAt4AaSMijbI0ktO89AzE9G/8AFToh10DAaI4AAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-ele { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQZJREFUOBGtUsEOwUAQnZn4AKTc9A8dERJt1IkmDuoLy0ka9QW7ZpZlrUUqNml23ryZ2bdvC/CP1V8dsmhd1lFezkPzJC98f71f+DxKQkjQ0PbJAK6rSdx18y0DEDY8ICPE7DgepG6BxHKy0jpBotzn7jhalfoOAsE7ngK1H1O+H9crfGx5kEaFumIFeshR2kgBG4hAkMiIJz+MLPYg9ExSLHk53T6z60ezZ0Q4V+O4IwOMGh5urkCaCmBS5FlCdvux3BnX1gS4FUVflysxVOzyLyb28sNUmux9/QE2b3fjgVvE00+MO24uGN/8ePkPCGinUA3Zk001ipd+syjUSo3Yj8LnfsIXR3J0GEi1vfgAAAAASUVORK5CYII=) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-dep { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAA10lEQVQ4y63SsU3DQBjF8Z9RBqBxaYkN7JoGMwEMgBRGSOWatK7cUgEbsEGSDZKGOpJLN9ngaA5EEfsima+6+77TvXf/e1kIwZy6MrMWkLf9HuXImcPQFFXKQTkhUiYdpCpv+7OghqbIsrkQFxeoV+hw96f9gdXQFKcshDAG8YBnbOP+HV+4xTLO6ymIJV7iusYer/HC+zhfpXLwEJVPeMMa3dAUW+xQT0LM2/4zqt/gMbKocY0N1ikHP084osJT5LKJDLoxiL/pu/QXwrmQzMrBWPr+PYnfX8xTYCBLOCIAAAAASUVORK5CYII=) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-element { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMlJREFUOBFjYBhowAhywP///9uBlD4QhzAyMn4D8s2AbGEgxgdeAdWeZQQqBhnyEohFgdgAKHgRKHYKyJYAYnzgPlCtPVgBUIMhEPvjU01bOaDtLEDMT44tsEA8B9SsDsQaQH89BhrWBGSLETDwCVBtCwtU0T8g/R+KQUJ/oBjExgVAaiAAaCMzEPPC+PSngbabAHEwOTbDEtIroGYRIDYEBswFoGGgQCUmIVmzADUA1f+fAdQASso3gRgEUoFYCMzCTbzGLUVPGQAuSE4Qo6rhyQAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-content { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALRJREFUOBFjYKAQMML0////XxfI9gdiFpgYDvoPUHwTIyPjJRR5oAE3gZhY8ACmmQnGANLXkNiEmBcwFACt5gTiHUQ44TRQDS+GASABoAQbEK/HY8hVoJwwVs0wQaACFiBeisWQe0AxKZg6vDRQIRMQL0Ay5BWQrYRXE7okUIMPkgEH0OVhfORYgImRRA9uA44B/XKXkH9wegGY1t8BNTsD8WMg/k/IIJzyoOgDYk+cCiiVAABBtddgMn4BogAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-set { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOBG1kz9LglEUh71WaGM55OrSB3DtE1RLFg3qUpOOgbhE3yHdCmqJPkIE0WpETurWpksQbTWEUb09v/vea68IKoIHHs655/zuee+/NxabhwVBsAJd8NYjWJ34LUSLEuE33cwivuDibVezmpFmiHLwDQ/wBG9eRPwKTVDtB/Z8Le66LuPrcAsvsAA58LZLYEC1G6jRRHNCY1CBD0hHcgeMHx2HkfwauXeoKmdXgE9CAnZAZ5DHXUIH2nBBroCXSeP1NqEJBk5BloI7uA6rtuEV43vQ7cjqoC0NVuC1s3m6HcMXlNUBnwed9jmcudhugbgEfTgZfI3BzIdo90EDXckztKAPGTgyxjTwWtEGrgY9WIIsrFP/xIeGSA9Jy570kH7R7Pt5Q57CuKe8JTGa/wc0NDsyQKTr6oK36X6mSI+pwz+2s2sE4j6K/AAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-refresh { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQ1JREFUOBG1ks8KAVEUxmckFijkAWztZqMsLJQsPIc8hLLyIKws5Dk8AClZsLFkIRZIGb8zXN07l/wpt36dc77vu3eaO+M4/1y+76cg8dUz2BCHDqxgDXNYQuvtQYQKMIMu5NUG+iR4an5aCcRgAo2ngbuIX4G0lUFsw9AyNAE/BzvYQlWzHAdhCjVDDA34JRjACDKGjXCwRCNxG8ikYaOsiGqoe7ho86vWxXh82uAATkwijqFPX361864XqQsjwya5WbkYuaCcYYYG/CG0Q3JwifJuFcvQBPwGyKeOabLdEvBAXitY9HmQn0t+soLSpUb1Qevr9E3CZ2oWjtADz3XdE/WzxQEJSH2W/jF1BQYvzfgwrEoEAAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-help { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAWdJREFUOBGNk79Kw1AUhxuX0qGLjo5SXEyXgiK1dFBcXNRdV7fiWwgurVudVPoAxReQPIOTUAc76SAUg7goxO8XcpPjjUovfLnn/M6f5ObeW6l4I0mSEPpwD3GGbGmhl164BKswhE8YwSGo2RrswxUoppxqUYklASJ4hM6PoHGItWECyi2a4KiriusuH3s90y+ZN41ex1fuMNUwmqBPy9+M3YUPuIFzeIdd06SDr5ow4DEgsBgEwbFJuMWeovWkkXPG1MTfk6+BNmJ6XeCxA2Ow4w7nwggz7C/jy1TNtjppq/7cHmIteIN8CapWDcT/NiBhGV7gVEV2oKUNtIQpNGzQ2CfYEWvXf/LHCsKT+4lLJB35GbxlFS0m9vxL7BptpiWUttElE3uALee7Ga0N6TamGk7pICmAvgE1V5hpOkgT1eQ6zrxHWQdIpzBSTd4g6+xfpgOS9KeFbF0wfXb5MtlOJKhg7uv8DahvoK6C+lwsAAAAAElFTkSuQmCC) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-down { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALpJREFUOBFjYBi+4P///1xAvAGIY0n2JVCTIBAfBeJNQPwEiIuINgSoWBqIrwDxJCBmAmI5IL4GxB0EDQEqUgPi+0BciawYyAe56BAQzwViZmQ5OBsoYQLEz4A4ESQIpFHCAMhnB+JVQAwKFw64RhgDKukN1Yw1DIBqGIG4D4jDYfowaKAkLAwmA9lkhcEDoMYqZJOBfKLD4DlQcRKyZhgbKE4wDHYBFfnCNGCjgfK4wwAoyYRN0+AXAwDWDeuTwsPrDwAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-icon.ark-icon-crowd { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAATtJREFUOBHVUbFKA0EQnd0cKCh+gaKVX5BKbSwsRBIJyGGpgViJiLGxS2Vjgm0IKFHs0iWCoHX+wyJ/kEbU2+fMrnts7oK2OrA3b2bnzc2bJfr3prIKStX6NkAdyStFR4Pb1lO2JoyjMBBsycCixaSk0ZLg8kF9S3y/23oR70178JMvVc9PDeFZjuCwNtdAxubZR3Is5moYFD0pxJLLSfjWbMf2pCii6+ST1iUuMPZ58ekSK7Wz1eRDnYCwo7S+k0sYcwjSx4/d5kDiaWYbsK4YMPcEmkmLWEKB1B7rXuPNxtzoUmmscE3M/+3NLs+3e43Gu5MANCfI3EVrvW9McsGvsuuamgcyNAdWwbNtvL2ONzlfsUsEMKFZCP2bqyGTy45svwuO7DIs1TbOvUJAEJjuKJP/7W5K+Z9NfQHcMWh6c1UmgAAAAABJRU5ErkJggg==) no-repeat; } - .ark-heatmap-head .ark-heatmap-switch { - display: inline-block; - width: 36px; - height: 18px; - border-radius: 9px; - position: relative; - background-color: #4c6072; - cursor: pointer; - vertical-align: sub; - margin-right: 5px; } - .ark-heatmap-head .ark-heatmap-switch.ark-switch-act { - background-color: #0095e3; } - .ark-heatmap-head .ark-heatmap-switch.ark-switch-act::before { - left: 20px; } - .ark-heatmap-head .ark-heatmap-switch::before { - content: ''; - position: absolute; - top: 2px; - left: 2px; - width: 14px; - height: 14px; - display: inline-block; - border-radius: 20px; - background-color: #fff; - z-index: 20; - -webkit-transition: all 0.5s; - transition: all 0.5s; } - .ark-heatmap-head .ark-head-hide { - display: none; - position: absolute; - width: 64px; - height: 32px; - line-height: 32px; - right: 56px; - top: 64px; - background-color: rgba(20, 137, 226, 0.8); - text-align: center; - cursor: pointer; } - .ark-heatmap-head .ark-head-hide i { - cursor: pointer; - margin-right: 0; - transform: rotate(180deg); } - -.ark-heatmap-head-menu { - float: left; - margin-left: 20px; } - -.ark-heatmap-head-menu-item { - float: left; - line-height: 64px; - text-align: center; - margin-right: 10px; - cursor: pointer; - position: relative; } - .ark-heatmap-head-menu-item:hover, .ark-heatmap-head-menu-item.ark-active { - color: #1489e2; } - .ark-heatmap-head-menu-item:hover::after, .ark-heatmap-head-menu-item.ark-active::after { - content: ''; - height: 2px; - position: absolute; - left: 0; - bottom: 0; - background-color: #1489e2; - width: 100%; } - @media (max-width: 880px) { - .ark-heatmap-head-menu-item i { - margin-left: 10px; } - .ark-heatmap-head-menu-item span { - display: none; } } - -.ark-heatmap-head-handle { - float: right; - margin-right: 20px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item { - float: left; - padding: 0 10px; - margin-right: 10px; - position: relative; - line-height: 64px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-handle-hover { - color: #fff; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-tips { - display: inline-block; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-handle-hover { - cursor: pointer; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i { - cursor: pointer; - width: 16px; - height: 16px; - float: left; - margin-top: 23px; - opacity: .8; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i:hover { - opacity: 1; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box .ark-pop-tips { - top: 50px; - left: -5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips { - display: none; - position: absolute; - background-color: #fff; - padding: 10px; - box-shadow: 2px 0px 4px #252d3933; - border: 1px solid #D8E0E9; - border-radius: 4px; - top: 64px; - left: -100px; - line-height: 12px; - font-size: 12px; - color: #333; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box::after, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips::after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - top: 5px; - left: 50%; - margin-top: -10px; - border-width: 0 7px 5px; - border-bottom-color: #fff; - margin-left: -7px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box { - padding: 20px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list { - width: 500px; - left: -200px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-hd { - font-size: 16px; - color: #252d39; - padding-bottom: 5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - text-align: center; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd td { - height: 40px; - line-height: 40px; - font-size: 14px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd thead td { - border-bottom: 2px solid #e4eaf1; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody { - max-height: 400px; - overflow-y: auto; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody td { - border-bottom: 1px solid #e4eaf1; - color: #4c6072; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody .ark-element-content { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding: 0 5px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition { - width: 300px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-title { - color: #6d859e; - font-size: 13px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd { - padding: 17px 0; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd i { - margin-right: 5px; - vertical-align: bottom; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs { - position: relative; - margin-top: 20px; - padding-top: 10px; - padding-left: 20px; - border-left: solid #e4eaf1 1px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-item { - padding-bottom: 15px; - color: #354359; - font-size: 12px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-relation { - position: absolute; - width: 20px; - height: 20px; - border: solid 1px #c5ced8; - border-radius: 10px; - font-size: 12px; - color: #9cacbf; - text-align: center; - line-height: 20px; - left: -10px; - top: 50%; - margin-top: -10px; - background-color: #fff; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set { - width: 280px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item { - position: relative; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-name { - width: 120px; - font-size: 14px; - position: absolute; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content { - padding-left: 120px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box { - position: relative; - height: 4px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-left-track { - position: absolute; - background-color: #9cacbf; - height: 100%; - left: 0; - width: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-left-trigger { - left: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-middle-track { - position: absolute; - height: 100%; - left: 0px; - background: linear-gradient(to right, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%); - right: 0px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-right-track { - position: absolute; - height: 100%; - right: 0; - width: 0px; - background-color: #fb0000; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-right-trigger { - left: calc(100% - 10px); } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-trigger { - z-index: 2; - position: absolute; - cursor: pointer; - width: 10px; - height: 10px; - top: -4px; - background-color: #e4eaf1; - border: solid 1px #9cacbf; - border-radius: 4px; - left: 30%; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box { - position: relative; - background-color: #9cacbf; - border-radius: 2px; - height: 4px; } - .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box .ark-slider-rate { - position: absolute; - background-color: #0095e3; - left: 0; - height: 100%; - width: 30%; - border-radius: 2px; } - @media (max-width: 880px) { - .ark-heatmap-head-handle { - margin-right: 0; } - .ark-heatmap-head-handle #arkHeatmapSwitch, .ark-heatmap-head-handle #arkHotEleList, .ark-heatmap-head-handle #arkHeatDisplayConfig, .ark-heatmap-head-handle #arkConditionList { - display: none !important; } } - -.ark-page-line { - z-index: 5002; - position: absolute; - width: 100%; - height: 1px; - left: 0; - border-bottom: dashed 1px #262d39; } - .ark-page-line.ark-mouse-lines { - border-bottom-style: solid; } - .ark-page-line .ark-page-line-value { - background-color: #262d39; - font-size: 14px; - padding: 8px 16px; - border-radius: 0 4px 0 0; - position: absolute; - left: 0; - bottom: -1px; - color: #fff; } - .ark-page-line .ark-page-mouse-line-value { - left: 50%; - border-radius: 4px 4px 0 0; - padding: 8px 0; - width: 190px; - text-align: center; - margin-left: -95px; } - -.ark-headmap-body-line-none .ark-page-line { - display: none; } diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.js b/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.js deleted file mode 100644 index b97b66e..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK_HEATMAP.min.js +++ /dev/null @@ -1,1968 +0,0 @@ -(function () { - 'use strict'; - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z = ".ark-heatmap-location {\n position: absolute !important;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10000; }\n\n.ark-headmap-body-location-none .ark-heatmap-location {\n display: none; }\n"; - styleInject(css_248z); - - var typeMap = {}; - var typeArr = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error', 'HTMLCollection']; - typeArr.map(function (item) { - typeMap["[object " + item + "]"] = item.toLowerCase(); - }); - function type(value) { - var typeName = typeof value; - if (typeName === 'object') { - return typeMap[Object.prototype.toString.call(value)]; - } - return typeName; - } - function isString(value) { - return type(value) === 'string'; - } - function isObject(value) { - return type(value) === 'object'; - } - - function createElement(tag, attrs, el) { - if (attrs === void 0) { - attrs = {}; - } - var node = document.createElement(tag); - if (attrs.id) { - node.id = attrs.id; - } - if (attrs.class) { - node.className = attrs.class; - } - if (attrs.style && isObject(attrs.style)) { - for (var key in attrs.style) { - node.style[key] = attrs.style[key]; - } - } - if (attrs.content) { - node.innerHTML = attrs.content; - } - var ele = el ? el : document.querySelector('body'); - ele.appendChild(node); - return node; - } - // 根据元素路径获取dom - function getPathEle(path) { - var pathList = parserDom(path); - if (pathList.length) { - var eleStr = ''; - for (var i = pathList.length - 3; i >= 0; i--) { - var item = pathList[i]; - if (item.elePath.indexOf('#') > -1) { - eleStr += item.elePath; - } else { - eleStr += item.elePath + ":nth-child(" + (item.index - 0 + 1) + ")"; - } - if (i > 0) { - eleStr += ' > '; - } - } - var ele = eleStr ? document.querySelector(eleStr) : null; - return ele; - } - } - /** - * [parserDom description] - * @param {[type]} path [description] - * @return {[type]} [description] - */ - function parserDom(path) { - var eleList = []; - if (path.indexOf('<') < 0) { - return [{ - elePath: path.split('|')[0], - index: path.split('|')[1] - }]; - } - var pathObj = path.split('<'); - for (var i = 0; i < pathObj.length; i++) { - var elelPath = pathObj[i].split('|')[0]; - var eleIndex = pathObj[i].split('|')[1]; - eleList.push({ - elePath: elelPath, - index: eleIndex - }); - } - return eleList; - } - /** - * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - * @param {[type]} ele [description] 元素Dom对象 - * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - */ - function getEleOffset(ele) { - var realTop = 0; - var realLeft = 0; - var elemHidden = false; - var isFixed = false; - while (ele) { - if (ele.offsetTop === undefined) { - ele = ele.parentNode; - continue; - } - realTop += ele.offsetTop; - realLeft += ele.offsetLeft; - if (!elemHidden) { - elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px'); - } - if (eleCss(ele, 'position') === 'fixed') { - isFixed = true; - } - ele = ele.offsetParent; - } - if (isFixed === true) { - realTop += document.documentElement.scrollTop || document.body.scrollTop; - realLeft += document.documentElement.scrollLeft || document.body.scrollLeft; - } - return { - top: realTop, - left: realLeft, - hidden: elemHidden - }; - } - /** - * [eleCss description]根据元素对应css列表获取对应属性 - * @param {[type]} element [description]元素dom - * @param {[type]} property [description]css名称 - * @return {[type]} value [description]css名称对应值 - */ - function eleCss(element, property) { - var len1, prop, props, q; - if (!element) { - return; - } - if (typeof property === 'string') { - return getConstantStyle(element, property); - } else if (Array.isArray(property)) { - props = {}; - for (q = 0, len1 = property.length; q < len1; q++) { - prop = property[q]; - props[prop] = getConstantStyle(element, prop); - } - return props; - } - } - /** - * [getConstantStyle description] 返回元素对应的样式值 - * @param {[type]} el [description] 元素 - * @param {[type]} pelStr [description] 样式名称 - * @return {[type]} [description] - */ - function getConstantStyle(el, pelStr) { - var w = document.defaultView; - if (w && w.getComputedStyle) { - return document.defaultView.getComputedStyle(el, null)[pelStr]; - } else { - return el.currentStyle[pelStr]; - } - } - - var globalWindow = window; - - function CheckChinese(val) { - var reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); - if (reg.test(val)) { - return true; - } - return false; - } - function getUrlParam(paraName) { - var url = document.location.toString(); - var wName = window.name; - if (isString(wName) && wName.indexOf(paraName) > -1) { - url = wName; - } - var arrObj = url.split('?'); - if (arrObj.length > 1) { - var arrPara = []; // arrObj[1].split("&") - for (var i = 1; i < arrObj.length; i++) { - arrPara.push.apply(arrPara, arrObj[i].split('&')); - } - var arr = void 0; - for (var index = 0; index < arrPara.length; index++) { - arr = arrPara[index].split('='); - if (arr != null && arr[0] === paraName) { - var value = arr[1]; - if (arr[1].indexOf('#') > -1) { - value = value.split('#')[0]; - } - if (value.indexOf('%') > -1) { - try { - var utfValue = decodeURI(value); - if (CheckChinese(utfValue)) { - return utfValue; - } - } catch (e) {} - if (globalWindow.AnalysysModule && globalWindow.AnalysysModule.decodeGBK) { - try { - var gbkValue = globalWindow.AnalysysModule.decodeGBK(value, 'gbk'); - return gbkValue; - } catch (e) {} - } - } - return value; - } - } - return ''; - } else { - return ''; - } - } - - // 类型转换 - /** - * json转换为串行字符串 - * @param value - */ - function jsonToString(value) { - var strArr = []; - for (var key in value) { - var newValue = value[key]; - if (isString(newValue)) { - newValue = encodeURIComponent(value[key]); - } else if (isObject(newValue)) { - newValue = encodeURIComponent(JSON.stringify(value[key])); - } - strArr.push(key + '=' + newValue); - } - return strArr.join('&'); - } - /** - * headers字符串转json - */ - function headersToJson(headers) { - var arr = headers.trim().split(/[\r\n]+/); - var headerMap = {}; - arr.forEach(function (line) { - var parts = line.split(': '); - var header = parts.shift(); - var value = parts.join(': '); - headerMap[header] = value; - }); - return headerMap; - } - - // uba传递过来的查询条件 - var arkcontent = null; - var arkcontentText = { - crowds: '', - filter: { - conditions: [], - relation: '且' - } - }; - // 设置参数 - function setArkcontent(content) { - arkcontent = content; - } - // 查询参数 - var queryParameters = function () { - var query = { - content: JSON.stringify(arkcontent), - times: +new Date() - }; - return jsonToString(query); - }; - function getUrlArkcontentText() { - var contentText = unescape(getUrlParam('arkcontentText')); - if (contentText) { - try { - arkcontentText = JSON.parse(contentText); - console.log(arkcontentText); - } catch (e) {} - } - } - // 获取url上面的arkcontent - function getUrlArkcontent() { - var content = unescape(getUrlParam('arkcontent')); - if (content) { - try { - arkcontent = JSON.parse(content); - } catch (e) {} - } - } - - var heatConfig = { - // 当下展示热图类型 Location Element lines - heatMapType: 'location', - // 热图是否显示 - heatMapShow: true, - // 是否打开 - isOpen: true, - // 帮助文档 - helpDoc: '', - loading: false, - nodata: false, - max: 10 - }; - // 显示配置 - var displayConfig = { - // 显示深度线 - lineShow: false, - // 颜色范围 - colorRange: '', - max: 100, - min: 0, - // 背景透明度 - backgroundTransparent: 0.3 - }; - // 初始化 - function storeInit() { - getUrlArkcontent(); - } - - /** - * 对象浅拷贝 - * - */ - function assign(target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i = 0; i < args.length; i++) { - var item = args[i]; - if (isObject(item)) { - for (var key in item) { - target[key] = item[key]; - } - } - } - return target; - } - - function ajax (options, successFn, errorFn) { - var xhr = new window.XMLHttpRequest() || new window.ActiveXObject('Microsoft.XMLHTTP') || new window.ActiveXObject('Msxml2.XMLHTTP'); - var method = (options.method || 'GET').toUpperCase(); - var url = options.url; - var data = options.data; - var header = assign({}, options.header); - if (method === 'GET' && options.data) { - var link = /\?/.test(options.url) ? '&' : '?'; - url += link + jsonToString(options.data); - } - if (method === 'POST' && options.data && !header['Content-Type']) { - data = JSON.stringify(options.data); - } - // 建立连接 - xhr.open(method, url); - // 设置请求头 - for (var key in header) { - xhr.setRequestHeader(key, header[key]); - } - xhr.timeout = options.timeout; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var res = { - header: headersToJson(xhr.getAllResponseHeaders()), - data: xhr.responseText - }; - try { - res.data = JSON.parse(xhr.responseText); - } catch (err) {} - successFn && successFn(res, xhr); - options.success && options.success(res, xhr); - } else { - errorFn && errorFn(xhr); - options.error && options.error(xhr); - } - } - }; - // 发送数据 - xhr.send(data); - } - - var css_248z$1 = ".ark-headmap-loading, .ark-headmap-nodata {\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.5);\n text-align: center;\n z-index: 10000;\n display: none; }\n .ark-headmap-loading .ark-loading-box, .ark-headmap-nodata .ark-loading-box {\n width: 260px;\n height: 182px;\n margin: 0 auto;\n top: 50%;\n margin-top: -91px;\n position: relative;\n background-color: rgba(0, 0, 0, 0.8);\n border-radius: 4px; }\n .ark-headmap-loading .ark-loading-box .ark-loading-img, .ark-headmap-nodata .ark-loading-box .ark-loading-img {\n width: 64px;\n height: 64px;\n margin: 0 auto;\n top: 40px;\n position: relative;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAAAXNSR0IArs4c6QAACXNJREFUaAXtG1tsVMd1Hte7XnsNBnv9XD9rC4iJaCAqRFBhKlVKmzRVpQS1UtWqkWpURYnyABPSj25/oOYRChFSo0qVWqn9AFIVJelnsUNThSiOmghDSI29Xq+N7TVg/N69OzM9Y9jttblz72xiO+vKV1rdmfOac87MnHvmsRgt81NxfLDY5CwEze5GSDQKgboRRu9R7AkNHygbWWZ1oOllfEqP9W/nAr0jhChe2CxG+BbG5PsjrZXvL8QtZX3ZHPDY68LXnezvgh6vUxuEI7k5aGP05aoZNc3iYsjiilNL6xUDO5yNl7yiOiHYI2opi49ZNgcIxhp11BfcCOrQLRaNkamgyrZoEHrpOYTxTujRUoT4IHjxXVGQ97vYcyWTKnkC0VmgVaHTcCwES1cUBYghuPLXN32G1/QyQYmX5CVJ3q3Z7hca4woWJTijEVDeFnk0gVi7QOinoEQDDNkChPAGjvDLYmLmHxUnBqqULVHcrcRZEJTwsKX6QLE5dNEoOz4cSPiShdME++KUe8fxZP7YjLco+Hr/eumcB5gcANoOKG6LVJgC/Rl6PU8hL5hg7A0FDu2uqrgMkf4DFX4OjtFHu16p/reKRhp3LX/TesYTtiN31hS5VSej61T8dnBtB0Bv773X43Zi7sO4+EZpW+8OO4pzezGjHuNH8OHttMODcz4hyPvDcxgrp4Ac9irjUzKlE7a9KXJSdbe3rSftmGBc7YSh7/owjDcDkW1PD71UHn7mrNje3hv5ASJ4Kxa4RhAUQRx/3Fxb+VfpJKcG5JxPaKQufWOjuSDHdJKVwmk7AIZfAuZ7ik/5JoI4yrxv5HkQIH/p51y6pC5wL8EI5uFiPhlMAWI7dBcqQxHvWAhbrPqsmavVq55C03EkWfXRdoDfy/6AMVJ+5qRQjHHHzYO116wNLGZ588wV1wyReL1soKXclS6ll7YDwi/VjSGBnoVJMJVitr4B/jHy5/7cClvscntoT9Jfwm47yV1DSsagI7TnifukXtBa4GhvmUCkBZrYBXFhDSxgwvDlvVCzduR8575HtYboApEZV5vOCs/YyEBBfIp7U8xeRuJlRUPjy6VDqt2v9C3zAviqUPn+ShVZbXwFeyA9dGpDvblTPvIkJmQzF9gPcSRiYPPCzf31fSvYPhQKhcjb5U/S2XXbcOBqO7/4q2bI1f4XJOccUHG8d6PJ6G9hJi3YqcEMI/6XWGvNqZXmBBkXSk+NlKBZs4wLlk7ODIxm81Ay2vPq1+5Km3Dl4WhR3OBvQdmvMpIgcnqkNfgnFT4b4RW/uQGbK0ZApRus6Hoih2ruENPgPwMipfFSgMBin5wiKmHZBt/Q9lmBk/FS31nMqkMhQQhkDA+7GQDDyTtd4NnqRpct+Kmc/DVuunBBjXMPXTUI5K9FbsQSL8ykdtaoI28paShjHh35gak8GAECdekQU8GjOnTZQGPGk0kdPaITSQHrS/GOGzGku5eHDtWF3eiyBZ8bWD/uqgvNET9+vsEksdbqS7Ab80cHhkEvFYcd8FmHutGybtxDDMeVK8XT0RDGfG5ex1qr3oBYsB8jkt64hFRhBkbHeRD0LBxUDGSdlQ4KyURnZ9373RShOwvJMOWMcBYdPtAwdww3lwhZiSreHMxj48Q/tL80Zs2YrDQrqdx8URgoHDYmEl5SEi9n259Hpuz5lWTDqq6rHlj1wKoHlswD874CgTNdfjrhr0kaKJcYLDryYv3wkrWcJYLnHFARGswzfeYzcO7xPUiN0xuN8rjKoMnfr9RNkeojfeumc1A9ZahQcEwR5pOcod7RX9beTPkfNhXP0vbwjhCs+L6eAlrfkAxNEpL7Gtzf6bXCs71ceqSvHnZzmuz0pJyPDB2q/VDmOaSj77GnVMZLZoGwn/H4L+wEZSus4vj1YpXxUmdGSEn5icgmWSacs12y4PJsChwdKXOhyRp0MuF1vY3COKmVox9Wg7hSR3NixJXbSzr8y0qDSYFbe4Jz+q/uhwvlhsioG/EcnuU4rq60ZCwTkYCLRjpN+fyGSZBgrqe+EAhjKykIUso1OlXw4O3oNEH+/HMwDWJqj8HKCRun1fjswxBq9iDoWifNPIbnhjxsJfJmFyGJVyHef76QAT4TowTTo7HWoPLezkKebKgP7t8wajB+RekEjG+2TJbP2TsvEyw9FtkMn71GAPo4M6Ml9TMfdO1tgpshK/MJhLr8yJvfCNdwCqlMhAwywQwWib1YM/T/sNexMntlVess88C8GKCjW3lbeFMS0W9DjG1AGC4nYDxMMf5ncE3lpc59eFluiNSevFM4Hb/7EKdoHWzewmVZElvLfJ9dPxiY0LHBSpORA4qPRZ9AXDxlFZAqw/Zyd6AueKprL17SoFlyIrqFM7Y91W7qDesaBq54D3a4/5OC6by1j7tKT/bVq4yXDcE2a8NwOPoTnUa/KA3822SjnfFSHpyGU4H4ntJjQyWZyNd2AI/j77gKFmJbw+lbrgeTrnJsCOR5f0IkXA9ogeoRG3YlSNsBkFRUKKWkEZjcnZ2pT1cXsRA8M7Aezukdj/Flc+CnYCbNai0a7gnEWs6ihDrGALkEvXRjx1aYsLWQghdBGL1FBen7Zl2w0/GusDzt09AWFkJwIKT/aBklxUG0veImFiJqgvloREUnt6g6ena0JJF4AhL1Jo5EGYSupiTn3+3o6W+pPHxNeVTv889MgsNcT30JFg7rmgc103aAF4mLcFXW+R8ZFHeo/jUie34ao6e5EKUPqgFBFOBxkve0vPdnh5f/BoFV6XU7nBXGiaF13J/i0XZA/8HqwRxBzsheTjFb37D4+qS6YOiCFWYtX+rZvhFyB+fNF4HKO/qitvt4Utaa3MRHhBDlUhfuMHw6+krwc2u7buWM8gApTEb58Zmpb3FC4LPI8+F6/AgsNi67rRgDR3ofhyu2tn+msCoJ/xn6MPZa7d+tMGu5OSSMK/7IFogbG5jgEBQJJ4Ldhqn/aexQVfp028rjVNYIK/PZu18okuHob/Oh7jXIGKnzCv2eDEKd/2/QHpqLA3ITp1Oe/DZ3IB4KffHT3owd4G6qPQUE0UHHHYr7bIwL7bsI7Xtwst2+OW2odgzQlqggXJtvXoUg+sCFhfnk+K4/zjMKYvP5M68tmwNkFPfgxFsQxKbs1CSYTHs89Hw4VDdrh18qWMZB8MsqIm+gmHfYbli81MCUKIKpcRuuavURfLtj+MAWW+d82Tad+P8LufZiufSFSrMAAAAASUVORK5CYII=) no-repeat;\n background-size: 100% 100%;\n animation: ark-around linear 2s infinite; }\n .ark-headmap-loading .ark-loading-box .ark-loading-text, .ark-headmap-nodata .ark-loading-box .ark-loading-text {\n padding-top: 65px;\n color: #fff;\n font-size: 14px; }\n .ark-headmap-loading .ark-nodata-box, .ark-headmap-nodata .ark-nodata-box {\n width: 280px;\n height: 200px;\n margin: 0 auto;\n top: 50%;\n margin-top: -100px;\n position: relative; }\n .ark-headmap-loading .ark-nodata-box .ark-nodata-img, .ark-headmap-nodata .ark-nodata-box .ark-nodata-img {\n width: 110px;\n height: 72px;\n margin: 0 auto;\n top: 32px;\n position: relative;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABICAYAAAAXrsDQAAAFu0lEQVR42u2dXWgcVRTHo4IP6oM+iGC0rRalKoo09UHFvgiKiIgPYqX6oCL4IErrmw/2pfWl9UGwIJiIgqJVm1oFsQht+pHZzSaZOx872bl3dvYr2c2mNgnWoFJr13uStJu5u7M7s7szO82egT8M87m5vznnnnvumUlfHy5X93JGNrdJxMyPyvTiqGxWUK2IXoQ2hLYME9p/2PCdEbRlKPBWLA0bvMPw8oGDQ/cYjNsMARw2dBBCcAgOwSE4VDTAFQq/347qnBAcgkNwCA6F4BAcgkNwKASH4BAcgkNwCA6F4AJSJrO4MU6sTyRCyyBYh20ILuICUGLyF7YhuIgLrKy2rICWERyC611wx09rA18cOXVkaHikDIJ12IauMsLgANDg4ZGFwR9OVBzi2zoBD4OTgATWVQNtVbAPhwMRBQeu0Q0c7ENwCA7BoatEcIEHJwjuKh0OhK2EZr8WI+y35aEHoTbXj3FiPo8D8IjKsGbvl2Q26f4SCD1kGGdvQnARkl1a2CARU/LwIsi3CC5KiWyVfey5wlmlOxBcM0uwz94zplkfSQrTuUUsLYuvwzbY14l7aKn8gCTTvxxuUaGnNFbYLhu5Z7iLtASXmTGMyvUIzkUThvWiJJvTrn0O3wfHtHufmEIPCddeLBTmNl/eT1K5x/i9Lqw9hp+zG8G5QSP0UvO3RumlduDJhv0kv4bjFewJzdpdB+6g8LbqvKblb1nX4L4/ltg5NHyyCIJ1L+6xkaXVs7xW3SYHMOK4HqHmzMz8HeJxVn72Ae5O/xCs7sC6BgfAqimwk8Vmx0P/5fd1KDjHt7UlszvE60zqmVdcf5fO9gqQ/4mR7CYEd9kKFJb0/aI9D1j8/Kbp6XP94n34oPt0o3NyufJd3K3OCC7za3SVVfe11MIXEpZ8ZUdU+12xr1RShaean5d+RzwvrqUHMDgJARzLz93NG7wo9FeHfViq7nSZ5nEEt+Iq9SBdZUK1PhT7qqQ9+8jaYyY1eyfABcG643wl/VLNbyDs2a6A61Z5QNjByUp06LTouGodrFOgVFzjDmv65RgxTwjwk5VK5brQwXWrICfs4UBcYZ8LLnaB0tKWelM6a+Vl/Bcj9M3QwXWrBC7MAThkQMQvMI2p1h63ubhG4FYfgm+E40qqWr6xp8EFkfLi1nXMeQ2Wd+sOvIBTp3Jba3KcMv2gZ12lS5I52U6SeTKZeU78+yZ09laj2e9m4OrOKhDzz7ieua0ng5MgxPsf1elNmNysbMELuJQ9cy/ff07wBJ/ifFwHNK5n3qhJbU3lXugEuOUoWKXv13ysVKNbEFwbKhbn7xQH2zyo+NVLoZBXcKv3SAvnHEVwbVmbJViD+a9KC090EpybVY9qbDuCa0HQ/0gKPe8MuOiXXkvz/IBbjcwTQlSe4IPyaxCc34BEpQfFfKZuTj8UFLh6kWvT+hQEV3eMdcFpbWy/j3Ftw5RXgzKIn33VpyA4MfxnR2uTCdU6kqbW0yDJ3Cw7U6c+ZReC815H4kiXJZT0e6HNbshsSKxPISR7swu4VNlgMw8jOGg4c9xLHUlQWp6BIM6giMPb7/Z/B76DmohehzapZ2vmyviQ4FXf12nRVVYH5dY+cc5vdCqzsRacQvv5AXMAr1ctb3l2mtCc0LedaTHp3lJw0miWfZSYX9W3Og4PLA/cJn4I+0odydPdAOdW1xJTra19uFQXGOjyh5YJ0dxwyy63TVfpVknmORXWK8uYZj3arI4kCn0uzJq7Rpi9uEiK9bpQRvBLdKJc50sjY7q9DYmtLlDv4XST7KcIfRnJck7gWpuR2BVw5uPinNi4ln47m53d1C1gjJXui6vWAXF2YqJUugGJVYOTa/mTbUQ+2iX0M6QlBii874AnOrrQzPMThr0BSdULUmT2Mn+qFyMILi9p9oNIqGGESfvBJUFjdfc/WdK/eUQ5xS1tryxbtyKZdbL8D1VmQJH/LyQBAAAAAElFTkSuQmCC) no-repeat;\n background-size: 100% 100%; }\n .ark-headmap-loading .ark-nodata-box .ark-nodata-text, .ark-headmap-nodata .ark-nodata-box .ark-nodata-text {\n padding-top: 65px;\n color: #fff;\n font-size: 14px; }\n\n.ark-headmap-nodata {\n background-color: rgba(0, 0, 0, 0.8); }\n\n@keyframes ark-around {\n 0% {\n -webkit-transform: rotate(0deg);\n -ms-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n transform: rotate(360deg); } }\n"; - styleInject(css_248z$1); - - var html = "\n
    \n
    \n
    \u751F\u6210\u70ED\u56FE\u4E2D\u2026
    \n
    \n"; - function loading () { - createElement('div', { - id: 'arkHeadmapLoading', - class: 'ark-headmap-loading', - content: html - }, document.getElementById('arkHeadmapBody')); - } - // 显示或隐藏 - function loadingDisply() { - var loading = document.getElementById('arkHeadmapLoading'); - loading.style.display = heatConfig.loading ? 'block' : 'none'; - } - - var html$1 = "\n
    \n
    \n
    \n
    \n"; - function tips () { - createElement('div', { - id: 'arkHeadmapNodata', - class: 'ark-headmap-nodata', - content: html$1 - }, document.getElementById('arkHeadmapBody')); - } - // 显示或隐藏 - function nodataDisply(nodataText) { - var nodata = document.getElementById('arkHeadmapNodata'); - nodata.style.display = heatConfig.nodata ? 'block' : 'none'; - setNodataText(nodataText); - } - // 设置文案 - function setNodataText(text) { - document.getElementById('arkHeadmapNodata').querySelector('.ark-nodata-text').innerHTML = text || ''; - } - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var css_248z$2 = ".ark-heat-click-element {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n width: 100%;\n background-color: #ff0000;\n color: #fff;\n text-align: center;\n font-size: 12px;\n z-index: 10000;\n line-height: 22px; }\n .ark-heat-click-element .ark-heat-click-element-text {\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n position: absolute;\n width: 100%;\n top: 50%;\n margin-top: -11px;\n text-align: center; }\n .ark-heat-click-element:hover .ark-heat-click-element-tips {\n display: block; }\n .ark-heat-click-element .ark-heat-click-element-tips {\n position: absolute;\n background-color: #252d39;\n font-size: 12px;\n display: none;\n top: 100%;\n top: calc(100% + 5px);\n font-size: 14px;\n padding: 10px 0;\n border-radius: 4px;\n left: 50%;\n transform: translate(-50%, 0);\n white-space: nowrap; }\n .ark-heat-click-element .ark-heat-click-element-tips::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 7px 5px;\n border-bottom-color: #252d39;\n margin-left: -7px; }\n .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent {\n display: inline-block;\n text-align: right;\n padding: 0 10px; }\n .ark-heat-click-element .ark-heat-click-element-tips .ark-click-num label, .ark-heat-click-element .ark-heat-click-element-tips .ark-click-percent label {\n display: block;\n color: #9cacbf; }\n\n.ark-headmap-body-element-none .ark-heat-click-element {\n display: none; }\n"; - styleInject(css_248z$2); - - var css_248z$3 = ".ark-heatmap-head {\n position: fixed;\n left: 0;\n top: 0;\n background-color: rgba(0, 0, 0, 0.8);\n z-index: 10001;\n width: 100%;\n height: 64px;\n font-size: 16px;\n color: #9cacbf;\n transition: all 0.3s; }\n .ark-heatmap-head .ark-icon {\n display: inline-block;\n background-size: 100% 100%;\n width: 14px;\n height: 14px;\n margin-right: 10px; }\n .ark-heatmap-head .ark-icon.ark-icon-point {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQFJREFUOBGlUjEKwlAMTVR0cRGsQ1HP4QFcPIfgZl28gINDi4t2EzyHV/AcrXQRdNBFUWPTNiWUFsV+KC8vfXk/PwSg5MFf68110H/cnzskHBDSod6ojYOZ6VXEoOP4i7btnRklp5GLgWBIQE3GiIeC1OBNNA15K0FdG8V8s04KTw0qiG4ouCSotVHMbeuk8NIzyDUwVv6IXrDlG7EKk9O8t9e36zh9gk7GxdQFoK4Y6f86zjXQgm9xrgG3HTZ/5C+Oi21yZ5CVFy0R66IODMdbGrZ/ZcwWMy9aIv4XP4HQijcMLU5mjyyN5DVPZkAuAt4AaSMijbI0ktO89AzE9G/8AFToh10DAaI4AAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-ele {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQZJREFUOBGtUsEOwUAQnZn4AKTc9A8dERJt1IkmDuoLy0ka9QW7ZpZlrUUqNml23ryZ2bdvC/CP1V8dsmhd1lFezkPzJC98f71f+DxKQkjQ0PbJAK6rSdx18y0DEDY8ICPE7DgepG6BxHKy0jpBotzn7jhalfoOAsE7ngK1H1O+H9crfGx5kEaFumIFeshR2kgBG4hAkMiIJz+MLPYg9ExSLHk53T6z60ezZ0Q4V+O4IwOMGh5urkCaCmBS5FlCdvux3BnX1gS4FUVflysxVOzyLyb28sNUmux9/QE2b3fjgVvE00+MO24uGN/8ePkPCGinUA3Zk001ipd+syjUSo3Yj8LnfsIXR3J0GEi1vfgAAAAASUVORK5CYII=) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-dep {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAA10lEQVQ4y63SsU3DQBjF8Z9RBqBxaYkN7JoGMwEMgBRGSOWatK7cUgEbsEGSDZKGOpJLN9ngaA5EEfsima+6+77TvXf/e1kIwZy6MrMWkLf9HuXImcPQFFXKQTkhUiYdpCpv+7OghqbIsrkQFxeoV+hw96f9gdXQFKcshDAG8YBnbOP+HV+4xTLO6ymIJV7iusYer/HC+zhfpXLwEJVPeMMa3dAUW+xQT0LM2/4zqt/gMbKocY0N1ikHP084osJT5LKJDLoxiL/pu/QXwrmQzMrBWPr+PYnfX8xTYCBLOCIAAAAASUVORK5CYII=) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-element {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMlJREFUOBFjYBhowAhywP///9uBlD4QhzAyMn4D8s2AbGEgxgdeAdWeZQQqBhnyEohFgdgAKHgRKHYKyJYAYnzgPlCtPVgBUIMhEPvjU01bOaDtLEDMT44tsEA8B9SsDsQaQH89BhrWBGSLETDwCVBtCwtU0T8g/R+KQUJ/oBjExgVAaiAAaCMzEPPC+PSngbabAHEwOTbDEtIroGYRIDYEBswFoGGgQCUmIVmzADUA1f+fAdQASso3gRgEUoFYCMzCTbzGLUVPGQAuSE4Qo6rhyQAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-content {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALRJREFUOBFjYKAQMML0////XxfI9gdiFpgYDvoPUHwTIyPjJRR5oAE3gZhY8ACmmQnGANLXkNiEmBcwFACt5gTiHUQ44TRQDS+GASABoAQbEK/HY8hVoJwwVs0wQaACFiBeisWQe0AxKZg6vDRQIRMQL0Ay5BWQrYRXE7okUIMPkgEH0OVhfORYgImRRA9uA44B/XKXkH9wegGY1t8BNTsD8WMg/k/IIJzyoOgDYk+cCiiVAABBtddgMn4BogAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-set {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOBG1kz9LglEUh71WaGM55OrSB3DtE1RLFg3qUpOOgbhE3yHdCmqJPkIE0WpETurWpksQbTWEUb09v/vea68IKoIHHs655/zuee+/NxabhwVBsAJd8NYjWJ34LUSLEuE33cwivuDibVezmpFmiHLwDQ/wBG9eRPwKTVDtB/Z8Le66LuPrcAsvsAA58LZLYEC1G6jRRHNCY1CBD0hHcgeMHx2HkfwauXeoKmdXgE9CAnZAZ5DHXUIH2nBBroCXSeP1NqEJBk5BloI7uA6rtuEV43vQ7cjqoC0NVuC1s3m6HcMXlNUBnwed9jmcudhugbgEfTgZfI3BzIdo90EDXckztKAPGTgyxjTwWtEGrgY9WIIsrFP/xIeGSA9Jy570kH7R7Pt5Q57CuKe8JTGa/wc0NDsyQKTr6oK36X6mSI+pwz+2s2sE4j6K/AAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-refresh {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQ1JREFUOBG1ks8KAVEUxmckFijkAWztZqMsLJQsPIc8hLLyIKws5Dk8AClZsLFkIRZIGb8zXN07l/wpt36dc77vu3eaO+M4/1y+76cg8dUz2BCHDqxgDXNYQuvtQYQKMIMu5NUG+iR4an5aCcRgAo2ngbuIX4G0lUFsw9AyNAE/BzvYQlWzHAdhCjVDDA34JRjACDKGjXCwRCNxG8ikYaOsiGqoe7ho86vWxXh82uAATkwijqFPX361864XqQsjwya5WbkYuaCcYYYG/CG0Q3JwifJuFcvQBPwGyKeOabLdEvBAXitY9HmQn0t+soLSpUb1Qevr9E3CZ2oWjtADz3XdE/WzxQEJSH2W/jF1BQYvzfgwrEoEAAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-help {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAWdJREFUOBGNk79Kw1AUhxuX0qGLjo5SXEyXgiK1dFBcXNRdV7fiWwgurVudVPoAxReQPIOTUAc76SAUg7goxO8XcpPjjUovfLnn/M6f5ObeW6l4I0mSEPpwD3GGbGmhl164BKswhE8YwSGo2RrswxUoppxqUYklASJ4hM6PoHGItWECyi2a4KiriusuH3s90y+ZN41ex1fuMNUwmqBPy9+M3YUPuIFzeIdd06SDr5ow4DEgsBgEwbFJuMWeovWkkXPG1MTfk6+BNmJ6XeCxA2Ow4w7nwggz7C/jy1TNtjppq/7cHmIteIN8CapWDcT/NiBhGV7gVEV2oKUNtIQpNGzQ2CfYEWvXf/LHCsKT+4lLJB35GbxlFS0m9vxL7BptpiWUttElE3uALee7Ga0N6TamGk7pICmAvgE1V5hpOkgT1eQ6zrxHWQdIpzBSTd4g6+xfpgOS9KeFbF0wfXb5MtlOJKhg7uv8DahvoK6C+lwsAAAAAElFTkSuQmCC) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-down {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAALpJREFUOBFjYBi+4P///1xAvAGIY0n2JVCTIBAfBeJNQPwEiIuINgSoWBqIrwDxJCBmAmI5IL4GxB0EDQEqUgPi+0BciawYyAe56BAQzwViZmQ5OBsoYQLEz4A4ESQIpFHCAMhnB+JVQAwKFw64RhgDKukN1Yw1DIBqGIG4D4jDYfowaKAkLAwmA9lkhcEDoMYqZJOBfKLD4DlQcRKyZhgbKE4wDHYBFfnCNGCjgfK4wwAoyYRN0+AXAwDWDeuTwsPrDwAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-icon.ark-icon-crowd {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAATtJREFUOBHVUbFKA0EQnd0cKCh+gaKVX5BKbSwsRBIJyGGpgViJiLGxS2Vjgm0IKFHs0iWCoHX+wyJ/kEbU2+fMrnts7oK2OrA3b2bnzc2bJfr3prIKStX6NkAdyStFR4Pb1lO2JoyjMBBsycCixaSk0ZLg8kF9S3y/23oR70178JMvVc9PDeFZjuCwNtdAxubZR3Is5moYFD0pxJLLSfjWbMf2pCii6+ST1iUuMPZ58ekSK7Wz1eRDnYCwo7S+k0sYcwjSx4/d5kDiaWYbsK4YMPcEmkmLWEKB1B7rXuPNxtzoUmmscE3M/+3NLs+3e43Gu5MANCfI3EVrvW9McsGvsuuamgcyNAdWwbNtvL2ONzlfsUsEMKFZCP2bqyGTy45svwuO7DIs1TbOvUJAEJjuKJP/7W5K+Z9NfQHcMWh6c1UmgAAAAABJRU5ErkJggg==) no-repeat; }\n .ark-heatmap-head .ark-heatmap-switch {\n display: inline-block;\n width: 36px;\n height: 18px;\n border-radius: 9px;\n position: relative;\n background-color: #4c6072;\n cursor: pointer;\n vertical-align: sub;\n margin-right: 5px; }\n .ark-heatmap-head .ark-heatmap-switch.ark-switch-act {\n background-color: #0095e3; }\n .ark-heatmap-head .ark-heatmap-switch.ark-switch-act::before {\n left: 20px; }\n .ark-heatmap-head .ark-heatmap-switch::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n display: inline-block;\n border-radius: 20px;\n background-color: #fff;\n z-index: 20;\n -webkit-transition: all 0.5s;\n transition: all 0.5s; }\n .ark-heatmap-head .ark-head-hide {\n display: none;\n position: absolute;\n width: 64px;\n height: 32px;\n line-height: 32px;\n right: 56px;\n top: 64px;\n background-color: rgba(20, 137, 226, 0.8);\n text-align: center;\n cursor: pointer; }\n .ark-heatmap-head .ark-head-hide i {\n cursor: pointer;\n margin-right: 0;\n transform: rotate(180deg); }\n\n.ark-heatmap-head-menu {\n float: left;\n margin-left: 20px; }\n\n.ark-heatmap-head-menu-item {\n float: left;\n line-height: 64px;\n text-align: center;\n margin-right: 10px;\n cursor: pointer;\n position: relative; }\n .ark-heatmap-head-menu-item:hover, .ark-heatmap-head-menu-item.ark-active {\n color: #1489e2; }\n .ark-heatmap-head-menu-item:hover::after, .ark-heatmap-head-menu-item.ark-active::after {\n content: '';\n height: 2px;\n position: absolute;\n left: 0;\n bottom: 0;\n background-color: #1489e2;\n width: 100%; }\n @media (max-width: 880px) {\n .ark-heatmap-head-menu-item i {\n margin-left: 10px; }\n .ark-heatmap-head-menu-item span {\n display: none; } }\n\n.ark-heatmap-head-handle {\n float: right;\n margin-right: 20px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item {\n float: left;\n padding: 0 10px;\n margin-right: 10px;\n position: relative;\n line-height: 64px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-handle-hover {\n color: #fff; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item:hover .ark-pop-tips {\n display: inline-block; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-handle-hover {\n cursor: pointer; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i {\n cursor: pointer;\n width: 16px;\n height: 16px;\n float: left;\n margin-top: 23px;\n opacity: .8; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box i:hover {\n opacity: 1; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-icon-box .ark-pop-tips {\n top: 50px;\n left: -5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips {\n display: none;\n position: absolute;\n background-color: #fff;\n padding: 10px;\n box-shadow: 2px 0px 4px #252d3933;\n border: 1px solid #D8E0E9;\n border-radius: 4px;\n top: 64px;\n left: -100px;\n line-height: 12px;\n font-size: 12px;\n color: #333; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box::after, .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-tips::after {\n content: '';\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n top: 5px;\n left: 50%;\n margin-top: -10px;\n border-width: 0 7px 5px;\n border-bottom-color: #fff;\n margin-left: -7px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-pop-box {\n padding: 20px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list {\n width: 500px;\n left: -200px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-hd {\n font-size: 16px;\n color: #252d39;\n padding-bottom: 5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: center; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd td {\n height: 40px;\n line-height: 40px;\n font-size: 14px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd thead td {\n border-bottom: 2px solid #e4eaf1; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody {\n max-height: 400px;\n overflow-y: auto; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody td {\n border-bottom: 1px solid #e4eaf1;\n color: #4c6072; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-element-list .ark-element-list-bd tbody .ark-element-content {\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding: 0 5px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition {\n width: 300px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-title {\n color: #6d859e;\n font-size: 13px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd {\n padding: 17px 0; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-crowd i {\n margin-right: 5px;\n vertical-align: bottom; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs {\n position: relative;\n margin-top: 20px;\n padding-top: 10px;\n padding-left: 20px;\n border-left: solid #e4eaf1 1px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-item {\n padding-bottom: 15px;\n color: #354359;\n font-size: 12px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-filter-condition .ark-filter-condition-attrs .ark-condigton-relation {\n position: absolute;\n width: 20px;\n height: 20px;\n border: solid 1px #c5ced8;\n border-radius: 10px;\n font-size: 12px;\n color: #9cacbf;\n text-align: center;\n line-height: 20px;\n left: -10px;\n top: 50%;\n margin-top: -10px;\n background-color: #fff; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set {\n width: 280px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item {\n position: relative; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-name {\n width: 120px;\n font-size: 14px;\n position: absolute; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content {\n padding-left: 120px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box {\n position: relative;\n height: 4px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-left-track {\n position: absolute;\n background-color: #9cacbf;\n height: 100%;\n left: 0;\n width: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-left-trigger {\n left: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-middle-track {\n position: absolute;\n height: 100%;\n left: 0px;\n background: linear-gradient(to right, #3023ae 0%, #53a0fd 20%, #b4ec51 41%, #ffa301 81%, #fb0000 100%);\n right: 0px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-color-right-track {\n position: absolute;\n height: 100%;\n right: 0;\n width: 0px;\n background-color: #fb0000; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-color-slider-box .ark-right-trigger {\n left: calc(100% - 10px); }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-trigger {\n z-index: 2;\n position: absolute;\n cursor: pointer;\n width: 10px;\n height: 10px;\n top: -4px;\n background-color: #e4eaf1;\n border: solid 1px #9cacbf;\n border-radius: 4px;\n left: 30%; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box {\n position: relative;\n background-color: #9cacbf;\n border-radius: 2px;\n height: 4px; }\n .ark-heatmap-head-handle .ark-heatmap-head-handle-item .ark-display-set .ark-display-set-item .ark-display-set-item-content .ark-slider-box .ark-slider-rate {\n position: absolute;\n background-color: #0095e3;\n left: 0;\n height: 100%;\n width: 30%;\n border-radius: 2px; }\n @media (max-width: 880px) {\n .ark-heatmap-head-handle {\n margin-right: 0; }\n .ark-heatmap-head-handle #arkHeatmapSwitch, .ark-heatmap-head-handle #arkHotEleList, .ark-heatmap-head-handle #arkHeatDisplayConfig, .ark-heatmap-head-handle #arkConditionList {\n display: none !important; } }\n"; - styleInject(css_248z$3); - - var html$2 = "\n
    \n
    \n \n \u70B9\u51FB\u4F4D\u7F6E\u70ED\u56FE\n
    \n
    \n \n \u70B9\u51FB\u5143\u7D20\u70ED\u56FE\n
    \n
    \n \n \u6D4F\u89C8\u6DF1\u5EA6\u7EBF\n
    \n
    \n\n
    \n
    \n
    \u70ED\u95E8\u5143\u7D20\u5217\u8868
    \n
    \n
    \u70ED\u95E8\u70B9\u51FB\u5143\u7D20
    \n \n \n \n \n \n \n \n \n \n \n \n\n \n
    \u5143\u7D20\u5185\u5BB9\u5143\u7D20\u7C7B\u578B\u7528\u6237\u6570\u70B9\u51FB\u6B21\u6570\u70B9\u51FB\u6B21\u6570\u5360\u6BD4
    \n
    \n
    \n
    \n
    \u8FC7\u6EE4\u6761\u4EF6
    \n
    \n
    \u5206\u6790\u7528\u6237\u7FA4
    \n
    \n \n
    \n
    \u8FC7\u6EE4\u6761\u4EF6
    \n
    \n
    \n
    \n
    \n
    \n
    \u663E\u793A\u8BBE\u7F6E
    \n
    \n
    \n
    \u663E\u793A\u6D4F\u89C8\u6DF1\u5EA6\u7EBF
    \n
    \n \n
    \n
    \n
    \n
    \u8C03\u6574\u989C\u8272\u8303\u56F4
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \u8C03\u6574\u80CC\u666F\u900F\u660E\u5EA6
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \u70ED\u56FE\u663E\u793A\n
    \n
    \n
    \n \n
    \u5237\u65B0
    \n
    \n
    \n
    \n
    \n \n
    \u5E2E\u52A9
    \n
    \n
    \n
    \n
    \n \n
    \u6536\u8D77
    \n
    \n
    \n
    \n \n \n \n"; - function nav () { - createElement('div', { - id: 'arkHeatmapHead', - class: 'ark-heatmap-head', - content: html$2 - }, document.getElementById('arkHeadmapBody')); - setSelected(); - heatSwitch(); - toolDisplay(); - opacitySlider(); - renderCondition(); - colorSlider(); - } - var eleMap = { - location: 'arkNavLocation', - element: 'arkNavElement', - lines: 'arkNavLines' - }; - // 清空当前选中的菜单 - function emptySelected() { - var ele = document.getElementById(eleMap[heatConfig.heatMapType]); - ele.className = 'ark-heatmap-head-menu-item'; - } - // 选中当前type - function setSelected() { - var ele = document.getElementById(eleMap[heatConfig.heatMapType]); - ele.className = 'ark-heatmap-head-menu-item ark-active'; - } - // 热图开关 - function heatSwitch() { - var state = heatConfig.heatMapShow; - document.getElementById('arkHeatmapSwitch').querySelector('.ark-heatmap-switch').className = state ? 'ark-heatmap-switch ark-switch-act' : 'ark-heatmap-switch'; - } - function displayDepth() { - var state = displayConfig.lineShow; - document.getElementById('arkDisplayDepth').className = state ? 'ark-heatmap-switch ark-switch-act' : 'ark-heatmap-switch'; - } - // nav open or hide - function navOpen() { - document.getElementById('arkHeatmapHead').style.top = heatConfig.isOpen ? '0px' : '-64px'; - document.querySelector('.ark-head-hide').style.display = heatConfig.isOpen ? 'none' : 'block'; - } - // 工具栏显示与隐藏 - function toolDisplay() { - var element = document.getElementById('arkHotEleList'); - element.style.display = heatConfig.heatMapType === 'element' ? 'block' : 'none'; - var arkHeatmapSwitch = document.getElementById('arkHeatmapSwitch'); - var arkHeatDisplayConfig = document.getElementById('arkHeatDisplayConfig'); - if (heatConfig.heatMapType !== 'lines') { - arkHeatmapSwitch.style.display = 'block'; - arkHeatDisplayConfig.style.display = 'block'; - } else { - arkHeatmapSwitch.style.display = 'none'; - arkHeatDisplayConfig.style.display = 'none'; - } - if (heatConfig.heatMapType === 'location') { - document.getElementById('arkSetColorRange').style.display = 'block'; - document.getElementById('arkSetOpacity').style.display = 'block'; - } else { - document.getElementById('arkSetColorRange').style.display = 'none'; - document.getElementById('arkSetOpacity').style.display = 'none'; - } - } - // 条件列表渲染 - function renderCondition() { - document.querySelector('.ark-filter-condition-crowd span').innerHTML = arkcontentText.crowds; - // ark-filter-condition-attrs - var items = ''; - var conditions = arkcontentText.filter.conditions; - if (conditions.length) { - conditions.forEach(function (o) { - items += "
    " + o + "
    "; - }); - if (conditions.length > 1) { - items += "" + arkcontentText.filter.relation + ""; - } - } else { - items = '
    '; - } - document.querySelector('.ark-filter-condition-attrs').innerHTML = items; - } - function renderElementList(elementList) { - var trs = ''; - if (elementList && elementList.length) { - elementList.forEach(function (o) { - trs += "\n \n
    " + (o.content || '-') + "
    \n " + o.type + "\n " + o.uv + "\n " + o.clickNum + "\n " + (o.clickNumPercent * 100).toFixed(2) + "%\n \n "; - }); - } - document.getElementById('arkElementList').innerHTML = trs; - } - // 滑块 - function slider(el, options) { - this.downX = null; - this.moveX = null; - this.max = options.max; - this.min = options.min; - var self = this; - el.addEventListener('mousedown', function (e) { - self.downX = e.clientX; - var width = options.trackEl.offsetWidth - 10; - var left = el.offsetLeft; - function move(event) { - if (self.downX) { - self.moveX = left + (event.clientX - self.downX); - var max = self.max || width; - var min = self.min || 0; - if (self.moveX > max) { - self.moveX = max; - } - if (self.moveX < min) { - self.moveX = min; - } - options && options.onMove(self.moveX, width); - el.style.left = self.moveX + 'px'; - } - } - function up() { - self.downX = null; - window.removeEventListener('mousemove', move); - window.removeEventListener('mouseup', up); - options && options.onUp(self.moveX, width); - } - window.addEventListener('mousemove', move); - window.addEventListener('mouseup', up); - }); - } - // 透明度滑块 - function opacitySlider() { - var arkOpacitySlider = document.getElementById('arkOpacitySlider'); - new slider(arkOpacitySlider.querySelector('.ark-slider-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v) { - arkOpacitySlider.querySelector('.ark-slider-rate').style.width = v + 'px'; - }, - onUp: function (v, width) { - displayConfig.backgroundTransparent = v / width; - setHeatMapConfig(); - } - }); - } - // 颜色滑块 - function colorSlider() { - var arkOpacitySlider = document.getElementById('arkColors'); - var leftSlider = new slider(arkOpacitySlider.querySelector('.ark-left-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v) { - rightSlider.min = v + 10; - arkOpacitySlider.querySelector('.ark-color-middle-track').style.left = v + 'px'; - arkOpacitySlider.querySelector('.ark-color-left-track').style.width = v + 'px'; - }, - onUp: function (v, width) { - displayConfig.min = v / width * 100; - setHeatMapConfig(); - } - }); - var rightSlider = new slider(arkOpacitySlider.querySelector('.ark-right-trigger'), { - trackEl: arkOpacitySlider, - onMove: function (v, width) { - leftSlider.max = v - 10; - var w = width - v; - arkOpacitySlider.querySelector('.ark-color-middle-track').style.right = w + 'px'; - arkOpacitySlider.querySelector('.ark-color-right-track').style.width = w + 'px'; - }, - onUp: function (v, width) { - displayConfig.max = v / width * 100; - setHeatMapConfig(); - } - }); - } - - var htmlTpl = function (clickNum, clickNumPercent) { - var percent = (clickNumPercent * 100).toFixed(2); - return "\n " + percent + "%\n \n \n \n " + clickNum + "\n \n \n \n " + percent + "%\n \n \n "; - }; - var max = 0; - var colors = ['63,81,181', '33,150,243', '0,188,212', '87,201,92', '205,220,57', '255,235,59', '255,152,0', '255,87,34', '229,57,53', '183,28,28']; - function renderElement(data) { - emptyElement(); - var list = data.detail; - var elementList = []; - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var ele = getPathEle(item.path); - var targetEle = null; - if (ele) { - if (item.clickNum > max) { - max = item.clickNum; - } - var colorIndex = Math.ceil(item.clickNum / max * 10) - 1; - var rgba = 'rgba(' + colors[colorIndex] + ',.9)'; - // 改变目标元素 - if (['input', 'img', 'select', 'textarea', 'svg'].indexOf(ele.tagName.toLowerCase()) > -1) { - // 备份目标元素 - targetEle = ele; - ele = ele.parentNode; - } - var position = eleCss(ele, 'position'); - if (['relative', 'fixed', 'absolute', 'sticky'].indexOf(position) === -1) { - ele.style.position = 'relative'; - } - var positionStyle = {}; - if (targetEle) { - positionStyle = { - left: targetEle.offsetLeft + 'px', - top: targetEle.offsetTop + 'px', - width: targetEle.offsetWidth + 'px', - height: targetEle.offsetHeight + 'px' - }; - } - createElement('span', { - class: 'ark-heat-click-element', - content: htmlTpl(item.clickNum, item.clickNumPercent), - style: __assign({ backgroundColor: rgba }, positionStyle) - }, ele); - elementList.push(item); - } - } - // 渲染点击元素列表 - renderElementList(elementList); - } - // 点击元素显示与隐藏 - function elementDisplay() { - var body = document.querySelector('body'); - var className = body.className; - if (heatConfig.heatMapShow && heatConfig.heatMapType === 'element') { - body.className = className.replace(/ ark-headmap-body-element-none/g, ''); - } else { - if (className.indexOf('ark-headmap-body-element-none') === -1) { - body.className = className + ' ark-headmap-body-element-none'; - } - } - } - function emptyElement() { - document.querySelectorAll('.ark-heat-click-element').forEach(function (o) { - o.remove(); - }); - } - - var renderState = { - location: false, - element: false, - lines: false - }; - function loading$1(v) { - heatConfig.loading = v; - loadingDisply(); - } - function nodata(v, nodataText) { - heatConfig.nodata = v; - nodataDisply(nodataText); - } - var nodataTextMap = { - 0: '暂无数据
    小舟建议您选择其他时间范围或过滤条件重试', - 1: '查询失败,请联系管理员' - }; - var heatMapData = null; - // 获取热图数据 - function getHeatmapData(fn) { - nodata(false); - if (renderState[heatConfig.heatMapType] && arkcontent && arkcontent.useCache) { - return; - } - var url = '/ark/sdk/heatmap/click/analysis'; - if (heatConfig.heatMapType === 'element') { - emptyElement(); - url = '/ark/sdk/heatmap/element/analysis'; - } else { - emptyHeatmap(); - } - loading$1(true); - ajax({ - url: globalWindow.AnalysysAgent.config.uploadURL + url, - method: 'post', - data: queryParameters(), - header: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - success: function (_a) { - var data = _a.data; - renderState[heatConfig.heatMapType] = false; - if (data.code === 0) { - var datas = data.datas; - if (datas && (datas.length && heatConfig.heatMapType === 'location' || datas.detail && datas.detail.length && heatConfig.heatMapType === 'element')) { - if (heatConfig.heatMapType === 'location') { - heatMapData = datas; - } - fn && fn(data); - renderState[heatConfig.heatMapType] = true; - } else { - nodata(true, nodataTextMap[0]); - } - } else { - nodata(true, data.msg || nodataTextMap[1]); - } - loading$1(false); - }, - error: function () { - loading$1(false); - nodata(true); - } - }); - } - var isTypeLines = function (fn) { - if (heatConfig.heatMapType === 'lines') { - fn && fn(); - } - }; - // 获取深度线 - function getLinesData(fn) { - nodata(false); - if (renderState.lines && arkcontent && arkcontent.useCache) { - return; - } - isTypeLines(function () { - loading$1(true); - }); - ajax({ - url: globalWindow.AnalysysAgent.config.uploadURL + '/ark/sdk/heatmap/scrollreach/analysis', - method: 'post', - data: queryParameters(), - header: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - success: function (_a) { - var data = _a.data; - renderState.lines = false; - if (data.code === 0) { - if (data.datas && data.datas.detail && data.datas.detail.length) { - fn && fn(data); - renderState.lines = true; - } else { - nodata(true, nodataTextMap[0]); - } - } else { - isTypeLines(function () { - nodata(true, data.msg || nodataTextMap[1]); - }); - } - isTypeLines(function () { - loading$1(false); - }); - }, - error: function () { - isTypeLines(function () { - loading$1(false); - nodata(true); - }); - } - }); - } - - var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var heatmap = createCommonjsModule(function (module) { - /* - * heatmap.js v2.0.5 | JavaScript Heatmap Library - * - * Copyright 2008-2016 Patrick Wied - All rights reserved. - * Dual licensed under MIT and Beerware license - * - * :: 2016-09-05 01:16 - */ - (function (name, context, factory) { - // Supports UMD. AMD, CommonJS/Node.js and browser context - if ( module.exports) { - module.exports = factory(); - } else { - context[name] = factory(); - } - })('h337', commonjsGlobal, function () { - // Heatmap Config stores default values and will be merged with instance config - var HeatmapConfig = { - defaultRadius: 40, - defaultRenderer: 'canvas2d', - defaultGradient: { 0.25: 'rgb(0,0,255)', 0.55: 'rgb(0,255,0)', 0.85: 'yellow', 1.0: 'rgb(255,0,0)' }, - defaultMaxOpacity: 1, - defaultMinOpacity: 0, - defaultBlur: 0.85, - defaultXField: 'x', - defaultYField: 'y', - defaultValueField: 'value', - plugins: {} - }; - var Store = function StoreClosure() { - var Store = function Store(config) { - this._coordinator = {}; - this._data = []; - this._radi = []; - this._min = 10; - this._max = 1; - this._xField = config.xField || config.defaultXField; - this._yField = config.yField || config.defaultYField; - this._valueField = config.valueField || config.defaultValueField; - - if (config.radius) { - this._cfgRadius = config.radius; - } - }; - - var defaultRadius = HeatmapConfig.defaultRadius; - - Store.prototype = { - // when forceRender = false -> called from setData, omits renderall event - _organiseData: function (dataPoint, forceRender) { - var x = dataPoint[this._xField]; - var y = dataPoint[this._yField]; - var radi = this._radi; - var store = this._data; - var max = this._max; - var min = this._min; - var value = dataPoint[this._valueField] || 1; - var radius = dataPoint.radius || this._cfgRadius || defaultRadius; - - if (!store[x]) { - store[x] = []; - radi[x] = []; - } - - if (!store[x][y]) { - store[x][y] = value; - radi[x][y] = radius; - } else { - store[x][y] += value; - } - var storedVal = store[x][y]; - - if (storedVal > max) { - if (!forceRender) { - this._max = storedVal; - } else { - this.setDataMax(storedVal); - } - return false; - } else if (storedVal < min) { - if (!forceRender) { - this._min = storedVal; - } else { - this.setDataMin(storedVal); - } - return false; - } else { - return { - x: x, - y: y, - value: value, - radius: radius, - min: min, - max: max - }; - } - }, - _unOrganizeData: function () { - var unorganizedData = []; - var data = this._data; - var radi = this._radi; - - for (var x in data) { - for (var y in data[x]) { - unorganizedData.push({ - x: x, - y: y, - radius: radi[x][y], - value: data[x][y] - }); - } - } - return { - min: this._min, - max: this._max, - data: unorganizedData - }; - }, - _onExtremaChange: function () { - this._coordinator.emit('extremachange', { - min: this._min, - max: this._max - }); - }, - addData: function () { - if (arguments[0].length > 0) { - var dataArr = arguments[0]; - var dataLen = dataArr.length; - while (dataLen--) { - this.addData.call(this, dataArr[dataLen]); - } - } else { - // add to store - var organisedEntry = this._organiseData(arguments[0], true); - if (organisedEntry) { - // if it's the first datapoint initialize the extremas with it - if (this._data.length === 0) { - this._min = this._max = organisedEntry.value; - } - this._coordinator.emit('renderpartial', { - min: this._min, - max: this._max, - data: [organisedEntry] - }); - } - } - return this; - }, - setData: function (data) { - var dataPoints = data.data; - var pointsLen = dataPoints.length; - - // reset data arrays - this._data = []; - this._radi = []; - - for (var i = 0; i < pointsLen; i++) { - this._organiseData(dataPoints[i], false); - } - this._max = data.max; - this._min = data.min || 0; - - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - removeData: function () { - // TODO: implement - }, - setDataMax: function (max) { - this._max = max; - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - setDataMin: function (min) { - this._min = min; - this._onExtremaChange(); - this._coordinator.emit('renderall', this._getInternalData()); - return this; - }, - setCoordinator: function (coordinator) { - this._coordinator = coordinator; - }, - _getInternalData: function () { - return { - max: this._max, - min: this._min, - data: this._data, - radi: this._radi - }; - }, - getData: function () { - return this._unOrganizeData(); - } /*, - TODO: rethink. - getValueAt: function(point) { - var value; - var radius = 100; - var x = point.x; - var y = point.y; - var data = this._data; - if (data[x] && data[x][y]) { - return data[x][y]; - } else { - var values = []; - // radial search for datapoints based on default radius - for(var distance = 1; distance < radius; distance++) { - var neighbors = distance * 2 +1; - var startX = x - distance; - var startY = y - distance; - for(var i = 0; i < neighbors; i++) { - for (var o = 0; o < neighbors; o++) { - if ((i == 0 || i == neighbors-1) || (o == 0 || o == neighbors-1)) { - if (data[startY+i] && data[startY+i][startX+o]) { - values.push(data[startY+i][startX+o]); - } - } else { - continue; - } - } - } - } - if (values.length > 0) { - return Math.max.apply(Math, values); - } - } - return false; - } */ - }; - - return Store; - }(); - - var Canvas2dRenderer = function Canvas2dRendererClosure() { - var _getColorPalette = function (config) { - var gradientConfig = config.gradient || config.defaultGradient; - var paletteCanvas = document.createElement('canvas'); - var paletteCtx = paletteCanvas.getContext('2d'); - - paletteCanvas.width = 256; - paletteCanvas.height = 1; - - var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); - for (var key in gradientConfig) { - gradient.addColorStop(key, gradientConfig[key]); - } - - paletteCtx.fillStyle = gradient; - paletteCtx.fillRect(0, 0, 256, 1); - - return paletteCtx.getImageData(0, 0, 256, 1).data; - }; - - var _getPointTemplate = function (radius, blurFactor) { - var tplCanvas = document.createElement('canvas'); - var tplCtx = tplCanvas.getContext('2d'); - var x = radius; - var y = radius; - tplCanvas.width = tplCanvas.height = radius * 2; - - if (blurFactor == 1) { - tplCtx.beginPath(); - tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false); - tplCtx.fillStyle = 'rgba(0,0,0,1)'; - tplCtx.fill(); - } else { - var gradient = tplCtx.createRadialGradient(x, y, radius * blurFactor, x, y, radius); - gradient.addColorStop(0, 'rgba(0,0,0,1)'); - gradient.addColorStop(1, 'rgba(0,0,0,0)'); - tplCtx.fillStyle = gradient; - tplCtx.fillRect(0, 0, 2 * radius, 2 * radius); - } - - return tplCanvas; - }; - - var _prepareData = function (data) { - var renderData = []; - var min = data.min; - var max = data.max; - var radi = data.radi; - data = data.data; - - var xValues = Object.keys(data); - var xValuesLen = xValues.length; - - while (xValuesLen--) { - var xValue = xValues[xValuesLen]; - var yValues = Object.keys(data[xValue]); - var yValuesLen = yValues.length; - while (yValuesLen--) { - var yValue = yValues[yValuesLen]; - var value = data[xValue][yValue]; - var radius = radi[xValue][yValue]; - renderData.push({ - x: xValue, - y: yValue, - value: value, - radius: radius - }); - } - } - - return { - min: min, - max: max, - data: renderData - }; - }; - - function Canvas2dRenderer(config) { - var container = config.container; - var shadowCanvas = this.shadowCanvas = document.createElement('canvas'); - var canvas = this.canvas = config.canvas || document.createElement('canvas'); - this._renderBoundaries = [10000, 10000, 0, 0]; - - var computed = getComputedStyle(config.container) || {}; - - canvas.className = 'heatmap-canvas'; - - this._width = canvas.width = shadowCanvas.width = config.width || +computed.width.replace(/px/, ''); - this._height = canvas.height = shadowCanvas.height = config.height || +computed.height.replace(/px/, ''); - - this.shadowCtx = shadowCanvas.getContext('2d'); - this.ctx = canvas.getContext('2d'); - - // @TODO: - // conditional wrapper - - canvas.style.cssText = shadowCanvas.style.cssText = 'position:absolute;left:0;top:0;'; - - container.style.position = 'relative'; - container.appendChild(canvas); - - this._palette = _getColorPalette(config); - this._templates = {}; - - this._setStyles(config); - } - - Canvas2dRenderer.prototype = { - renderPartial: function (data) { - if (data.data.length > 0) { - this._drawAlpha(data); - this._colorize(); - } - }, - renderAll: function (data) { - // reset render boundaries - this._clear(); - if (data.data.length > 0) { - this._drawAlpha(_prepareData(data)); - this._colorize(); - } - }, - _updateGradient: function (config) { - this._palette = _getColorPalette(config); - }, - updateConfig: function (config) { - if (config.gradient) { - this._updateGradient(config); - } - this._setStyles(config); - }, - setDimensions: function (width, height) { - this._width = width; - this._height = height; - this.canvas.width = this.shadowCanvas.width = width; - this.canvas.height = this.shadowCanvas.height = height; - }, - _clear: function () { - this.shadowCtx.clearRect(0, 0, this._width, this._height); - this.ctx.clearRect(0, 0, this._width, this._height); - }, - _setStyles: function (config) { - this._blur = config.blur == 0 ? 0 : config.blur || config.defaultBlur; - - if (config.backgroundColor) { - this.canvas.style.backgroundColor = config.backgroundColor; - } - - this._width = this.canvas.width = this.shadowCanvas.width = config.width || this._width; - this._height = this.canvas.height = this.shadowCanvas.height = config.height || this._height; - - this._opacity = (config.opacity || 0) * 255; - this._maxOpacity = (config.maxOpacity || config.defaultMaxOpacity) * 255; - this._minOpacity = (config.minOpacity || config.defaultMinOpacity) * 255; - this._useGradientOpacity = !!config.useGradientOpacity; - }, - _drawAlpha: function (data) { - var min = this._min = data.min; - var max = this._max = data.max; - data = data.data || []; - var dataLen = data.length; - // on a point basis? - var blur = 1 - this._blur; - - while (dataLen--) { - var point = data[dataLen]; - - var x = point.x; - var y = point.y; - var radius = point.radius; - // if value is bigger than max - // use max as value - var value = Math.min(point.value, max); - var rectX = x - radius; - var rectY = y - radius; - var shadowCtx = this.shadowCtx; - - var tpl; - if (!this._templates[radius]) { - this._templates[radius] = tpl = _getPointTemplate(radius, blur); - } else { - tpl = this._templates[radius]; - } - // value from minimum / value range - // => [0, 1] - var templateAlpha = (value - min) / (max - min); - // this fixes #176: small values are not visible because globalAlpha < .01 cannot be read from imageData - shadowCtx.globalAlpha = templateAlpha < 0.01 ? 0.01 : templateAlpha; - - shadowCtx.drawImage(tpl, rectX, rectY); - - // update renderBoundaries - if (rectX < this._renderBoundaries[0]) { - this._renderBoundaries[0] = rectX; - } - if (rectY < this._renderBoundaries[1]) { - this._renderBoundaries[1] = rectY; - } - if (rectX + 2 * radius > this._renderBoundaries[2]) { - this._renderBoundaries[2] = rectX + 2 * radius; - } - if (rectY + 2 * radius > this._renderBoundaries[3]) { - this._renderBoundaries[3] = rectY + 2 * radius; - } - } - }, - _colorize: function () { - var x = this._renderBoundaries[0]; - var y = this._renderBoundaries[1]; - var width = this._renderBoundaries[2] - x; - var height = this._renderBoundaries[3] - y; - var maxWidth = this._width; - var maxHeight = this._height; - var opacity = this._opacity; - var maxOpacity = this._maxOpacity; - var minOpacity = this._minOpacity; - var useGradientOpacity = this._useGradientOpacity; - - if (x < 0) { - x = 0; - } - if (y < 0) { - y = 0; - } - if (x + width > maxWidth) { - width = maxWidth - x; - } - if (y + height > maxHeight) { - height = maxHeight - y; - } - - var img = this.shadowCtx.getImageData(x, y, width, height); - var imgData = img; - var len = imgData.data.length; - var palette = this._palette; - for (var i = 3; i < len; i += 4) { - var alpha = imgData.data[i]; - var offset = alpha * 4; - - if (!offset) { - continue; - } - var finalAlpha; - if (opacity > 0) { - finalAlpha = opacity; - } else { - if (alpha < maxOpacity) { - if (alpha < minOpacity) { - finalAlpha = minOpacity; - } else { - finalAlpha = alpha; - } - } else { - finalAlpha = maxOpacity; - } - } - - imgData.data[i - 3] = palette[offset]; - imgData.data[i - 2] = palette[offset + 1]; - imgData.data[i - 1] = palette[offset + 2]; - imgData.data[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha; - } - - // img.data = imgData; - this.ctx.putImageData(imgData, x, y); - - this._renderBoundaries = [1000, 1000, 0, 0]; - }, - getValueAt: function (point) { - var value; - var shadowCtx = this.shadowCtx; - var img = shadowCtx.getImageData(point.x, point.y, 1, 1); - var data = img.data[3]; - var max = this._max; - var min = this._min; - - value = Math.abs(max - min) * (data / 255) >> 0; - - return value; - }, - getDataURL: function () { - return this.canvas.toDataURL(); - } - }; - - return Canvas2dRenderer; - }(); - - var Renderer = function RendererClosure() { - var rendererFn = false; - - if (HeatmapConfig.defaultRenderer === 'canvas2d') { - rendererFn = Canvas2dRenderer; - } - - return rendererFn; - }(); - - var Util = { - merge: function () { - var merged = {}; - var argsLen = arguments.length; - for (var i = 0; i < argsLen; i++) { - var obj = arguments[i]; - for (var key in obj) { - merged[key] = obj[key]; - } - } - return merged; - } - // Heatmap Constructor - };var Heatmap = function HeatmapClosure() { - var Coordinator = function CoordinatorClosure() { - function Coordinator() { - this.cStore = {}; - } - - Coordinator.prototype = { - on: function (evtName, callback, scope) { - var cStore = this.cStore; - - if (!cStore[evtName]) { - cStore[evtName] = []; - } - cStore[evtName].push(function (data) { - return callback.call(scope, data); - }); - }, - emit: function (evtName, data) { - var cStore = this.cStore; - if (cStore[evtName]) { - var len = cStore[evtName].length; - for (var i = 0; i < len; i++) { - var callback = cStore[evtName][i]; - callback(data); - } - } - } - }; - - return Coordinator; - }(); - - var _connect = function (scope) { - var renderer = scope._renderer; - var coordinator = scope._coordinator; - var store = scope._store; - - coordinator.on('renderpartial', renderer.renderPartial, renderer); - coordinator.on('renderall', renderer.renderAll, renderer); - coordinator.on('extremachange', function (data) { - scope._config.onExtremaChange && scope._config.onExtremaChange({ - min: data.min, - max: data.max, - gradient: scope._config.gradient || scope._config.defaultGradient - }); - }); - store.setCoordinator(coordinator); - }; - - function Heatmap() { - var config = this._config = Util.merge(HeatmapConfig, arguments[0] || {}); - this._coordinator = new Coordinator(); - if (config.plugin) { - var pluginToLoad = config.plugin; - if (!HeatmapConfig.plugins[pluginToLoad]) { - throw new Error('Plugin \'' + pluginToLoad + '\' not found. Maybe it was not registered.'); - } else { - var plugin = HeatmapConfig.plugins[pluginToLoad]; - // set plugin renderer and store - this._renderer = new plugin.renderer(config); - this._store = new plugin.store(config); - } - } else { - this._renderer = new Renderer(config); - this._store = new Store(config); - } - _connect(this); - } - - // @TODO: - // add API documentation - Heatmap.prototype = { - addData: function () { - this._store.addData.apply(this._store, arguments); - return this; - }, - removeData: function () { - this._store.removeData && this._store.removeData.apply(this._store, arguments); - return this; - }, - setData: function () { - this._store.setData.apply(this._store, arguments); - return this; - }, - setDataMax: function () { - this._store.setDataMax.apply(this._store, arguments); - return this; - }, - setDataMin: function () { - this._store.setDataMin.apply(this._store, arguments); - return this; - }, - configure: function (config) { - this._config = Util.merge(this._config, config); - this._renderer.updateConfig(this._config); - this._coordinator.emit('renderall', this._store._getInternalData()); - return this; - }, - repaint: function () { - this._coordinator.emit('renderall', this._store._getInternalData()); - return this; - }, - getData: function () { - return this._store.getData(); - }, - getDataURL: function () { - return this._renderer.getDataURL(); - }, - getValueAt: function (point) { - if (this._store.getValueAt) { - return this._store.getValueAt(point); - } else if (this._renderer.getValueAt) { - return this._renderer.getValueAt(point); - } else { - return null; - } - } - }; - - return Heatmap; - }(); - - // core - var heatmapFactory = { - create: function (config) { - return new Heatmap(config); - }, - register: function (pluginKey, plugin) { - HeatmapConfig.plugins[pluginKey] = plugin; - } - }; - - return heatmapFactory; - }); - }); - - function ColorRangeMaker(option) { - var vRange = option.value[1] - option.value[0]; - if (option.color.length === 2) { - // 仅有两个颜色 - var rA = (option.color[1][0] - option.color[0][0]) / vRange; - var gA = (option.color[1][1] - option.color[0][1]) / vRange; - var bA = (option.color[1][2] - option.color[0][2]) / vRange; - this.option = { - vRange: vRange, - rA: rA, - gA: gA, - bA: bA, - option: option - }; - } else { - // 两个以上颜色 - var makers = []; - var vA = vRange / (option.color.length - 1); - for (var i = 1; i < option.color.length; i++) { - var maker = new ColorRangeMaker({ - color: [option.color[i - 1], option.color[i]], - value: [option.value[0] + vA * (i - 1), option.value[0] + vA * i] - }); - makers.push(maker); - } - this.option = { makers, vA, option }; - } - } - - ColorRangeMaker.prototype.make = function (value) { - var makers = this.option.makers; - var rA = this.option.rA; - var gA = this.option.gA; - var bA = this.option.bA; - var vA = this.option.vA; - var option = this.option.option; - if (value < option.value[0]) { - return option.color[0]; - } else if (value > option.value[option.value.length - 1]) { - return option.color[option.color.length - 1]; - } else { - if (option.color.length === 2) { - // 仅有两个颜色 - var color = option.color[0].map(a => a); - var vATmp = value - option.value[0]; - color[0] += parseInt(rA * vATmp); - color[1] += parseInt(gA * vATmp); - color[2] += parseInt(bA * vATmp); - return color; - } else { - for (var i = 1; i < option.color.length; i++) { - if (value <= option.value[0] + vA * i) { - return makers[i - 1].make(value); - } - } - } - } - }; - - function resetGradient(max, min) { - var colorRange = new ColorRangeMaker({ - color: [[48, 35, 174], [83, 160, 253], [180, 236, 81], [255, 163, 1], [251, 0, 0]], - value: [0, 100] - }); - var rangeArea = [0, 0.2, 0.41, 0.81, 1]; - var color = {}; - var DValue = max - min; - for (var i = 0; i < rangeArea.length; i++) { - var colorList = colorRange.make(min + rangeArea[i] * DValue); - var rgb = 'rgb(' + colorList.join(',') + ')'; - color[rangeArea[i]] = rgb; - } - return color; - } - - var html$3 = ""; - var heatmap$1 = null; - function heatmap$2 () { - createElement('div', { - id: 'arkHeatmapLocation', - class: 'ark-heatmap-location', - content: html$3 - }, document.getElementById('arkHeadmapBody')); - setHeatMapSize(); - } - // 设置热图容器大小 - function setHeatMapSize() { - var arkHeatmapLocation = document.getElementById('arkHeatmapLocation'); - var width = document.documentElement.scrollWidth; - var height = document.documentElement.scrollHeight; - arkHeatmapLocation.style.width = width + 'px'; - arkHeatmapLocation.style.height = height + 'px'; - var canvas = arkHeatmapLocation.querySelector('canvas'); - if (canvas) { - canvas.width = width; - canvas.height = height; - } - } - // 热图展示与隐藏 - function heatmapDisplay() { - document.getElementById('arkHeatmapLocation').style.display = heatConfig.heatMapShow && heatConfig.heatMapType === 'location' ? 'block' : 'none'; - } - function emptyHeatmap() { - document.getElementById('arkHeatmapLocation').style.display = 'none'; - } - // 渲染热图 - function renderHeatmap(data) { - heatmapDisplay(); - if (!heatmap$1) { - heatmap$1 = heatmap.create({ - container: document.getElementById('arkHeatmapLocation'), - radius: 15, - gradient: { - 0: '#3023ae', - 0.2: '#53a0fd', - 0.4: '#b4ec51', - 0.8: '#ffa301', - 1: '#fb0000' - }, - backgroundColor: "rgba(0,0,0," + (1 - displayConfig.backgroundTransparent) + ")", - maxOpacity: 0.65, - minOpacity: 0.2 - }); - } - var point = []; - var pageWidth = document.documentElement.scrollWidth; - for (var i = 0; i < data.length; i++) { - var o = data[i]; - var el = getPathEle(o.$element_path); - if (!el) { - continue; - } - var eleXPostion = getEleOffset(el); - if (!eleXPostion || eleXPostion.hidden) { - continue; - } - // 比例 - var proportion = pageWidth / o.$page_width; - point.push({ - x: eleXPostion.left + Math.ceil(o.$element_x * proportion), - y: eleXPostion.top + o.$element_y, - value: 1 - }); - } - heatmap$1.setData({ - min: 0, - max: 10, - data: point - }); - } - // 修改热图配置 - function setHeatMapConfig() { - heatmap$1.configure({ - backgroundColor: "rgba(0,0,0," + (1 - displayConfig.backgroundTransparent) + ")", - gradient: resetGradient(displayConfig.max, displayConfig.min) - }); - } - var renderTime = null; - function resetRenderHeatMap() { - clearTimeout(renderTime); - renderTime = setTimeout(function () { - if (heatMapData) { - emptyHeatmap(); - setHeatMapSize(); - renderHeatmap(heatMapData); - } - }, 200); - } - function heatMapResize() { - window.addEventListener('resize', function () { - resetRenderHeatMap(); - }); - } - heatMapResize(); - - var css_248z$4 = ".ark-page-line {\n z-index: 5002;\n position: absolute;\n width: 100%;\n height: 1px;\n left: 0;\n border-bottom: dashed 1px #262d39; }\n .ark-page-line.ark-mouse-lines {\n border-bottom-style: solid; }\n .ark-page-line .ark-page-line-value {\n background-color: #262d39;\n font-size: 14px;\n padding: 8px 16px;\n border-radius: 0 4px 0 0;\n position: absolute;\n left: 0;\n bottom: -1px;\n color: #fff; }\n .ark-page-line .ark-page-mouse-line-value {\n left: 50%;\n border-radius: 4px 4px 0 0;\n padding: 8px 0;\n width: 190px;\n text-align: center;\n margin-left: -95px; }\n\n.ark-headmap-body-line-none .ark-page-line {\n display: none; }\n"; - styleInject(css_248z$4); - - var lineTpl = function (value) { - return "
    " + value + "%
    "; - }; - var mouseLineTpl = "
    "; - // 显示或隐藏深度线 - function displayLines() { - var body = document.querySelector('body'); - var className = body.className; - if (displayConfig.lineShow || heatConfig.heatMapType === 'lines') { - body.className = className.replace(/ ark-headmap-body-line-none/g, ''); - } else { - if (className.indexOf('ark-headmap-body-line-none') === -1) { - body.className = className + ' ark-headmap-body-line-none'; - } - } - } - var linesData = null; - /** - * 渲染深度线 - */ - function setMouseLine(event) { - var e = event || window.event; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - var y = e.pageY || e.clientY + scrollY; - var num = y; - var lineNum = Math.floor(num / 10); - var detail = linesData.detail || []; - if (detail.length === 0) { - return; - } - var uv = linesData.uv; - var value = 0; - if (lineNum < detail.length) { - value = Math.ceil(detail[lineNum] / uv * 10000) / 100; - } - var mouseLineEle = document.getElementById('arkMouseLine'); - if (!mouseLineEle) { - mouseLineEle = createElement('div', { - id: 'arkMouseLine', - class: 'ark-page-line ark-mouse-lines', - content: mouseLineTpl - }); - } - document.getElementById('arkMouseLineValue').innerHTML = value + '% 的人浏览到了这里'; - mouseLineEle.style.top = y + 5 + 'px'; - } - function renderLines(data) { - linesData = data; - var uv = data.uv; - var pageHeight = document.documentElement.scrollHeight || document.body.scrollTop; - // 切割成n块 - var blockNum = Math.ceil(pageHeight / 10); - for (var i = 0; i < blockNum; i++) { - var value = data.detail[i] ? (data.detail[i] / uv * 100).toFixed(2) : 0; - var top = i * 10; - if (top > 500 && i % 20 === 0) { - createElement('div', { - class: 'ark-page-line', - content: lineTpl(value), - style: { - top: top + 'px' - } - }); - } - } - document.removeEventListener('mousemove', setMouseLine); - document.addEventListener('mousemove', setMouseLine); - } - - // 创建视图 - function createView() { - createElement('div', { - id: 'arkHeadmapBody', - class: 'ark-headmap-body' - }); - if (window.top === window.self) { - getUrlArkcontentText(); - nav(); - } - heatmap$2(); - loading(); - tips(); - render(); - } - // 渲染深度线数据 - function renderLinesData() { - getLinesData(function (res) { - renderLines(res.datas); - }); - } - // 渲染热图 - function render() { - if (!arkcontent) { - return; - } - if (heatConfig.heatMapType === 'lines') { - renderLinesData(); - } else { - // 获取热图数据 - getHeatmapData(function (res) { - if (heatConfig.heatMapType === 'location') { - // 渲染热图 - renderHeatmap(res.datas); - } - if (heatConfig.heatMapType === 'element') { - renderElement(res.datas); - } - }); - } - } - - const getAttrKeys = function(attrs) { - let dataAttr = {}; - for (let i = 0; i < attrs.length; i++) { - let item = attrs[i]; - let temp = { - key: item.name, - value: item.value - }; - dataAttr[temp.key] = temp.value; - } - return dataAttr; - }; - let fixEvent = function(e) { - if (!e.target) { - e.target = e.srcElement; - e.pageX = e.x; - e.pageY = e.y; - } - if (/mouseover/i.test(e.type) && !e.relatedTarget) { - e.relatedTarget = e.fromElement; - } else if (/mouseout/i.test(e.type) && !e.relatedTarget) { - e.relatedTarget = e.toElement; - } - return e; - }; - const eventAgent = (evt, func) => { - const evt1 = fixEvent(evt); - const actEl = evt1.currentTarget; - let el = evt1.target, actionType, isFind, attr; - while (el && el !== actEl) { - actionType = el.getAttribute("event-agent") || ""; - actionType = actionType.trim().toLowerCase().split(","); - if (actionType.indexOf(evt1.type.toLowerCase()) !== -1) { - attr = getAttrKeys(el.attributes); - isFind = true; - break; - } - el = el.parentNode; - } - isFind && func && func(el, attr); - }; - - // 控制器列表 - var controllerList = { - // 刷新 - refresh: function () { - arkcontent.useCache = false; - render(); - arkcontent.useCache = true; - }, - // 热图类型切换 - heatmapTab: function (e, attrs) { - emptySelected(); - var type = attrs['heat-type']; - heatConfig.heatMapType = type; - setSelected(); - toolDisplay(); - heatmapDisplay(); - elementDisplay(); - displayLines(); - render(); - }, - // 热图显示 - heatmapSwitch: function () { - heatConfig.heatMapShow = !heatConfig.heatMapShow; - heatSwitch(); - heatmapDisplay(); - elementDisplay(); - }, - // 深度线显示与隐藏 - displayDepth: function () { - displayConfig.lineShow = !displayConfig.lineShow; - displayDepth(); - displayLines(); - renderLinesData(); - }, - // 展开收起 - navOpen: function () { - heatConfig.isOpen = !heatConfig.isOpen; - navOpen(); - } - }; - function viewController () { - document.getElementById('arkHeadmapBody').addEventListener('click', function (event) { - eventAgent(event, function (e, attrs) { - var controllerName = attrs['controller-name']; - controllerList[controllerName](e, attrs, event); - }); - }); - } - - function chartDisplay() { - heatmapDisplay(); - elementDisplay(); - } - function iframeMessage () { - // 给上层窗口发送消息 - window.parent.postMessage(JSON.stringify({ - code: 'ark/heatmap', - appkey: globalWindow.AnalysysAgent.config.appkey - }), '*'); - // 监听ifram发送过来的消息 - window.addEventListener('message', function (event) { - var data = event.data; - console.log(data); - var msgTypeMap = { - 'ark/heatmap': 'location', - 'ark/depth': 'lines', - 'ark/element': 'element', - 'ark/attention': '1' - }; - var type = msgTypeMap[data.code]; - if (type) { - setArkcontent(data.content); - heatConfig.heatMapType = type; - heatConfig.heatMapShow = true; - var controlType = data.control.type; - if (data.control.type === 'refresh') { - arkcontent.useCache = false; - } - // 显示隐藏热图 - if (data.control.type === 'closeHeatMap') { - heatConfig.heatMapShow = false; - chartDisplay(); - } else if (data.control.type === 'closeDepth' && displayConfig.lineShow) { - // 关闭深度线 - displayConfig.lineShow = false; - displayLines(); - } else if (data.control.type === 'openDepth' && !displayConfig.lineShow) { - // 打开深度线 - displayConfig.lineShow = true; - displayLines(); - chartDisplay(); - renderLinesData(); - } else if (controlType === 'heatmapOpacity') { - //热图背景调整 - displayConfig.backgroundTransparent = data.control.value.opacity; - setHeatMapConfig(); - } else if (controlType === 'heatmapcolorRange') { - displayConfig.min = data.control.value.min; - displayConfig.max = data.control.value.maxValue; - setHeatMapConfig(); - } else { - chartDisplay(); - render(); - } - } - }); - } - - storeInit(); - document.addEventListener('readystatechange', function () { - if (document.readyState === 'complete') { - // 添加热图视图 - createView(); - // 添加视图控制器 - viewController(); - if (window.top !== window.self) { - iframeMessage(); - } - } - }); - -}()); diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.css b/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.css deleted file mode 100644 index e52dcd2..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.css +++ /dev/null @@ -1,932 +0,0 @@ -.ARK_BOX { - position: fixed; - width: 390px; - height: 100%; - background-color: #ffffff; - border-radius: 4px; - z-index: 10000000000 !important; - background: #ffffff; - color: #000000; - box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - -webkit-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15); - padding: 20px 17px; - font-size: 16px; - top: 0; - right: 0; - font-family: PingFangSC-Medium; } - -.ARK_BOX input[disabled] { - cursor: not-allowed; } - -.ARK_BOX .ARK_TITLE { - width: 72px; - font-size: 18px; - font-weight: normal; - font-stretch: normal; - line-height: 18px; - letter-spacing: 0px; - color: #333333; - font-family: inherit; } - -.ARK_BOX .fl { - float: left; } - -.ARK_BOX .pb-20 { - padding-bottom: 20px; } - -.ARK_BOX .textR { - text-align: right; } - -.ARK_BOX button { - border: 0; } - -.ARK_BOX button:focus, .ARK_BOX button:active { - border: 0; - outline: 0; } - -.ARK_BOX .ARK_TITLE.MID { - font-size: 14px; - line-height: 14px; - color: #252d39; - font-weight: 500; - line-height: 1.1; - color: inherit; } - -.ARK_BOX .ARK_TITLE.SM { - font-size: 13px; - line-height: 33px; - color: #4c6072; - width: 56px; - display: inline-block; - text-align: right; } - -.ARK_BOX_HEADER { - font-size: 16px; - text-align: left; - color: #333333; - cursor: move; - z-index: 1; - position: absolute; - top: 0; - width: 100%; - padding: 20px 17px 29px 17px; - left: 0; - background-color: #ffffff; } - -.ARK_CONTENT { - height: 100%; - position: relative; - /* top: 170px; */ - width: 100%; - left: 0; - /* padding: 0 17px; */ - padding-top: 165px; } - -.ARK_EVENT { - position: absolute; - top: 70px; - width: 100%; - background-color: #ffffff; - left: 0; - padding: 0 17px 10px 17px; - z-index: 1; } - -.ARK_BOX_PAGE { - position: relative; - color: #666666; - font-size: 12px; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper, .ARK_BOX_PAGE .v-radio-wrapper { - font-size: 14px; - line-height: 30px; - color: #252d39; - font-weight: 400; - font-stretch: normal; - cursor: pointer; - font-size: 14px; - display: inline-block; - margin-right: 16px; } - -.ARK_BOX_EVENT_ID label, .ARK_BOX_PAGE label { - font-size: 12px; - bottom: 0; - margin: 0; - max-width: 100%; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper span, .ARK_BOX_PAGE .v-radio-wrapper span { - font-size: 12px; - color: #999; - font-weight: 400; - font-stretch: normal; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper span.wbText, .ARK_BOX_PAGE .v-radio-wrapper span.wbText { - font-size: 14px; - color: #333; - font-weight: 400; } - -.ARK_BOX_EVENT_ID .v-radio-ARK, .ARK_BOX_PAGE .v-radio-ARK { - vertical-align: middle; - white-space: nowrap; - cursor: pointer; - outline: 0; - line-height: 1; - position: relative; - display: inline-block; - margin-right: 8px; } - -.ARK_BOX_EVENT_ID .boxRadio, .ARK_BOX_PAGE .boxRadio { - width: 270px; - display: inline-grid; } - -.ARK_BOX_PAGE .ml-24 { - margin-left: 24px; } - -.ARK_BOX_PAGE.mb-15 { - margin-bottom: 15px; } - -.ARK_BOX_PAGE.mb-16 { - margin-bottom: 16px; } - -.ARK_BOX_EVENT_ID.mb-40 { - margin-bottom: 40px; } - -.ARK_BOX .ml-12 { - margin-left: 12px; } - -.ARK_BOX .mr-12 { - margin-right: 12px; } - -.ARK_BOX .mr-25 { - margin-right: 25px; } - -.ARK_BOX .ml-8 { - margin-left: 8px; } - -.ARK_BOX .fr { - float: right; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-checked .v-radio-inner { - border-color: #0098e1; - background-color: #0098e1; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner { - border-color: #ddd; - background-color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner { - background-color: #fff; - border-radius: 7px; } - -.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner:after { - background-color: #0098e1; } - -.ARK_BOX_EVENT_ID .v-radio-inner:after, .ARK_BOX_PAGE .v-radio-inner:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - transition: all .2s ease-in-out; } - -.ARK_BOX_PAGE .v-radio-inner { - width: 14px; - height: 14px; - top: 0; - left: 0; - border: 1px solid #d7dde4; - border-radius: 2px; - background-color: #fff; - transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out; - position: relative; - display: inline-block; } - -.ARK_BOX_EVENT_ID .v-radio-inner { - width: 14px; - height: 14px; - top: 0; - left: 0; - border: 1px solid #d7dde4; - border-radius: 7px; - background-color: #fff; - transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out; - position: relative; - display: inline-block; } - -.ARK_BOX_PAGE .v-radio-checked .v-radio-inner:after { - transform: rotate(45deg) scale(0.8); } - -.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled { - color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled .wbText, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled .wbText { - color: #ddd; } - -.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper-disabled { - cursor: not-allowed; - color: #ddd; } - -.ARK_BOX_PAGE .v-radio-inner:after { - content: ""; - display: inline-block; - width: 4px; - height: 8px; - position: absolute; - top: 1px; - left: 4px; - border: 2px solid #fff; - border-top: 0; - border-left: 0; - -ms-transform: rotate(45deg) scale(0); - transform: rotate(45deg) scale(0); - transition: all .2s ease-in-out; } - -.ARK_BOX_EVENT_ID .v-radio-inner:after { - content: ""; - width: 8px; - height: 8px; - border-radius: 4px; - top: 2px; - left: 2px; - transition: all .2s ease-in-out; - display: inline-block; - position: absolute; - transition: all .2s ease-in-out; } - -.ARK_BOX_EVENT_ID input[type=checkbox], -.ARK_BOX_EVENT_ID input[type=radio], -.ARK_BOX_PAGE input[type=checkbox], -.ARK_BOX_PAGE input[type=radio] { - margin: 4px 0 0; - margin-top: 1px; - line-height: normal; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; } - -.ARK_BOX_EVENT_ID .v-radio-input, .ARK_BOX_PAGE .v-radio-input { - width: 100%; - height: 100%; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 1; - cursor: pointer; - opacity: 0; } - -.ARK_BOX_CENTER { - line-height: 16px; - font-size: 16px; } - -.ARK_BOX_SMALL { - font-size: 12px; - line-height: 30px; - color: #999999; } - -.ARK_BOX_SMALL span { - color: #0097e0; } - -.ARK_BOX_EVENT_ID { - position: relative; - margin-bottom: 6px; } - -.ARK_BOX .ARK_title { - /* width: 70px; */ - /* height: 36px; */ - text-align: right; - /* display: inline-block; */ - font-size: 14px; - line-height: 36px; - margin-right: 9px; - color: #666666; } - -.ARK_BOX ul, .ARK_BOX li { - list-style: none; } - -.ARK_BOX .PROLIST { - margin: 0; - padding: 0; - margin-top: 10px; - max-height: 360px; - border: 1px solid transparent; } - -.ARK_BOX_EVENT_ID input, .ARK_BOX_PAGE input, .ARK_BOX_EVENT_ID select { - width: 274px; - height: 30px; - background-color: transparent; - border-radius: 0px; - border: 0; - border-bottom: 1px solid #d2d2d2; - color: #333333; - font-size: 14px; - line-height: 30px; - outline: 0 none !important; - margin-left: 16px; } - -.ARK_BOX_EVENT_ID input.error { - border-color: #e00000; } - -.ARK_BOX_EVENT_ID input.PROID { - width: 246px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX_EVENT_ID input.PROVALUE { - width: 188px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX_EVENT_ID input.PROVALUE.width246 { - width: 246px; } - -.ARK_BOX_EVENT_ID input.PROREX { - width: 216px; - margin-left: 12px; - background-color: #f4f9fd; } - -.ARK_BOX .PROTYPE, .ARK_BOX .PAGETYPE { - width: 246px; - margin-left: 12px; - background-color: #f4f9fd; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAIxJREFUCB1jzG9dJv6f6Zf/pMqEWQxYQF77vBQmDtatTAyMfxT+//vXn9c6vwldXV77/FqG/4yT/n//L8c0sSruJDMTg+9/hv/FyIpBiv7/+1/BxPjfB6SGEWZKQfs8p7//GDYzMjD2MjAx/AYpAhkwoTJpH0gNXCGIA1MMYiMrAvExQG7bInsQRpcAAB00POpoifV7AAAAAElFTkSuQmCC) no-repeat scroll right center transparent; - cursor: pointer; } - -.ARK_BOX input::-webkit-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:-ms-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input::placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:focus, .ARK_BOX input:hover { - border-color: #57a3f3; } - -.ARK_BOX input::-webkit-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:-ms-input-placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input::placeholder { - font-size: 14px; - color: #bbbec4; } - -.ARK_BOX input:focus, .ARK_BOX input:hover { - border-color: #57a3f3; } - -.ARK_BOX_EVENT_ID_ERROR { - display: none; - position: absolute; - bottom: -19px; - left: 79px; - font-weight: 700; - font-size: 12px; - color: red; } - -.ARK_BOX_ChOICE { - width: 199px; - height: 95px; - float: left; - position: relative; - border-bottom: 1px solid #f1f1f1; } - -.ARK_BOX_ChOICE .ARK_BOX_LIKENUM { - font-size: 12px; - color: #0098e1; - line-height: 30px; - width: 100%; } - -.ARK_BOX_ChOICE span { - float: left; - margin-left: 18px; } - -.ARK_BOX_ChOICE input { - opacity: 0; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - margin: 0; - padding: 0; } - -.ARK_BOX_ChOICE input + label { - position: absolute; - cursor: pointer; - right: 10px; - top: 0; - width: 20px; - height: 20px; - font-size: 18px; - line-height: 18px; - text-align: center; - color: #999999; } - -.ARK_BOX_ChOICE input + label:after { - content: '+'; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - border: 1px dashed #d4d4d4; } - -.ARK_BOX_ChOICE input + label:before { - content: ''; - position: absolute; - right: 10px; - top: 0; - width: 20px; - height: 20px; - border: 1px dashed #d4d4d4; } - -.ARK_BOX_ChOICE input:checked + label:after { - content: '+'; - color: #0098e1; - border: 1px dashed #0098e1; } - -.ARK_BOX_ChOICE input:checked + label:before { - content: '+'; - color: #0098e1; - border: 1px dashed #0098e1; } - -.ARK_BOX_SAVE { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - border-top: 1px solid #e5eef4; - height: 60px; - padding-top: 13px; - /* padding: 15px; */ - background-color: #ffffff; - padding-left: 245px; } - -#ARK_BOX_SAVE { - -moz-user-select: none; - -ms-touch-action: manipulation; - -ms-user-select: none; - -o-transition: color .2s linear, background-color .2s linear, border .2s linear; - -webkit-transition: color .2s linear, background-color .2s linear, border .2s linear; - -webkit-user-select: none; - cursor: pointer; - display: inline-block; - font-size: 12px; - font-weight: 400; - line-height: 1.5; - margin-bottom: 0; - padding: 6px 15px; - text-align: center; - touch-action: manipulation; - transition: color .2s linear, background-color .2s linear, border .2s linear; - user-select: none; - vertical-align: middle; - white-space: nowrap; - width: 60px; - height: 32px; - border-radius: 15px; - cursor: pointer; - color: #ffffff; - border: 0; - background-color: #0098e1; - outline: 0 none !important; } - -#ARK_BOX_SAVE:active { - background-color: #0086c7; - border-color: #0086c7; - color: #f2f2f2; } - -#ARK_BOX_SAVE:hover, -#ARK_BOX_SAVE:focus { - background-color: #47c3ff; - border-color: #47c3ff; - color: #fff; } - -#ARK_BOX_CANCEL { - /* margin-top: 15px; */ - width: 60px; - height: 32px; - /* float: right; */ - font-size: 14px; - line-height: 30px; - border: 0; - background-color: #ffffff; - color: #999999; - cursor: pointer; - outline: 0 none !important; } - -#ARK_BOX_CANCEL:focus, -#ARK_BOX_SAVE:focus { - border: 0; } - -.ARK_EVENT_LIST { - border: 0; - border: 1px solid #eeeeee; - border-radius: 5px; - background: #ffffff; - color: #000000; - -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - -moz-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; - min-width: 80px; - min-height: 13px; - position: absolute; - top: 20px; - left: 500px; - padding: 0; - max-width: 250px; - z-index: 100000; } - -.ARK_EVENT_LIST a.ARK_EVENT { - max-width: 110px; - height: 24px; - line-height: 24px; - color: #0098e1; - margin: 5px; - text-align: center; - overflow: hidden; - text-overflow: ellipsis; - display: block; - text-decoration: underline !important; - cursor: pointer; } - -.ARK_SHOW { - display: block !important; - visibility: visible !important; } - -.debugLog { - top: 0; - left: 0; - position: absolute; - width: 260px; - min-height: 270px; - padding: 20px; - z-index: 999999999; } - -.debugLog .l-list { - position: relative; - overflow: hidden; } - -.debugLog .l-list div { - color: #ffffff; - font-size: 13px; - line-height: 24px; - word-break: break-word; } - -.debugLog .bg { - width: 100%; - height: 100%; - background-color: rgba(47, 50, 58, 0.8); - box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.12); - border-radius: 4px; - position: absolute; - top: 0; - left: 0; } - -.debugLog .cha { - position: absolute; - right: 20px; - color: rgba(255, 255, 255, 0.5); - top: 20px; - cursor: pointer; - font-size: 14px; - width: 10px; - height: 10px; - cursor: pointer; } - -.ARK_HOVER, .ARK_CLICK { - outline: 1px solid #e00000 !important; - outline-offset: -1px !important; - /*position: absolute;*/ - /*background-color: red !important*/ } - -.ARK_SHOW_DISPOSE { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(20, 137, 226, 0.2); - border: dashed 3px #1489e2 !important; } - -.ARK_SHOW_DISPOSE.ARK_NO_LIGHT { - display: none !important; } - -.ARK_SHOW_DISPOSE:hover, .ARK_SHOW_DISPOSE.ARK_NO_LIGHT:hover { - background-color: rgba(20, 137, 226, 0); } - -.ARK_SAVE_DISPOSE { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(20, 137, 226, 0.2); - border: solid 3px #1489e2; } - -.ARK_SAVE_CLICK { - position: absolute !important; - z-index: 999999999 !important; - background-color: transparent; - border: solid 3px #1489e2; } - -.ARK_IS_EDIT { - position: absolute !important; - bottom: -21px !important; - left: -3px !important; - background-color: #1489e2 !important; - font-size: 12px !important; - line-height: 12px !important; - color: #ffffff !important; - padding: 3px 5px !important; - white-space: nowrap; - margin: 0 !important; - display: block !important; } - -.ARK_SAVE_DISPOSE.ARK_NO_LIGHT { - display: none !important; } - -.ARK_SAVE_DISPOSE:hover, .ARK_SAVE_DISPOSE.ARK_NO_LIGHT:hover { - background-color: rgba(20, 137, 226, 0); } - -.ARK_SAVE_PRO { - position: absolute !important; - z-index: 999999999 !important; - background-color: rgba(255, 163, 0, 0.1); - border: solid 2px #ffa300; } - -.ARK_SAVE_PRO.ARK_NO_LIGHT { - display: none !important; } - -.ARK_NONE { - display: none; } - -.ARK_CLICK_ELE { - position: absolute !important; - /* width : 2px; - height : 2px; */ - z-index: 999999999 !important; - display: none; - /* background-color: rgba(0, 0, 0, 0.3); */ - /* background-color: rgba(20, 137, 226, 0.2); */ - border: solid 3px #1489e2; - /* transform:none */ } - -.ARK_PRO_ELE { - position: absolute !important; - /* width : 2px; - height : 2px; */ - z-index: 999999999 !important; - display: none; - /* background-color: rgba(0, 0, 0, 0.3); */ - /* background-color: rgba(20, 137, 226, 0.2); */ - border: solid 3px #ffa300; - /* transform:none */ } - -.ARK_ADD_PRO { - width: 100%; - height: 40px; - background-color: #f4f9fd; - border: 0; - border-radius: 4px; - margin-bottom: 20px; - margin-top: 10px; - color: #1489e2; } - -.ARK_ADD_PRO img { - margin-right: 9px; - margin-bottom: 3px; - width: 11px; - height: 11px; - vertical-align: middle; - position: relative; - display: unset; - font-family: inherit; - font-size: inherit; - line-height: inherit; } - -.ARK_PRO_ITEM { - background-color: #f4f9fd; - border: 0; - border-radius: 4px; - margin-top: 10px; - padding: 20px 16px; - display: inline-block; - position: relative; } - -.ARK_ICON { - width: 24px; - height: 24px; - display: block; - margin-left: 4px; - margin-top: 6px; } - -.ARK_ICON.ICON_XQ { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAelJREFUSA3VVs0rRFEUP+d6UdQg7PwBFmwsZGspbHxtNGJDFjNRU2bykZJBioyiLGawZC//gKyQj8X4LLKRkiym8N49zp28STPPu9M0s3Dqde89H7/fOfed++7Do5OrVkLYJKJayKMg4hMSDBkKXAAMNzfW7ecRHw5Pr9sAaRMOT+KUT+DfWAqbky+sFJzAyCb/wNJO2eeXNQ8E3YTEZeNuZVX1xMxwR0IXnxXB55cZJYJ2ELCBAEJKGHl9falmcK+OQLtFvvBuDYP3AooAEHr4KWaSIBH2ja7EKnQE2goM/Cg3uc+EkPfSgnXVciiwFSRv1ofh4eWbG4m2gpWQ95YBHhCKUr6CGRDwZjXY/+gGrmzaCpQTCtGFUpaqeVIkvRtFRo+9dBtTWbk5RUIDxyaUxW2fElF6uRz0ntlrtzErgnSAhEwE/HM79el6p3VOBEByktA694eje2MLsQYnYFuXG4GK5j7l9u02JZz5wluzNmD66PqSxxa3m6RlDUgQF4CJOz7JmcJEiNTJhqlMo6aLTClbGHQEQHLGTuE/OsK7v6yuW7QWGlzklp/+KzilF6TOiqO4EqiISGhwVkfChy53ghQJinGeZ3w9+Ug/Cyg+UH6O8v9vNHX7Jy9ox/pyVyrM5J9FoX9bvgFfDa+ln7mJKwAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_XQ:hover { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd1JREFUSA3dljlLA1EQgGde4i2aIiESVPwB2tpbilYabUSwUqwEjQd4NCkkRhQsFFL4A7QX/4SFRyF4gEnwiuAFKnH3jbOrayRu9oWYNAaS3fdm5vvevF2yi77lRCfpEAOgRijqB5PogmG3AUeEkdRU804x+d5osot0ioE3Eqdign+yDLb4OVGK85IL3Pms2h+9rpH0vghEQUIgJNgq87hnL0cCL6r6vARSpjcBsJtQbAiQgi/aaPpR9zJ8UCVQblHD2pWPgf2IGBJEdQRYDogzDB5oWb33qATKDnRNqzchQp5LHdaBbSzr5O3CtHit49iDk0TZQWq86ZSJF7zyTK4wHHhyORaIO8GNmLIDEyBcvSChGkAzhyjFE7iozxwofjKrcki8CwX2XJV4bKXU1lcd3U407ltjp2NegmzA8+NLyB+Nt2bP240LEhDJOZ3wwBdJbPtXEm12YGuuIIFZzHcRAQV1DfZ9S8mwBcw+Ol7khpVEu6bRkABxKN/oLLv4W4TUw+fzdnFHgf4OHVw0KvkWAvNrhzDn7OUcctyi1HRThDMWcmK/Agw5zZXjKDCK7iabw0oJ/UFgSQTiNAL++vdEgBssr9jN1cG/eKJh0nhA52yxwMAnk98sSv3a8gEW3qVw8YWlQQAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_XQ.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd5JREFUSA21VksvA1EYPbcvfUTr0SKUKIkm3SBIhA0bicR/YCFYCz9CIuwtLST+gKTCko2FV1dEE1rxiFIh02o7ve6dZph4zL2k/ZLJfczcc8733TMzlwSWE+NUxRpAgyhrkCSxYob4lxKJ+SFfsLvJUVb4o9scVvefkxauvNzgXGmPJpgGGUFlo+IENhn96WwRGycviN3n4XEQjLa7MN7lBpFYLCRQi8DKfhpPmSLGOl14UFRsxl5RpMBE2C2kEJboPJXDZbqA2X4v4k95BH12jIRc2IlnhOD8ASGBUijhUEJxzKwXPVcQqrUhU2CpSYSQIFxvg83KzExLFWeV0Wof8dsl4CUy8DgsmOv3gbAM9Ai4rZjs9epD01aYAV890FIFu+XTM5EGB2qcUkvFe/BVHq/91pnCXKV+vfXjWE6GYWk2TzWbLmynsH78ikcB0Z8JdK4CS2D3QsFiNIW9q6w+/a01fdEOb3I4vctptlTp5yYbUbhbj27fMNzmNE5/9E0JDq6zpup0lICH+fiXMC3RdJ8Xg60/KzPiNf6XgDuTfyJEJP8m4Cp1ktEOl9Y3Kuf9Zq8Vobrf32rTPdDBOMlUT7V26XOyrekeyIKYPccISJL/oMsdJUx2sqj0seUdh92PWTODHHwAAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_REX { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAphJREFUSA3VVk1oE0EUnrfZxpRqCoVajCKJMbWIpa2mklLQm9CKF1HwIIgitAdPoicFo1i8K168CSIIgvTi1VOTCpIfQkvW0qQk0Vil21Rl02ySfb4Rp7i7LkpJDg7svnlv3vu+N29mZxbiCWUCgT1BxH2sRQ0Y0xjArLRTmoZYUilKjE1FRg69bhE+S6c/dWlG5REi09lcIoutAv4dZz6T66PkVyn59rTI4IFVKvvuthGItNtOIAsmq6TpSVTDtwyYF5DVaDzm9njuhg/7y3PJ7DPSR3kMH5M75NPHBw8WuW5tjgQrKytucg7v6PN2Ges1b72m39Rrmy/JNg4Ix8Al3ZABFxrNDmP0iL9kBRa6I4FwCPt8GvW1bPZLVK2qlXw+7ymv64y2YGl0qD8n/JzkP60BL9d6VT3LkOUCgcAmB6PA3kS24Hu3vNztBM7tf50B38ux1Pvv9HXmJNl1QYAZRvNpVdN0YLBItglht0obAZVi15qmRsnxFgAYBPAQGZ53e+Vz4WBwYwtAck2OD4eSQp9LKjOdnZ2Pjw7s/yhsXNpKpOrqXmA4LZzGRvpniOSN/rU+y+sv7DaJeLFeqwatdhsBZU3VMLex4dB1hlAoV/TnfD1+jmLzZDy9dGY+tXTK7G3WbARi2O/36/QN3Oc6cSLN5AqVajGTKXTT6fuCrCfQMC7zJ7ZQ7BFxVmlbA8qQDj8+DzDI+Y4IIL1B/du/9KiwC0mHpuiapI2gx93zYa2pSvGkchVcrq1FNEVZFDQaQTTYHmRS3jJk36YDA73f4inlkoF4jzWajlM3A8EGSHAtMhQqme2ktes+4EQc23GRbZls0/D/EvArk3beZ4lepfmkMrnNCvwxjF/62NAf0JH7Ctr92/ID4uMOd90r/84AAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_REX:hover { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAApdJREFUSA3VVk1oE1EQnnmbxNTSVEq3wSQFsQcvXsR6VbwUWtGDKHgQbEVIDyK2te1BwSgWSSoiahE9aAURBEF68aonwZO3gpco2STabq2GNml+d5wHfSW72yCU5ODCMv/fvJl5+96ifs8YpBo8A6AINOlBwAIiLAT8u0exO24YLETNqd73TcKH4OzPdsuqPiK0ytAdT1GzgOtxeh4sBfWEsSTqlc3kl68Gl4iop2UJ1GJbnsCjMjlpjEg8njU+I2GAbSVC+gTetlsrY/qP7oTxCgmObMaUvB5xIjsRNpwYUm5Ywfw8+ICg37tHOwS4a0AQ5LFcfLsJclgIcU34fIOaz3MqMx5KbwcudQ0rUAHZaKjAfOFA3Iz9guKffS/Iv26mwRKQNseCSemHY8rbTRtWUO8q27WqlU4jQPL7CBalDWuo98bN0P6nq531vk7+nxXIvTyXMNYJIQma55wCIKi+3IBauZiDRdYNKr2TuhJwKzp+w0aMHa/zOi1AfMizOBvobD+TjHbltgA0bWhlIvxFyXoiNeOntjljWs8qnaSuFq1plTABjionczIyw+fUh7VcfkH2X+mdlAjPF7HS59S7EpAG3Gr7szzVO84tSuXN9Gs5D2kli44FZzMnexLZAbu3XXIlUObhYSgLhDtSRkQ62B+5CESLz5/kOnnLvkGioxZZI8Rv5L7RpeKc1DUDrHHH+byNIfcf4KYK+Hgcq8zf2JRjSq8on8qKtVFXgo6aN7OKVcFf6yUQ2tYQbVEOAcnq40r2+vzWN4fJ/aF9ndbX9ETmAgfdBqvWsHQ7EPHuEpczVyJpu56lVt0HMpHEbjhk10p2qPh/E8grk7f3MleAaT5vhnbYgW3D5KVPpcpdAnqHrf5t+QvWh/ZinlE//gAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_REX.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAoVJREFUSA3VVj1oFEEUfm9m9/aye3eJcgkELxLsTGklqI2doqJga2UTRIyVYqUoFsEfLAQxomBnJ7axsbGzsbMxSi6/Rwioud292533nDEZk+zeiYZc4YPlzcz73vvem7czuzh4v36CFUwBcA12SRAwRIQ3laI/jtXJet136N5wH7zfpfjQUk5xKeJrKdCiMJnvZnCTpCfTuOqrx7qSc5qgNxIIWGXmoZ4R2LR7TuBYpqxmgfj1B7wExkCXmkiBHweK/Kxf8sqXprgDDGPGx9iqRZqouLicjWHmXQkSEC4RjdV8Ohprkm8tuLAa4mR/mS8y8cHAEY+8As4gMlUEdwz+RwKbjSch9oBjH2BqNsJ3bSELAATC4caAVPMW103/VQ/MdjUSPK4Pz3yBVNsEUynvWWu71TaIUrfgZr3rFlmnz2s4vXEy58tFecNkbyRSeCtM01QkODMawBWLz+pcBUmK/mxTXF0HIhWEeIUM4b4Arg86yScboOTBxIEynxoN6FfweoiXTEXWbnWOICQaSonPW8CIr15IwR8Wmvhgff+tZbtOFJwMKX+f5QhAyu2eerY/4IcIvLTwne+afhhAK8FDy5E8thTh4ZzDloU8wYbRBUoKAp5bbK0EtyXyTJvdUgFxWld5KFJ8pkV4Ok64YnFZnW+yUgAoAYl4JOCn1kEyqZEAngC3QZPp632r6KLirfPNcY7AF6KxwizmQjzrFZzfTd10yY/SRNUYuNrn0kLWmiNwHQ59KW7GBOOtOO3POnSa6/zXPEdMlqVqZO05AgMY9umtVub5B9Fb20G6NrkDdkdL/y9Bk2Av6itMV4BzixEc2VH9XZzMR38llJf1m/Uae/3b8hNICftztdejQwAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_NUM { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAnZJREFUSA3tVjtok1EU/s5NalJDsa0PUHTwgXRQbAuCUESdfA26mEERjJaqg0Fj0NAuWaxVqaFRESsmoEPBDopD0ElRqi5GB5EaERE7GPERaQyJ+N/juSkJiSV1SLL1LOf+//3u95177rkPehZ/u50Jw8y8FDU0IpogRo/dkCvg8IbOtlgN+TH2MrETxMMYi49zLYlLuQy3BF9fmxX4b37tMyGkdOn42WiPBjaBKaeI7gz1Hrhnxvgv3FyU+235CVgBhYmGhjmhQf++j//ykVnprs42wU03b390UER8BHolvU0MXqlg26+bFo5iMvmOCAvA/AKEdQz6Y3e6VoV87u8Fphmr6PTA7XlCfkQ2TCzc5+loXYI1AH3QpE9R+stegJfJRuoO9x3cqAi7RajFyma6C+QFX7GKMjrbLqC5Ev0DAw56PFmZ5kMhWgvobeafanTdN7454Hkk4lmG7jLfpVZRwAZrvgFqwrfCANmRU22m1SDiiyf2/DB9QSItaUqJSH5MAW98RYFSUDXtigIWbPloFaMYlaRoqk2ckFSRLzTaYsSDLCcCo1nWpTjbQlBlZXosHHOoX8lDcki9d8L5PGOlM1I5WwUcNn08mdwilfNaJi65127OZUzfSGogulm8U9L2VHyZlc1Apb+2a81X2KJL5wLun6RwTSpph7c/Eqf05zcS4XLJ8/nWxTwi/pNmvuE9E3miGXelGFJ2h+t6Gbt8lAk0ki0hEUYFfNUAhwKek6ToqCzuuGTksSK1K9zruWUqSsGxnhmXRSgpkUeUQkfpHigKzR7XxVRUaJStQQVMVb/rL2Bu//wFXVWc0wcbzvzLot7Plr8avfRhA7RvpQAAAABJRU5ErkJggg==) no-repeat; } - -.ARK_ICON.ICON_NUM:hover, .ARK_ICON.ICON_NUM.active { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAlxJREFUSA3tVktoE2EQ/mY3acSgtTUPsNmCRQRBoT14kqKe6uOgZ/GilNaKFzUm117TBAs+qK2oBw8efRyKnhQFT6IeRKQHH9ktGoPVKGpisjvOn3ZDIm4tJPXUvczs/8983+x88+8uhTPmXrYxBXAMLb3IIh1DPgVOhOF8onu6lfihtLWfbZ5CKJXlVgLXYylsrX5hOfwVgn921bdYBDNTNDM7BOadDC5prN/MJbvuqJxo+kPERjlOjB65tXyaPv4+vuHdn3iLahAdMzOO41ySMdsiif027NuRtHl40zkO2Fx+IuAnhDwq+0fLduVZ7KzZuWSCnsm5dgYdI6LpfMLoC4aNrXJe3rCDRKFkHhJgQyMM5pPd/TrRQQHu+FXB4JIJvha+90pbVoNwTyW9PUJFgO7L2jY42KPW/DruKjsS73pAQNEB71D39ZdnizQN61UgOfjkJjAt+ESbQcTmydhntTdKEkX4IiTVHDdeWU+C+qBmfE8CZ6FyOeu1qkTUeZ95RjQgY9zqUOSjLFGMdSJ27WndohoI1HREUtnjkUx2YG178DmBfkjigApWe/LG3S2iv5Dnrva+WOHq3kRmdpeAryKmxy6waxsIvpWsXge4yA6dfz3cWZA2T8pZ2BdOmU8LP82XzNgoIGPBkHFDNDClgCvhVPaRzXxLaRDw47IL7NoGgkBwzQxBuybjOaECcmeM0xq0ERnPVwLwUId+4GMydl1NlNbWtl1EvyBEORH3qs/v77NOGXMucM2uvK5rrfBwGjTwiGlq+X8QkKU+0E2V+ZfkeUz5s1ju35bf6GXjj9JSLtoAAAAASUVORK5CYII=) no-repeat; } - -.ARK_ICON.ICON_DEL { - position: absolute; - top: 11px; - right: 11px; - width: 8px; - height: 8px; - margin: 0; - padding: 0; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAAIxJREFUGBlNjjESwjAMBE8y/IfkD/SuQs0DGGjgC5mh4gcZSqjo+QPDf4htcsnII1Xn2/NJcuyHswS8b5f9F24O/b0BcqOE+Yfn6TpsjFNLzo8Q8BGaNBjSNTq+TbN1DtTQiBcKMAWjrVTCOhNE/bK4c8CtiLpC9DeJg53Vek9LwpbHGWQxdVHdpYT2D69xRVCaoaWHAAAAAElFTkSuQmCC) no-repeat; } - -.ARK_ICON.ICON_I { - position: absolute; - top: 9px; - left: 60px; - width: 15px; - height: 15px; - margin: 0; - padding: 0; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAc5JREFUKBV9Uj1PG0EQ3dkjCidcpKBIqIESQYXgT6QgcpEIoQPRINlgCF+mth0+FL4qBDJGSCBZAlHxExBUQAmiJwgQFJjzAXeTeTbrnJDDSnczO++9ud03R+o/a3Rm/bP3bNV//ODfzI45f6rR6G1xMJ3rY+ZxVtwk2IM8EUXqgkhNL032roX5FfHI3Fb9k+flhNikiZJUax0sJLovh+Y3v3DR7+SAM6zUeYR0TybZc4smNabT85O3Id3vrNq61vnhqGvqaCD5TuJ3ft8vFlYLHKzI/htwjVc8nXOka6MI+8PCWCor5fJCHbjsWmLpjX9iud8EjhoWGlE4AidNk8RBAnUNVxVzM+4YJiJfnuqteGIw8JhUez6ftzTGIcDD690MpxTDxzZAicfsHl+4nzSpmmsBInDVEN6LY9PbDYrIbmu07/Xi1PcrOdsZxvGeyGBe4HVIfhiNRv2S29IpFTCnZRy2IVWLwDFvS6k54BVD4qnsrjR5fDsu0wRCzBmapaTzA/XylyWxrYiDwkuxcDKYyXUZDxCx993CqcBk67oB8LAqXy5v5Yf5lf2qfPWTiTpkhC7MIVZH4uzsQtLZM7yqYgNijhgHXIU5ph6OfwHgJr3gZ7nUAgAAAABJRU5ErkJggg==) no-repeat; - cursor: pointer; } - -.ARK_SCROLLBAR { - overflow-y: auto; - overflow-x: hidden; } - -.ARK_DROPDOWN { - width: 238px; - will-change: top, left; - display: none; - left: 68px; - top: 33px; - height: auto; - border-radius: 2px; - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - z-index: 500; - background: #fff; - position: absolute; - padding: 6px 0 !important; - max-height: 230px; - overflow-y: auto; - margin-inline-start: 0px; - margin-inline-end: 0px; - padding-inline-start: 40px; } - -.ARK_DROPDOWN.TOP { - top: -120px; } - -.ARK_DROPDOWN li { - position: relative; - cursor: pointer; } - -.ARK_DROPDOWN span:hover { - background: #f0f6fc; } - -.ARK_DROPDOWN span { - display: block; - height: 34px; - margin: 0 1px; - padding: 0 9px; - font-size: 14px; - line-height: 34px; - color: #4c6072; - background: #fff; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - -webkit-transition: background .2s; - transition: background .2s; } - -.ARK_DROPDOWN .selected span { - color: #1489e2; } - -.ARK_SCROLLBAR::-webkit-scrollbar { - width: 4px; - height: 4px; } - -.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb { - background: #e4eaf1; } - -.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb { - background: #e4eaf1; - min-width: 200px; } - -.ARK_SCROLLBAR::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; } - -.ARK_SCROLLBAR::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; } - -.ARK_SCROLLBAR ::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0); - border-radius: 2px; - -webkit-transition: background .2s ease-in-out; - transition: background .2s ease-in-out; } - -.ARKTOOLTIP { - padding: 8px 16px; - position: absolute; - z-index: 1070; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 1; - line-break: auto; - background: rgba(37, 45, 57, 0.95); - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - border-radius: 6px; - -moz-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); - border: 1px solid #D8E0E9; } - -.ARKTOOLTIP .ARROW { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - bottom: -5px; - left: 50%; - margin-top: -10px; - border-width: 5px 5px 0px; - border-top-color: rgba(37, 45, 57, 0.95); - /* right: 0; */ - margin-left: -5px; } - -.ARKTOOLTIP .ARROW.ARKTOP { - border-width: 5px 5px 0px; - border-top-color: rgba(37, 45, 57, 0.95); } - -.ARKTOOLTIP .ARROW.ARKRIGHT { - left: 1px; - bottom: unset; - top: 38%; - margin-left: -5px; - border-top-color: unset; - border-right-color: rgba(37, 45, 57, 0.95); - border-width: 6px 4px 6px 0; - border-color: transparent rgba(37, 45, 57, 0.95) transparent transparent; } - -.ARKTOOLTIP .ARROW.ARKBOTTOM { - border-width: 0 5px 5px; - border-bottom-color: rgba(37, 45, 57, 0.95); - border-top-color: unset; - bottom: unset; - top: 5px; } - -.ARKTOOLTIP .WORDS { - max-width: 200px; - color: #ecf3f8; - text-align: center; - border-radius: 4px; - /* white-space: nowrap; */ - line-height: 21px; } - -.ARK_FIXED_BOX { - display: none; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: 1000; - background-color: rgba(255, 255, 255, 0.4); } diff --git a/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.js b/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.js deleted file mode 100644 index e2b7c1e..0000000 --- a/demo/jquery/sdk/AnalysysAgent_JS_SDK_VISUAL.min.js +++ /dev/null @@ -1,3599 +0,0 @@ -(function () { - 'use strict'; - - var _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - function _utf8Encode(string) { - string = string.replace(/\r\n/g, '\n'); - var utftext = ''; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if (c > 127 && c < 2048) { - utftext += String.fromCharCode(c >> 6 | 192); - utftext += String.fromCharCode(c & 63 | 128); - } else { - utftext += String.fromCharCode(c >> 12 | 224); - utftext += String.fromCharCode(c >> 6 & 63 | 128); - utftext += String.fromCharCode(c & 63 | 128); - } - } - return utftext; - } - - function _utf8Decode(utftext) { - var string = ''; - var i = 0; - var c = 0; - var c2 = 0; - var c3 = 0; - while (i < utftext.length) { - c = utftext.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if (c > 191 && c < 224) { - c2 = utftext.charCodeAt(i + 1); - string += String.fromCharCode((c & 31) << 6 | c2 & 63); - i += 2; - } else { - c2 = utftext.charCodeAt(i + 1); - c3 = utftext.charCodeAt(i + 2); - string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - i += 3; - } - } - return string; - } - - function Util() {} - Util.prototype.paramType = function (param) { - return Object.prototype.toString.call(param).replace('[object ', '').replace(']', ''); - }; - Util.prototype.objHasKay = function (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - }; - Util.prototype.ArrayToObj = function (arr) { - var obj = {}; - for (var i = 0; i < arr.length; i++) { - obj[arr[i]] = ''; - } - return obj; - }; - Util.prototype.keyValueToObje = function (key, value) { - var obj = {}; - obj[key] = value; - return obj; - }; - Util.prototype.toDeep = function (param) { - var paramNew = null; - if (this.paramType(param) === 'Array') { - paramNew = []; - for (var i = 0; i < param.length; i++) { - paramNew.push(this.toDeep(param[i])); - } - } else if (this.paramType(param) === 'Object') { - paramNew = {}; - for (var key in param) { - paramNew[key] = this.toDeep(param[key]); - } - } else { - paramNew = param; - } - return paramNew; - }; - - Util.prototype.toDeepObj = function (param1, param2) { - var obj = {}; - - if (this.paramType(param1) === 'String') { - obj = this.keyValueToObje(param1, param2); - return obj; - } - - if (this.paramType(param1) === 'Array') { - obj = this.ArrayToObj(param1); - return obj; - } - - if (this.paramType(param1) === 'Object') { - for (var key in param1) { - obj[key] = this.toDeepObj(param1[key]); - } - } - return obj; - }; - Util.prototype.toDeep = function (param) { - var paramNew = null; - if (this.paramType(param) === 'Array') { - paramNew = []; - for (var i = 0; i < param.length; i++) { - paramNew.push(this.toDeep(param[i])); - } - } else if (this.paramType(param) === 'Object') { - paramNew = {}; - for (var key in param) { - paramNew[key] = this.toDeep(param[key]); - } - } else { - paramNew = param; - } - return paramNew; - }; - Util.prototype.toObj = function (param1, param2) { - var obj = {}; - - if (this.paramType(param1) === 'String') { - obj = this.keyValueToObje(param1, param2); - return obj; - } - - if (this.paramType(param1) === 'Array') { - obj = this.ArrayToObj(param1); - return obj; - } - - if (this.paramType(param1) === 'Object') { - return param1; - } - return obj; - }; - Util.prototype.objMerge = function (parentObj, part) { - if (this.paramType(parentObj) !== 'Object' || this.paramType(part) !== 'Object') { - return parentObj; - } - var obj = {}; - for (var key in parentObj) { - obj[key] = parentObj[key]; - } - for (var partKey in part) { - var partValue = part[partKey]; - var objValue = obj[partKey]; - var partValueType = this.paramType(partValue); - var objValueType = this.paramType(objValue); - if (objValue && objValueType === 'Object' && partValueType === 'Object') { - obj[partKey] = this.objMerge(objValue, partValue); - } else if (objValueType === 'Array' && partValueType === 'Array') { - obj[partKey] = this.arrayMergeUnique(objValue, partValue); - } else if (partValueType === 'Function' && objValueType === 'Function') { - obj[partKey] = this.compose(objValue, partValue); - } else { - obj[partKey] = partValue; - } - } - return obj; - }; - Util.prototype.compose = function () { - var args = arguments; - var start = args.length - 1; - return function () { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - Util.prototype.fnMerge = function (parentObj, part) { - return this.objMerge(parentObj, part); - }; - Util.prototype.arrayUnique = function (arr) { - var tmpArr = []; - var hash = {}; // hash为hash表 - for (var i = 0; i < arr.length; i++) { - if (!hash[arr[i]]) { - // 如果hash表中没有当前项 - hash[arr[i]] = true; // 存入hash表 - tmpArr.push(arr[i]); // 存入临时数组 - } - } - return tmpArr; - }; - Util.prototype.arrayMerge = function (arr1, arr2) { - var a1 = []; - for (var i = 0; i < arr1.length; i++) { - var a1i = arr1[i]; - if (this.paramType(arr1[i]) === 'Object') { - a1i = this.toDeep(arr1[i]); //JSON.parse(JSON.stringify(arr1[i])) - } - a1.push(a1i); - } - for (var y = 0; y < arr2.length; y++) { - var a2i = arr2[y]; - if (this.paramType(arr2[y]) === 'Object') { - a2i = this.toDeep(arr2[y]); //JSON.parse(JSON.stringify(arr2[y])) - } - a1.push(a2i); - } - return a1; - }; - Util.prototype.arrayMergeUnique = function (arr1, arr2) { - arr1.push.apply(arr1, arr2); - return this.arrayUnique(arr1); - }; - Util.prototype.encode = function (input) { - var output = ''; - var chr1; - var chr2; - var chr3; - var enc1; - var enc2; - var enc3; - var enc4; - var i = 0; - input = _utf8Encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); - } - return output; - }; - Util.prototype.decode = function (input) { - var output = ''; - var chr1; - var chr2; - var chr3; - var enc1; - var enc2; - var enc3; - var enc4; - var i = 0; - input = input.replace(/[^A-Za-z0-9+/=]/g, ''); - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - chr1 = enc1 << 2 | enc2 >> 4; - chr2 = (enc2 & 15) << 4 | enc3 >> 2; - chr3 = (enc3 & 3) << 6 | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 !== 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 !== 64) { - output = output + String.fromCharCode(chr3); - } - } - output = _utf8Decode(output); - return output; - }; - Util.prototype.isEmptyObject = function (obj) { - for (var name in obj) { - return false; - } - return true; - }; - Util.prototype.format = function (time, format) { - var offsetGMT = time.getTimezoneOffset(); - time = new Date(time.getTime() + offsetGMT * 60 * 1000 + 8 * 60 * 60 * 1000); // 转换为东八区时间 - var o = { - 'M+': time.getMonth() + 1, // month - 'd+': time.getDate(), // day - 'h+': time.getHours(), // hour - 'm+': time.getMinutes(), // minute - 's+': time.getSeconds(), // second - 'q+': Math.floor((time.getMonth() + 3) / 3), // quarter - 'S+': time.getMilliseconds() // millisecond - }; - if (/(y+)/.test(format)) { - format = format.replace(RegExp.$1, (time.getFullYear() + '').substr(4 - RegExp.$1.length)); - } - for (var k in o) { - if (new RegExp('(' + k + ')').test(format)) { - format = format.replace(RegExp.$1, RegExp.$1.length === 3 ? ('' + o[k]).length < 3 ? ('00' + o[k]).substr(('00' + o[k]).length - 3, ('00' + o[k]).length) : o[k] : ('00' + o[k]).substr(('' + o[k]).length)); - } - } - - return format.toString(); - }; - Util.prototype.MD5 = function (value, bit) { - var sMessage = value; - - function RotateLeft(lValue, iShiftBits) { - return lValue << iShiftBits | lValue >>> 32 - iShiftBits; - } - - function AddUnsigned(lX, lY) { - var lX4, lY4, lX8, lY8, lResult; - lX8 = lX & 0x80000000; - lY8 = lY & 0x80000000; - lX4 = lX & 0x40000000; - lY4 = lY & 0x40000000; - lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) return lResult ^ 0x80000000 ^ lX8 ^ lY8; - if (lX4 | lY4) { - if (lResult & 0x40000000) return lResult ^ 0xC0000000 ^ lX8 ^ lY8;else return lResult ^ 0x40000000 ^ lX8 ^ lY8; - } else return lResult ^ lX8 ^ lY8; - } - - function F(x, y, z) { - return x & y | ~x & z; - } - - function G(x, y, z) { - return x & z | y & ~z; - } - - function H(x, y, z) { - return x ^ y ^ z; - } - - function I(x, y, z) { - return y ^ (x | ~z); - } - - function FF(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function GG(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function HH(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function II(a, b, c, d, x, s, ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - } - - function ConvertToWordArray(sMessage) { - var lWordCount; - var lMessageLength = sMessage.length; - var lNumberOfWordsTemp1 = lMessageLength + 8; - var lNumberOfWordsTemp2 = (lNumberOfWordsTemp1 - lNumberOfWordsTemp1 % 64) / 64; - var lNumberOfWords = (lNumberOfWordsTemp2 + 1) * 16; - var lWordArray = Array(lNumberOfWords - 1); - var lBytePosition = 0; - var lByteCount = 0; - while (lByteCount < lMessageLength) { - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | sMessage.charCodeAt(lByteCount) << lBytePosition; - lByteCount++; - } - lWordCount = (lByteCount - lByteCount % 4) / 4; - lBytePosition = lByteCount % 4 * 8; - lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; - lWordArray[lNumberOfWords - 2] = lMessageLength << 3; - lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; - return lWordArray; - } - - function WordToHex(lValue) { - var WordToHexValue = ''; - var WordToHexValueTemp = ''; - var lByte; - var lCount; - for (lCount = 0; lCount <= 3; lCount++) { - lByte = lValue >>> lCount * 8 & 255; - WordToHexValueTemp = '0' + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); - } - return WordToHexValue; - } - var x = []; - var k, AA, BB, CC, DD, a, b, c, d; - var S11 = 7; - var S12 = 12; - var S13 = 17; - var S14 = 22; - var S21 = 5; - var S22 = 9; - var S23 = 14; - var S24 = 20; - var S31 = 4; - var S32 = 11; - var S33 = 16; - var S34 = 23; - var S41 = 6; - var S42 = 10; - var S43 = 15; - var S44 = 21; - // Steps 1 and 2. Append padding bits and length and convert to words - x = ConvertToWordArray(sMessage); - // Step 3. Initialise - a = 0x67452301; - b = 0xEFCDAB89; - c = 0x98BADCFE; - d = 0x10325476; - // Step 4. Process the message in 16-word blocks - for (k = 0; k < x.length; k += 16) { - AA = a; - BB = b; - CC = c; - DD = d; - a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); - d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); - c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); - b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); - a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); - d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); - c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); - b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); - a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); - d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); - c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); - b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); - a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); - d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); - c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); - b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); - a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); - d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); - c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); - b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); - a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); - d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); - c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); - b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); - a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); - d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); - c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); - b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); - a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); - d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); - c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); - b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); - a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); - d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); - c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); - b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); - a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); - d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); - c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); - b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); - a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); - d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); - c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); - b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); - a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); - d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); - c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); - b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); - a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); - d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); - c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); - b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); - a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); - d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); - c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); - b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); - a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); - d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); - c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); - b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); - a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); - d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); - c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); - b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); - a = AddUnsigned(a, AA); - b = AddUnsigned(b, BB); - c = AddUnsigned(c, CC); - d = AddUnsigned(d, DD); - } - if (bit === 32) { - return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); - } else { - return WordToHex(b) + WordToHex(c); - } - }; - Util.prototype.clientTimeZone = function () { - var munites = new Date().getTimezoneOffset(); - - var hour = parseInt(munites / 60); - - var munite = munites % 60; - - var prefix = '-'; - - if (hour <= 0 || munite < 0) { - prefix = '+'; - - hour = -hour; - - if (munite < 0) { - munite = -munite; - } - } - - hour = hour + ''; - - munite = munite + ''; - - if (hour.length === 1) { - hour = '0' + hour; - } - - if (munite.length === 1) { - munite = '0' + munite; - } - - return prefix + hour + ':' + munite; - }; - - Util.prototype.delEmpty = function (obj) { - var newObj = {}; - for (var key in obj) { - var inType = true; - var valueType = this.paramType(obj[key]); - - if (valueType !== 'Object') { - if (!obj[key] && (valueType !== 'Number' || isNaN(obj[key])) && valueType !== 'Boolean') { - inType = false; - } - if (inType === true) { - newObj[key] = obj[key]; - } - } else { - newObj[key] = this.delEmpty(obj[key]); - } - } - for (var newObjKey in newObj) { - var values = []; - for (var key1 in newObj[newObjKey]) { - values.push(newObj[newObjKey][key1]); - } - if (values.length === 0 && newObj[newObjKey].constructor === Object) { - delete newObj[newObjKey]; - } - } - return newObj; - }; - - Util.prototype.addEvent = function (el, type, fn, useCapture) { - if (el.addEventListener) { - if ((this.paramType(el) === 'Array' || this.paramType(el) === 'HTMLCollection') && el.length && el !== window) { - for (var i = 0; i < el.length; i++) { - this.addEvent(el[i], type, fn, useCapture); - } - } else { - el.addEventListener(type, fn, useCapture); - } - } else { - if (el.length && el !== window) { - for (var index = 0; index < el.length; index++) { - this.addEvent(el[index], type, fn); - } - } else { - el.attachEvent('on' + type, function () { - return fn.call(el, window.event); - }); - } - } - }; - - Util.prototype.removeEvent = function (el, type, fn, useCapture) { - if (document.removeEventListener) { - if (el.length) { - for (var i = 0; i < el.length; i++) { - this.removeEvent(el[i], type, fn, useCapture); - } - } else { - el.removeEventListener(type, fn, useCapture); - } - } else { - if (el.length) { - for (var index = 0; index < el.length; index++) { - this.removeEvent(el[index], type, fn); - } - } else { - el.detachEvent('on' + type, function () { - return fn.call(el, window.event); - }); - } - } - }; - - Util.prototype.addEleLable = function (eleName, className, id, parent) { - var dom = document; - var createEle = dom.createElement(eleName); - var domBody = parent || dom.body || dom.getElementsByTagName('body')[0]; - if (id) { - createEle.id = id; - } - if (className) { - createEle.className = className; - } - domBody.appendChild(createEle); - return createEle; - }; - Util.prototype.addScript = function (fileName, urlPath, callback) { - var dom = document; - var createScript = dom.createElement('script'); - var domHead = dom.getElementsByTagName('script'); - createScript.type = 'text/javascript'; - createScript.async = true; - createScript.id = fileName; - var sdkUrl = ''; - - if (!urlPath) { - if (dom.getElementById('ARK_SDK')) { - sdkUrl = dom.getElementById('ARK_SDK').src; - } else { - for (var i = 0; i < domHead.length; i++) { - if (domHead[i].src && domHead[i].src.indexOf('AnalysysAgent_JS_SDK') > -1) { - sdkUrl = domHead[i].src; - break; - } - } - } - } else { - if (this.paramType(urlPath) === 'Array') { - var commonFn = urlPath[0]; - var path = urlPath[1]; - commonFn([path], callback); - return; - } - sdkUrl = urlPath.charAt(urlPath.length - 1) === '/' ? urlPath : urlPath + '/'; - } - - var sdkPath = sdkUrl.substring(0, sdkUrl.lastIndexOf('/') + 1); - createScript.src = sdkPath + fileName + '.min.js?v=' + this.format(new Date(), 'yyyyMMddhhmm'); // 方舟B SDK地址 - createScript.onload = setTimeout(callback, 500); - domHead[0].parentNode.insertBefore(createScript, domHead[0]); - }; - - function CheckChinese(val) { - var reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); - if (reg.test(val)) { - return true; - } - return false; - } - - Util.prototype.GetUrlParam = function (paraName) { - var url = document.location.toString(); - var wName = window.name; - if (this.paramType(wName) === 'String' && wName.indexOf(paraName) > -1) { - url = wName; - } - var arrObj = url.split('?'); - if (arrObj.length > 1) { - var arrPara = []; // arrObj[1].split("&") - for (var i = 1; i < arrObj.length; i++) { - arrPara.push.apply(arrPara, arrObj[i].split('&')); - } - var arr; - for (var index = 0; index < arrPara.length; index++) { - arr = arrPara[index].split('='); - - if (arr != null && arr[0] === paraName) { - var value = arr[1]; - if (arr[1].indexOf('#') > -1) { - value = value.split('#')[0]; - } - if (value.indexOf('%') > -1) { - try { - var utfValue = decodeURI(value); - if (CheckChinese(utfValue)) { - return utfValue; - } - } catch (e) {} - } - return value; - } - } - return ''; - } else { - return ''; - } - }; - - Util.prototype.stringSlice = function (str, length) { - return str.slice(0, length); - }; - Util.prototype.trim = function (str) { - if (this.paramType(str) === 'String') { - return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } else { - return str; - } - }; - Util.prototype.changeHash = function (callback) { - var historyPushState = window.history.pushState; - var historyReplaceState = window.history.replaceState; - window.history.pushState = function () { - historyPushState.apply(window.history, arguments); - callback.apply(callback); - }; - window.history.replaceState = function () { - historyReplaceState.apply(window.history, arguments); - callback.apply(callback); - }; - var state = historyPushState ? 'popstate' : 'hashchange'; - state = !!window.ActiveXObject || 'ActiveXObject' in window ? 'hashchange' : 'popstate'; - if ('on' + state in window) { - this.addEvent(window, state, function () { - setTimeout(callback, 0); - }); - } - }; - - Util.prototype.deviceType = function () { - var u = navigator.userAgent; - - if (u.indexOf('Tablet') > -1 && u.indexOf('PC') < 0 || u.indexOf('Pad') > -1 || u.indexOf('Nexus 7') > -1) { - return 'tablet'; - } - if (u.indexOf('Mobi') > -1 || u.indexOf('iPh') > -1 || u.indexOf('480') > -1) { - return 'phone'; - } - return 'desktop'; - }; - Util.prototype.checkTypeList = function (list, ele) { - var listType = this.paramType(list); - if (listType === 'String') { - var url = window.location.href; - var urlHost = window.location.protocol + '//' + window.location.host; - var urlPath = urlHost + window.location.pathname; - var urlIndex = urlPath + 'index.html'; - var urlHash = urlPath + window.location.hash; - var urlArray = [url, urlHost, urlIndex, urlPath, urlHash]; - if (urlArray.indexOf(list) > -1) { - return true; - } - } else if (listType === 'Function') { - return list.call(list, ele); - } else if (listType === 'Array') { - for (var i = 0; i < list.length; i++) { - if (this.checkTypeList(list[i], ele) === true) { - return true; - } - } - } - return false; - }; - /** - * document.querySelectorAll 兼容方法 - * @param {Sting} selectors 选择器 不包含伪类 - * @returns {Array} elements 符合条件的元素列表 - */ - - Util.prototype.selectorAllEleList = function (selectors) { - var eleList = []; - var eleTagName = selectors.split('.')[0]; - if (this.paramType(document.querySelectorAll) === 'Function' && selectors.indexOf('|') < 0) { - try { - return document.querySelectorAll(selectors); - } catch (e) {} - } - var eleId = ''; - if (selectors.indexOf('#') > -1) { - eleId = selectors.split('.')[0].split('#')[1]; - var ele = document.getElementById(eleId); - if (ele) { - eleList.push(ele); - } - } else if (selectors.indexOf('.') < 0) { - return document.getElementsByTagName(eleTagName); - } else if (selectors.indexOf('[') > -1 && selectors.indexOf(']') > -1) { - var nodeList = document.getElementsByTagName('*'); - var selector = selectors.replace('[', '').replace(']', ''); - for (var y = 0; y < nodeList.length; y++) { - var attr = nodeList[y].getAttribute(selector); - if (this.paramType(attr) === 'String') { - eleList.push(ele); - } - } - } else { - var domList = document.getElementsByTagName(eleTagName); - for (var i = 0; i < domList.length; i++) { - var dom = domList[i]; - var domClassNameList = this.paramType(dom.className) === 'String' ? dom.className.split(' ') : []; - if (domClassNameList.length > 0) { - if ((eleTagName + '.' + domClassNameList.join('.')).indexOf(selectors) > -1) { - eleList.push(dom); - } - } - } - } - // var anchors = []; - // for (var z = 0; z < eleList.length; z++) { - // anchors.push(eleList[z]); - // } - // anchors = anchors.sort(function (x, y) { - // return offset(x).left - offset(y).left && offset(x).top - offset(y).top - // }) - // eleList = anchors - return eleList; - }; - // /** - // * [parserDom description]根据元素及其上层元素获取元素位置及显示/隐藏 - // * @param {[type]} ele [description] 元素Dom对象 - // * @return {[type]} obj [description] 元素对应位置与显示/隐藏 - // */ - // function offset (curEle) { - // var totalLeft = null, totalTop = null, par = curEle.offsetParent; - // //首先加自己本身的左偏移和上偏移 - // totalLeft += curEle.offsetLeft; - // totalTop += curEle.offsetTop - // //只要没有找到body,我们就把父级参照物的边框和偏移也进行累加 - // while (par) { - // if (navigator.userAgent.indexOf("MSIE 8.0") === -1) { - // //累加父级参照物的边框 - // totalLeft += par.clientLeft; - // totalTop += par.clientTop - // } - - // //累加父级参照物本身的偏移 - // totalLeft += par.offsetLeft; - // totalTop += par.offsetTop - // par = par.offsetParent; - // } - - // return { - // left: totalLeft, - // top: totalTop - // } - // } - Util.prototype.getDomainFromUrl = function (domianStatus, host) { - if (host === '') { - return ''; - } - host = host || window.location.hostname; - - // var regex = /^*\.*/ - // var match = host.match(regex) - var urlArr = host.split("/"); - if (urlArr.length > 2) { - host = urlArr[2]; - } - var ip = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; - if (ip.test(host) === true || host === 'localhost') return ''; - var strAry = host.split('.'); - var level = domianStatus === true ? 2 : strAry.length; - if (this.paramType(level) !== 'Number' || level < 2) { - level = 2; - } - var urlDomain = []; - if (strAry.length > 1) { - if (strAry.length < level) { - level = strAry.length; - } - for (var i = strAry.length - 1; i >= 0; i--) { - if (urlDomain.length === level) { - break; - } - urlDomain.push(strAry[i]); - } - // host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1]; - } else { - return ''; - } - // } - return urlDomain.reverse().join('.'); - }; - Util.prototype.isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); - Util.prototype.delNotHybrid = function (obj) { - delete obj.$is_first_day; - delete obj.$session_id; - delete obj.$is_time_calibrated; - delete obj.$startup_time; - return obj; - }; - - Util.prototype.getUrlPath = function () { - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - - return window.location.host + window.location.pathname + hash; - }; - - Util.prototype.detectZoom = function () { - var metaEles = this.selectorAllEleList('meta'); - var ratio = 1; - for (var i = 0; i < metaEles.length; i++) { - var attr = metaEles[i].getAttribute('content'); - if (attr && attr.indexOf('initial-scale=') > -1) { - var attrList = attr.split(','); - for (var y = 0; y < attrList.length; y++) { - if (attrList[y].indexOf('initial-scale') > -1) { - ratio = parseFloat(attrList[y].split('=')[1]); - } - } - } - } - return ratio; - }; - var Util$1 = new Util(); - - function getElementContent(ele, status) { - var eleContent = ''; - if (ele.tagName.toLowerCase() === 'input') { - eleContent = ele.value || ''; - } else if (ele.tagName.toLowerCase() === 'img') { - eleContent = ele.getAttribute('alt') || ele.getAttribute('title') || ''; - } else if (ele.tagName.toLowerCase() === 'a') { - eleContent = ele.getAttribute('title') || ''; - } - if (!eleContent) { - var children = ele.childNodes; - for (var i = 0; i < children.length; i++) { - if (children[i].nodeType === 3) { - eleContent += children[i].nodeValue; - } - } - // if (ele.textContent) { - // eleContent = Util.trim(ele.textContent) - // } else { - // if (ele.innerText) { - // eleContent = Util.trim(ele.innerText) - // } - // } - } - if (eleContent && Util$1.paramType(eleContent) === 'String') { - eleContent = eleContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' '); - } else { - eleContent = ''; - } - if (ele.tagName.toLowerCase() === 'input' && ele.type !== 'button' && ele.type !== 'submit' && status !== true) { - return ''; - } - eleContent = Util$1.trim(eleContent); - // if (eleContent.length > 0) { - // eleContent = - // } - return eleContent; - } - - var detect = Util$1.detectZoom(); - - // var rootNodeRE = /^(?:body|html)$/i - function getPath(ele) { - var tagName = ele.tagName.toLowerCase(); - var classPath = ''; - var classNameList = Util$1.paramType(ele.className) !== 'String' ? [] : ele.className.split(' '); - for (var i = 0; i < classNameList.length; i++) { - if (classNameList[i] && classNameList[i].indexOf('ARK') < 0) { - classPath += '.' + classNameList[i]; - } - } - return { - className: classPath, - id: ele.id || '', - tagName: tagName - }; - } - function domParentList(ele, status) { - var list = []; - var newPath = []; - var parent = ele; - while (parent != null) { - var eleNodeType = parent.nodeType; - if (eleNodeType !== 1) { - parent = parent.parentNode; - continue; - } - var elePath = getPath(parent); - var pathIndex = null; - if (status !== true) { - pathIndex = getEleIndex(parent); - } - - // if (!status) { - list.push(elePath.tagName + (elePath.id ? '#' + elePath.id : '') + elePath.className); - // } else { - var path = { - // className: elePath.className || '', - id: elePath.id, - tagName: elePath.tagName - }; - if (elePath.row !== null) { - path['row'] = pathIndex.row; - } else { - path['index'] = pathIndex.index; - } - newPath.push(Util$1.delEmpty(path)); - // } - - parent = parent.parentNode; - } - return { - path: list.join('<'), - newPath: newPath - }; - } - - function getEleIndex(ele) { - var parent = ele.parentNode; - var index = 0; - var parnetStatus = true; - var row = null; - while (parent !== null && parnetStatus === true) { - var eleNodeType = parent.nodeType; - if (eleNodeType !== 1) { - parent = parent.parentNode; - continue; - } - var childEles = parent.children; - var childElesPath = []; - var elePath = {}; - for (var i = 0; i < childEles.length; i++) { - var childElePath = getPath(childEles[i]); - childElesPath.push(childElePath); - if (ele === childEles[i]) { - elePath = childElePath; - index = i; - } - } - var isRow = false; - for (var y = 0; y < childEles.length; y++) { - // if (newPathContrast({ newPath: childElesPath[y] }, elePath) === true) { - if (childElesPath[y].tagName === elePath.tagName) { - isRow = true; - } - } - if (isRow === true) { - row = index; - } - parnetStatus = false; - } - return { - row: row, - index: index - }; - } - function parentContrast(clickPathList, eventPathList) { - for (var i = 0; i < clickPathList.length; i++) { - if (clickPathList[i].split('.')[0] !== eventPathList[i].split('.')[0]) { - return false; - } - } - return true; - } - function delPathRow(pathList) { - var copyPathList = Util$1.arrayMerge([], pathList); - for (var i = 0; i < copyPathList.length; i++) { - delete copyPathList[i].row; - } - return copyPathList; - } - /** - * 拥有new_path时,点击元素是否符合可视化元素列表中的元素 - * - * @param {*} clickEleObj 点击元素 - * @param {*} eventEleObj 可视化元素 - * @returns {Boolean} 是否符合 - */ - function newPathContrast(clickObj, eventNewPath, isNotDeep) { - var clickNewPath = clickObj.newPath; - var clickNewPathList = Util$1.arrayMerge([], clickNewPath); - var eventNewPathList = Util$1.arrayMerge([], eventNewPath); - var newPath = Util$1.arrayMerge([], clickNewPath); - var ele = clickObj.ele; - - if (clickNewPathList === eventNewPathList) { - return true; - } - if (clickNewPathList.length < eventNewPathList.length) { - return false; - } - if (clickObj.ele && clickNewPathList.length > eventNewPathList.length) { - if (isNotDeep === true) { - return false; - } - var num = clickNewPathList.length - eventNewPathList.length; - clickNewPathList.splice(0, num); - for (var i = 0; i < num; i++) { - ele = ele.parentNode || document.body; - } - - newPath = Util$1.arrayMerge([], clickNewPathList); - } - var status = true; - var startNum = 0; - while (startNum < eventNewPathList.length) { - var eventPath = eventNewPathList[startNum]; - var clickPath = clickNewPathList[startNum]; - - if (Util$1.objHasKay(clickPath, 'row') === true && Util$1.objHasKay(eventPath, 'row') === false && Util$1.objHasKay(clickPath, 'index') === false) { - delete clickPath.row; - } - if (eventPath.id && eventPath.id !== clickPath.id || eventPath.tagName !== clickPath.tagName || clickPath.index !== eventPath.index || clickPath.row !== eventPath.row) { - status = false; - break; - } - startNum++; - } - if (status === true) { - clickObj.newPath = newPath; - clickObj.ele = ele; - } - return status; - } - function isClassContrast(clickEle, eventClass) { - var clickClass = clickEle ? clickEle.className : null; - if (Util$1.paramType(clickClass) === 'String' && Util$1.paramType(eventClass) === 'String') { - clickClass = Util$1.trim(clickClass) || null; - eventClass = Util$1.trim(eventClass) || null; - if (clickClass && eventClass && clickClass.indexOf(eventClass) > -1) { - return true; - } - } - return false; - } - function bindingContrast(ele, bindings) { - for (var i = 0; i < bindings.length; i++) { - var binding = bindings[i]; - if (binding.prop_name === 'text') { - var eleText = getElementContent(ele); - if (eleText !== binding.value) { - return false; - } - } else if (binding.prop_name === 'class') { - if (!isClassContrast(ele, binding.value)) { - return false; - } - } - } - return true; - } - /** - * 点击元素是否符合可视化元素列表中的元素 - * @param {JSON} clickEleObj 点击元素 - * @param {JSON} eventEleObj 可视化元素 - * @returns {Boolean} 是否符合 - */ - function pathContrast(clickEleObj, eventEleObj, isNotDeep) { - var status = true; - var isNewPath = false; - eventEleObj.bindings = eventEleObj.bindings || eventEleObj.props_binding; - - if (clickEleObj.newPath && eventEleObj.newPath) { - isNewPath = true; - status = newPathContrast(clickEleObj, eventEleObj.newPath, isNotDeep); - } - if (status === true && eventEleObj.bindings && eventEleObj.bindings.length > 0) { - isNewPath = true; - status = bindingContrast(clickEleObj.ele, eventEleObj.bindings); - } - if (isNewPath) { - return status; - } - var clickPath = clickEleObj.path || clickEleObj.link; - var eventPath = eventEleObj.path || eventEleObj.link; - var clickIndex = clickEleObj.index || 0; - var eventIndex = eventEleObj.index || 0; - var clickEle = clickEleObj.ele || null; - var isText = eventEleObj.isText || ''; - if (isText !== '') { - var eleText = getElementContent(clickEle); - if (isText !== eleText) { - return false; - } - } - if (clickPath === eventPath && clickIndex === eventIndex) { - return true; - } - var clickPathArray = clickPath.split('<'); - var eventPathArray = eventPath.split('<'); - - if (clickPathArray.length < eventPathArray.length) { - return false; - } - - if (clickPathArray.length > eventPathArray.length) { - var lengthNum = clickPathArray.length - eventPathArray.length; - clickPathArray = clickPathArray.splice(lengthNum); - // 点击的为子节点则不校验点击元素位置 - // clickIndex = eventIndex - var parentEle = clickEle; - while (lengthNum > 0 && parentEle) { - parentEle = parentEle.parentNode; - lengthNum--; - } - if (!parentEle) { - return false; - } - clickIndex = setIndex(parentEle, clickPathArray.join('<')); - } - if (parentContrast(clickPathArray, eventPathArray) && clickIndex === eventIndex) { - return true; - } - - return false; - } - /** - * 通过new_path 查找元素 - * @param {JSON} path - * @returns {Element} ele 解析到的元素 - */ - - function parseNewPath(path, step, parentTarger) { - var stepPaths = null; - - if (!parentTarger) { - parentTarger = document; - stepPaths = path; - } else { - if (step === 0) { - if (path.length === 1) { - return parentTarger; - } else { - stepPaths = path.slice(0, path.length - step); - parentTarger = parentTarger.parentNode; - } - } else { - stepPaths = path.slice(0, path.length - 1); - while (step > 0) { - parentTarger = parentTarger.parentNode; - if (!parentTarger) { - return null; - } - step--; - } - } - } - var childNode = parentTarger; - var stepPathLen = stepPaths.length - 1; - - while (stepPathLen >= 0) { - var stepPath = stepPaths[stepPathLen]; - var tagName = stepPath.tagName; - - var index = Util$1.paramType(stepPath.row) === 'Number' ? stepPath.row : stepPath.index; - var id = stepPath.id || ''; - if (tagName === 'html') { - index = 0; - } - if (Util$1.paramType(index) !== 'Number') { - return null; - } - var childrenList = childNode.children; - if (childrenList.length < index) { - return null; - } - childNode = childrenList[index]; - if (!childNode || id && childNode.id !== id || Util$1.paramType(childNode.tagName) === 'String' && tagName !== childNode.tagName.toLowerCase()) { - return null; - } - stepPathLen--; - } - return childNode; - } - /** - * 通过Path查找元素 - * - * @param {String} path 元素Path - * @returns - */ - function parseEvent(path) { - var eleObj = parserDom(path); - if (eleObj.length === 0) { - return; - } - var baseEle = eleObj[0]; - if (baseEle.elePath.indexOf('#') > -1) { - baseEle.elePath = '#' + baseEle.elePath.split('#')[1]; - } - var eleList = Util$1.selectorAllEleList(baseEle.elePath); - // var anchors = []; - // for (var y = 0; y < eleList.length; y++) { - // anchors.push(eleList[y]); - // } - // anchors = anchors.sort(function (x, y) { - // return eleOffset(x).left - eleOffset(y).left && eleOffset(x).top - eleOffset(y).top - // }) - // eleList = anchors - var allEleList = []; - for (var i = 0; i < eleList.length; i++) { - var pathObj = domParentList(eleList[i], 'noIndex'); - if (pathContrast({ - path: pathObj.path - }, { - path: path - }) === true) { - allEleList.push(eleList[i]); - } - } - return allEleList; - } - /** - * [parserDom description] - * @param {[type]} path [description] - * @return {[type]} [description] - */ - function parserDom(path) { - var eleList = []; - if (path.indexOf('<') < 0) { - return [{ - elePath: path - }]; - } - var pathObj = path.split('<'); - for (var i = 0; i < pathObj.length; i++) { - var elelPath = pathObj[i]; - eleList.push({ - elePath: elelPath - }); - } - return eleList; - } - - /** - * [offsetParent description] 获取父元素 - * @return {[type]} [description] - */ - // function eleOffsetParent (elem) { - // var parent - // while (elem && !elem.offsetParent) { - // elem = elem.parentNode - // if (elem === document.body) { - // break - // } - // } - // if (!elem) return document.body - // parent = elem.offsetParent || document.body - // while (parent && !rootNodeRE.test(parent.nodeName) && eleCss(parent, 'position') === 'static') { - // parent = parent.offsetParent - // } - // return parent - // } - function elePCOffset(ele) { - var boxPosition = ele.getBoundingClientRect(); - // var realTop = 0 - // var realLeft = 0 - // var elemHidden = false - // // var isFixed = false - - // while (ele != null) { - // realTop += ele.offsetTop - // realLeft += ele.offsetLeft - - // // if (!elemHidden) { - // // elemHidden = !!(eleCss(ele, 'display') === 'none' || eleCss(ele, 'width') === '0px' || eleCss(ele, 'height') === '0px') - // // } - - // // if (eleCss(ele, 'position') === 'fixed') { - // // isFixed = true - // // } - // ele = ele.offsetParent - // } - // if (isFixed === true) { - // realTop += document.documentElement.scrollTop || document.body.scrollTop - // realLeft += document.documentElement.scrollLeft || document.body.scrollLeft - // } - return { - top: boxPosition.top, - left: boxPosition.left, - hidden: false - - }; - } - /** - * [elementPostion description] 返回标签元素坐标及是否隐藏 - * @param {[type]} elem [description]标签元素 - * @return {[type]} [description]x-横坐标 number y-纵坐标 number hidden-是否隐藏隐藏 Bloon - */ - function elementPostion(elem) { - // var t - var position = { - top: 0, - left: 0, - hidden: true - // var elemHidden = false - - };if (!elem) { - return position; - } - var elePosition = elePCOffset(elem); - position = { - top: elePosition.top, - left: elePosition.left, - hidden: elePosition.hidden - }; - - if (!position) { - return { - top: 0, - left: 0, - hidden: true - }; - } - return position; - } - - /** - * [isElmentReady description] 页面dom是否渲染成功 - * 仅判断dom列表是否渲染完毕,不保证img加载完毕 - * img加载完触发window.resize进行兼容 - * @return {Boolean} [description] - */ - var openTime = +new Date(); - function isElmentReady() { - if (!document.documentElement || document.documentElement.scrollWidth === 0 || document.readyState !== 'complete') { - if (+new Date() - openTime > 5000) { - return true; - } - return false; - } else { - return true; - } - } - - /** - * [isParent description] 判断是当前元素否为指定元素的子元素 - * @param {[type]} ele [description] 当前元素 - * @param {[type]} parentEle [description] 指定元素 - * @return {Boolean} [description] - */ - function isParent(ele, parentEle) { - // 任何元素都为BODY的子元素 - while (ele && ['BODY', 'HTML'].indexOf(ele.tagName.toUpperCase()) < 0) { - if (Util$1.paramType(parentEle) === 'Array') { - for (var i = 0; i < parentEle.length; i++) { - if (ele === parentEle[i]) { - return true; - } - } - } else { - if (ele === parentEle) { - return true; - } - } - ele = ele.parentNode; - } - return false; - } - - function setIndex(ele, link) { - - // var link = domParentList(ele) - var eleObj = parserDom(link); - if (eleObj.length === 0) { - return 0; - } - var baseEle = eleObj[0]; - if (baseEle.elePath.indexOf('#') > -1) { - baseEle.elePath = '#' + baseEle.elePath.split('#')[1]; - } - var eleList = Util$1.selectorAllEleList(baseEle.elePath); // document. - var index = 0; - for (var i = 0; i < eleList.length; i++) { - var pathObj = domParentList(eleList[i]); - if (pathContrast({ - path: pathObj.path - }, { - path: link - }) === true) { - if (eleList[i] === ele) { - return index; - } - index++; - } - } - return 0; - } - - function boxPosition(ele, blo) { - var boxW = 435; - var boxH = 482; - var num = 4; - - if (blo === 'debug') { - boxW = 260; - boxH = 270; - num = 4; - } - var postion = elementPostion(ele); - var top = postion.top; - var left = postion.left; - var width = ele.offsetWidth; - var height = ele.offsetHeight; - var bodyW = document.body.offsetWidth; - var bodyH = document.body.offsetHeight; - var boxLeft = left; - var boxTop = top - boxH - num; - if (boxLeft + boxW > bodyW) { - boxLeft = left - boxW + width; - if (boxLeft < 0) { - boxLeft = num; - } - } - if (boxTop + boxH + num > bodyH) { - boxTop = top - boxH - num; - } - if (boxTop < 0) { - boxTop = top + height + num; - } - return { - top: boxTop, - left: boxLeft - }; - } - function backH5PathProPath(clickPath, related) { - - // var clickPathCopy = Util.arrayMerge([], clickPath) - var relatedPathCopy = Util$1.arrayMerge([], related.h5_path); - // var step = related.step - // if (step !== 0) { - // clickPathCopy.splice(0, step) - // } - // relatedPathCopy.splice(relatedPathCopy.length - 1, 1) - // for (var i = 0; i < clickPathCopy.length; i++) { - // relatedPathCopy.push(clickPathCopy[i]) - // } - // var proPath = Util.arrayMerge(relatedPathCopy, clickPathCopy) - return relatedPathCopy; - } - /** - * 根据查找元素 - * @param {Map} pageEvents 埋点列表 - * @param {Map} ele 元素列表 - * @returns {Map} eleList 命中元素 - */ - function parserPageEvents(pageEvents, ele) { - var eleList = []; - var parentEle = ele || document.body; - var childEles = parentEle.childNodes; - for (var i = 0; i < childEles.length; i++) { - var childEle = childEles[i]; - var eleClassName = Util$1.paramType(childEle.className) === 'String' ? childEle.className : ''; - if (childEle.nodeType === 1 && eleClassName.indexOf('ARK_') < 0) { - var pathObj = domParentList(childEle); - var clickEleObj = { - newPath: pathObj.newPath, - ele: childEle, - path: pathObj.path - }; - for (var y = 0; y < pageEvents.length; y++) { - var eventEleObj = pageEvents[y]; - if (checkNewPathBase(clickEleObj.newPath, eventEleObj.newPath) == true && pathContrast(clickEleObj, eventEleObj, true) === true) { - eleList.push({ - config: eventEleObj, - ele: childEle, - newPath: pathObj.newPath - }); - pageEvents[y]['inPage'] = true; - } - } - var eles = childEle.childNodes || []; - if (eles.length > 0) { - var childEleList = parserPageEvents(pageEvents, childEle); - if (childEleList.length > 0) { - eleList = Util$1.arrayMerge(eleList, childEleList); - } - } - } - - // } - } - return eleList; - } - function backEasyPath(pathList) { - var path = []; - for (var i = 0; i < pathList.length; i++) { - path.push(pathList[i].tagName); - } - return path.join('>'); - } - function checkNewPathBase(clickPathList, eventPathList) { - if (!eventPathList) { - if (clickPathList) { - return true; - } - return false; - } - var clickCopy = JSON.parse(JSON.stringify(clickPathList)); //Util.arrayMerge([], clickPathList) - var eventCopy = JSON.parse(JSON.stringify(eventPathList)); //Util.arrayMerge([], eventPathList) - clickCopy.reverse(); - eventCopy.reverse(); - var clickPath = backEasyPath(clickCopy); - var eventPath = backEasyPath(eventCopy); - if (clickPath.indexOf(eventPath) > -1) { - return true; - } - return false; - } - - var visualConfig = window.AnalysysAgent.config; - - /** - * [sendMsg description]发送热图SDK初始化完毕信息 - * @return {[type]} [description] - */ - function sendMsg(msg) { - console.log('发送可视化SDK初始化完毕消息===>', JSON.stringify(msg, null, 2)); - - if (Util$1.paramType(msg) === 'Object') { - msg = JSON.stringify(msg); - } - window.parent.postMessage(msg, '*'); - } - - /** - * [getMsg description]接收iframe消息 - * @param {Function} callback [description] - * @return {[type]} [description] - */ - function getMsg(callback) { - Util$1.addEvent(window, 'message', function (msgObj) { - var msg = msgObj.data; - try { - if (Util$1.paramType(msg) === 'String') { - msg = JSON.parse(msg); - } - } catch (e) {} - console.log('获取可视化消息===>', JSON.stringify(msg, null, 2)); - callback(msg); - }); - } - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z = ".ARK_BOX {\n position: fixed;\n width: 390px;\n height: 100%;\n background-color: #ffffff;\n border-radius: 4px;\n z-index: 10000000000 !important;\n background: #ffffff;\n color: #000000;\n box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n -webkit-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n -moz-box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.15);\n padding: 20px 17px;\n font-size: 16px;\n top: 0;\n right: 0;\n font-family: PingFangSC-Medium; }\n\n.ARK_BOX input[disabled] {\n cursor: not-allowed; }\n\n.ARK_BOX .ARK_TITLE {\n width: 72px;\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 18px;\n letter-spacing: 0px;\n color: #333333;\n font-family: inherit; }\n\n.ARK_BOX .fl {\n float: left; }\n\n.ARK_BOX .pb-20 {\n padding-bottom: 20px; }\n\n.ARK_BOX .textR {\n text-align: right; }\n\n.ARK_BOX button {\n border: 0; }\n\n.ARK_BOX button:focus, .ARK_BOX button:active {\n border: 0;\n outline: 0; }\n\n.ARK_BOX .ARK_TITLE.MID {\n font-size: 14px;\n line-height: 14px;\n color: #252d39;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n\n.ARK_BOX .ARK_TITLE.SM {\n font-size: 13px;\n line-height: 33px;\n color: #4c6072;\n width: 56px;\n display: inline-block;\n text-align: right; }\n\n.ARK_BOX_HEADER {\n font-size: 16px;\n text-align: left;\n color: #333333;\n cursor: move;\n z-index: 1;\n position: absolute;\n top: 0;\n width: 100%;\n padding: 20px 17px 29px 17px;\n left: 0;\n background-color: #ffffff; }\n\n.ARK_CONTENT {\n height: 100%;\n position: relative;\n /* top: 170px; */\n width: 100%;\n left: 0;\n /* padding: 0 17px; */\n padding-top: 165px; }\n\n.ARK_EVENT {\n position: absolute;\n top: 70px;\n width: 100%;\n background-color: #ffffff;\n left: 0;\n padding: 0 17px 10px 17px;\n z-index: 1; }\n\n.ARK_BOX_PAGE {\n position: relative;\n color: #666666;\n font-size: 12px; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper, .ARK_BOX_PAGE .v-radio-wrapper {\n font-size: 14px;\n line-height: 30px;\n color: #252d39;\n font-weight: 400;\n font-stretch: normal;\n cursor: pointer;\n font-size: 14px;\n display: inline-block;\n margin-right: 16px; }\n\n.ARK_BOX_EVENT_ID label, .ARK_BOX_PAGE label {\n font-size: 12px;\n bottom: 0;\n margin: 0;\n max-width: 100%; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper span, .ARK_BOX_PAGE .v-radio-wrapper span {\n font-size: 12px;\n color: #999;\n font-weight: 400;\n font-stretch: normal; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper span.wbText, .ARK_BOX_PAGE .v-radio-wrapper span.wbText {\n font-size: 14px;\n color: #333;\n font-weight: 400; }\n\n.ARK_BOX_EVENT_ID .v-radio-ARK, .ARK_BOX_PAGE .v-radio-ARK {\n vertical-align: middle;\n white-space: nowrap;\n cursor: pointer;\n outline: 0;\n line-height: 1;\n position: relative;\n display: inline-block;\n margin-right: 8px; }\n\n.ARK_BOX_EVENT_ID .boxRadio, .ARK_BOX_PAGE .boxRadio {\n width: 270px;\n display: inline-grid; }\n\n.ARK_BOX_PAGE .ml-24 {\n margin-left: 24px; }\n\n.ARK_BOX_PAGE.mb-15 {\n margin-bottom: 15px; }\n\n.ARK_BOX_PAGE.mb-16 {\n margin-bottom: 16px; }\n\n.ARK_BOX_EVENT_ID.mb-40 {\n margin-bottom: 40px; }\n\n.ARK_BOX .ml-12 {\n margin-left: 12px; }\n\n.ARK_BOX .mr-12 {\n margin-right: 12px; }\n\n.ARK_BOX .mr-25 {\n margin-right: 25px; }\n\n.ARK_BOX .ml-8 {\n margin-left: 8px; }\n\n.ARK_BOX .fr {\n float: right; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-checked .v-radio-inner {\n border-color: #0098e1;\n background-color: #0098e1; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner, .ARK_BOX_PAGE .v-radio-wrapper-disabled .v-radio-checked .v-radio-inner {\n border-color: #ddd;\n background-color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner {\n background-color: #fff;\n border-radius: 7px; }\n\n.ARK_BOX_EVENT_ID .v-radio-checked .v-radio-inner:after {\n background-color: #0098e1; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner:after, .ARK_BOX_PAGE .v-radio-inner:after {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1);\n -webkit-transition: all .2s ease-in-out;\n transition: all .2s ease-in-out;\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_PAGE .v-radio-inner {\n width: 14px;\n height: 14px;\n top: 0;\n left: 0;\n border: 1px solid #d7dde4;\n border-radius: 2px;\n background-color: #fff;\n transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out;\n position: relative;\n display: inline-block; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner {\n width: 14px;\n height: 14px;\n top: 0;\n left: 0;\n border: 1px solid #d7dde4;\n border-radius: 7px;\n background-color: #fff;\n transition: #d7dde4 .2s ease-in-out, #fff .2s ease-in-out;\n position: relative;\n display: inline-block; }\n\n.ARK_BOX_PAGE .v-radio-checked .v-radio-inner:after {\n transform: rotate(45deg) scale(0.8); }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled {\n color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper.v-radio-wrapper-disabled .wbText, .ARK_BOX_PAGE .v-radio-wrapper.v-radio-wrapper-disabled .wbText {\n color: #ddd; }\n\n.ARK_BOX_EVENT_ID .v-radio-wrapper-disabled, .ARK_BOX_PAGE .v-radio-wrapper-disabled {\n cursor: not-allowed;\n color: #ddd; }\n\n.ARK_BOX_PAGE .v-radio-inner:after {\n content: \"\";\n display: inline-block;\n width: 4px;\n height: 8px;\n position: absolute;\n top: 1px;\n left: 4px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n -ms-transform: rotate(45deg) scale(0);\n transform: rotate(45deg) scale(0);\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_EVENT_ID .v-radio-inner:after {\n content: \"\";\n width: 8px;\n height: 8px;\n border-radius: 4px;\n top: 2px;\n left: 2px;\n transition: all .2s ease-in-out;\n display: inline-block;\n position: absolute;\n transition: all .2s ease-in-out; }\n\n.ARK_BOX_EVENT_ID input[type=checkbox],\n.ARK_BOX_EVENT_ID input[type=radio],\n.ARK_BOX_PAGE input[type=checkbox],\n.ARK_BOX_PAGE input[type=radio] {\n margin: 4px 0 0;\n margin-top: 1px;\n line-height: normal;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0; }\n\n.ARK_BOX_EVENT_ID .v-radio-input, .ARK_BOX_PAGE .v-radio-input {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0; }\n\n.ARK_BOX_CENTER {\n line-height: 16px;\n font-size: 16px; }\n\n.ARK_BOX_SMALL {\n font-size: 12px;\n line-height: 30px;\n color: #999999; }\n\n.ARK_BOX_SMALL span {\n color: #0097e0; }\n\n.ARK_BOX_EVENT_ID {\n position: relative;\n margin-bottom: 6px; }\n\n.ARK_BOX .ARK_title {\n /* width: 70px; */\n /* height: 36px; */\n text-align: right;\n /* display: inline-block; */\n font-size: 14px;\n line-height: 36px;\n margin-right: 9px;\n color: #666666; }\n\n.ARK_BOX ul, .ARK_BOX li {\n list-style: none; }\n\n.ARK_BOX .PROLIST {\n margin: 0;\n padding: 0;\n margin-top: 10px;\n max-height: 360px;\n border: 1px solid transparent; }\n\n.ARK_BOX_EVENT_ID input, .ARK_BOX_PAGE input, .ARK_BOX_EVENT_ID select {\n width: 274px;\n height: 30px;\n background-color: transparent;\n border-radius: 0px;\n border: 0;\n border-bottom: 1px solid #d2d2d2;\n color: #333333;\n font-size: 14px;\n line-height: 30px;\n outline: 0 none !important;\n margin-left: 16px; }\n\n.ARK_BOX_EVENT_ID input.error {\n border-color: #e00000; }\n\n.ARK_BOX_EVENT_ID input.PROID {\n width: 246px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX_EVENT_ID input.PROVALUE {\n width: 188px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX_EVENT_ID input.PROVALUE.width246 {\n width: 246px; }\n\n.ARK_BOX_EVENT_ID input.PROREX {\n width: 216px;\n margin-left: 12px;\n background-color: #f4f9fd; }\n\n.ARK_BOX .PROTYPE, .ARK_BOX .PAGETYPE {\n width: 246px;\n margin-left: 12px;\n background-color: #f4f9fd;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAIxJREFUCB1jzG9dJv6f6Zf/pMqEWQxYQF77vBQmDtatTAyMfxT+//vXn9c6vwldXV77/FqG/4yT/n//L8c0sSruJDMTg+9/hv/FyIpBiv7/+1/BxPjfB6SGEWZKQfs8p7//GDYzMjD2MjAx/AYpAhkwoTJpH0gNXCGIA1MMYiMrAvExQG7bInsQRpcAAB00POpoifV7AAAAAElFTkSuQmCC) no-repeat scroll right center transparent;\n cursor: pointer; }\n\n.ARK_BOX input::-webkit-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:-ms-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input::placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:focus, .ARK_BOX input:hover {\n border-color: #57a3f3; }\n\n.ARK_BOX input::-webkit-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:-ms-input-placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input::placeholder {\n font-size: 14px;\n color: #bbbec4; }\n\n.ARK_BOX input:focus, .ARK_BOX input:hover {\n border-color: #57a3f3; }\n\n.ARK_BOX_EVENT_ID_ERROR {\n display: none;\n position: absolute;\n bottom: -19px;\n left: 79px;\n font-weight: 700;\n font-size: 12px;\n color: red; }\n\n.ARK_BOX_ChOICE {\n width: 199px;\n height: 95px;\n float: left;\n position: relative;\n border-bottom: 1px solid #f1f1f1; }\n\n.ARK_BOX_ChOICE .ARK_BOX_LIKENUM {\n font-size: 12px;\n color: #0098e1;\n line-height: 30px;\n width: 100%; }\n\n.ARK_BOX_ChOICE span {\n float: left;\n margin-left: 18px; }\n\n.ARK_BOX_ChOICE input {\n opacity: 0;\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n margin: 0;\n padding: 0; }\n\n.ARK_BOX_ChOICE input + label {\n position: absolute;\n cursor: pointer;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n font-size: 18px;\n line-height: 18px;\n text-align: center;\n color: #999999; }\n\n.ARK_BOX_ChOICE input + label:after {\n content: '+';\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n border: 1px dashed #d4d4d4; }\n\n.ARK_BOX_ChOICE input + label:before {\n content: '';\n position: absolute;\n right: 10px;\n top: 0;\n width: 20px;\n height: 20px;\n border: 1px dashed #d4d4d4; }\n\n.ARK_BOX_ChOICE input:checked + label:after {\n content: '+';\n color: #0098e1;\n border: 1px dashed #0098e1; }\n\n.ARK_BOX_ChOICE input:checked + label:before {\n content: '+';\n color: #0098e1;\n border: 1px dashed #0098e1; }\n\n.ARK_BOX_SAVE {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n border-top: 1px solid #e5eef4;\n height: 60px;\n padding-top: 13px;\n /* padding: 15px; */\n background-color: #ffffff;\n padding-left: 245px; }\n\n#ARK_BOX_SAVE {\n -moz-user-select: none;\n -ms-touch-action: manipulation;\n -ms-user-select: none;\n -o-transition: color .2s linear, background-color .2s linear, border .2s linear;\n -webkit-transition: color .2s linear, background-color .2s linear, border .2s linear;\n -webkit-user-select: none;\n cursor: pointer;\n display: inline-block;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0;\n padding: 6px 15px;\n text-align: center;\n touch-action: manipulation;\n transition: color .2s linear, background-color .2s linear, border .2s linear;\n user-select: none;\n vertical-align: middle;\n white-space: nowrap;\n width: 60px;\n height: 32px;\n border-radius: 15px;\n cursor: pointer;\n color: #ffffff;\n border: 0;\n background-color: #0098e1;\n outline: 0 none !important; }\n\n#ARK_BOX_SAVE:active {\n background-color: #0086c7;\n border-color: #0086c7;\n color: #f2f2f2; }\n\n#ARK_BOX_SAVE:hover,\n#ARK_BOX_SAVE:focus {\n background-color: #47c3ff;\n border-color: #47c3ff;\n color: #fff; }\n\n#ARK_BOX_CANCEL {\n /* margin-top: 15px; */\n width: 60px;\n height: 32px;\n /* float: right; */\n font-size: 14px;\n line-height: 30px;\n border: 0;\n background-color: #ffffff;\n color: #999999;\n cursor: pointer;\n outline: 0 none !important; }\n\n#ARK_BOX_CANCEL:focus,\n#ARK_BOX_SAVE:focus {\n border: 0; }\n\n.ARK_EVENT_LIST {\n border: 0;\n border: 1px solid #eeeeee;\n border-radius: 5px;\n background: #ffffff;\n color: #000000;\n -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n -moz-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;\n min-width: 80px;\n min-height: 13px;\n position: absolute;\n top: 20px;\n left: 500px;\n padding: 0;\n max-width: 250px;\n z-index: 100000; }\n\n.ARK_EVENT_LIST a.ARK_EVENT {\n max-width: 110px;\n height: 24px;\n line-height: 24px;\n color: #0098e1;\n margin: 5px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n text-decoration: underline !important;\n cursor: pointer; }\n\n.ARK_SHOW {\n display: block !important;\n visibility: visible !important; }\n\n.debugLog {\n top: 0;\n left: 0;\n position: absolute;\n width: 260px;\n min-height: 270px;\n padding: 20px;\n z-index: 999999999; }\n\n.debugLog .l-list {\n position: relative;\n overflow: hidden; }\n\n.debugLog .l-list div {\n color: #ffffff;\n font-size: 13px;\n line-height: 24px;\n word-break: break-word; }\n\n.debugLog .bg {\n width: 100%;\n height: 100%;\n background-color: rgba(47, 50, 58, 0.8);\n box-shadow: 0px 6px 18px 0px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n position: absolute;\n top: 0;\n left: 0; }\n\n.debugLog .cha {\n position: absolute;\n right: 20px;\n color: rgba(255, 255, 255, 0.5);\n top: 20px;\n cursor: pointer;\n font-size: 14px;\n width: 10px;\n height: 10px;\n cursor: pointer; }\n\n.ARK_HOVER, .ARK_CLICK {\n outline: 1px solid #e00000 !important;\n outline-offset: -1px !important;\n /*position: absolute;*/\n /*background-color: red !important*/ }\n\n.ARK_SHOW_DISPOSE {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(20, 137, 226, 0.2);\n border: dashed 3px #1489e2 !important; }\n\n.ARK_SHOW_DISPOSE.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_SHOW_DISPOSE:hover, .ARK_SHOW_DISPOSE.ARK_NO_LIGHT:hover {\n background-color: rgba(20, 137, 226, 0); }\n\n.ARK_SAVE_DISPOSE {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(20, 137, 226, 0.2);\n border: solid 3px #1489e2; }\n\n.ARK_SAVE_CLICK {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: transparent;\n border: solid 3px #1489e2; }\n\n.ARK_IS_EDIT {\n position: absolute !important;\n bottom: -21px !important;\n left: -3px !important;\n background-color: #1489e2 !important;\n font-size: 12px !important;\n line-height: 12px !important;\n color: #ffffff !important;\n padding: 3px 5px !important;\n white-space: nowrap;\n margin: 0 !important;\n display: block !important; }\n\n.ARK_SAVE_DISPOSE.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_SAVE_DISPOSE:hover, .ARK_SAVE_DISPOSE.ARK_NO_LIGHT:hover {\n background-color: rgba(20, 137, 226, 0); }\n\n.ARK_SAVE_PRO {\n position: absolute !important;\n z-index: 999999999 !important;\n background-color: rgba(255, 163, 0, 0.1);\n border: solid 2px #ffa300; }\n\n.ARK_SAVE_PRO.ARK_NO_LIGHT {\n display: none !important; }\n\n.ARK_NONE {\n display: none; }\n\n.ARK_CLICK_ELE {\n position: absolute !important;\n /* width : 2px;\n height : 2px; */\n z-index: 999999999 !important;\n display: none;\n /* background-color: rgba(0, 0, 0, 0.3); */\n /* background-color: rgba(20, 137, 226, 0.2); */\n border: solid 3px #1489e2;\n /* transform:none */ }\n\n.ARK_PRO_ELE {\n position: absolute !important;\n /* width : 2px;\n height : 2px; */\n z-index: 999999999 !important;\n display: none;\n /* background-color: rgba(0, 0, 0, 0.3); */\n /* background-color: rgba(20, 137, 226, 0.2); */\n border: solid 3px #ffa300;\n /* transform:none */ }\n\n.ARK_ADD_PRO {\n width: 100%;\n height: 40px;\n background-color: #f4f9fd;\n border: 0;\n border-radius: 4px;\n margin-bottom: 20px;\n margin-top: 10px;\n color: #1489e2; }\n\n.ARK_ADD_PRO img {\n margin-right: 9px;\n margin-bottom: 3px;\n width: 11px;\n height: 11px;\n vertical-align: middle;\n position: relative;\n display: unset;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\n.ARK_PRO_ITEM {\n background-color: #f4f9fd;\n border: 0;\n border-radius: 4px;\n margin-top: 10px;\n padding: 20px 16px;\n display: inline-block;\n position: relative; }\n\n.ARK_ICON {\n width: 24px;\n height: 24px;\n display: block;\n margin-left: 4px;\n margin-top: 6px; }\n\n.ARK_ICON.ICON_XQ {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAelJREFUSA3VVs0rRFEUP+d6UdQg7PwBFmwsZGspbHxtNGJDFjNRU2bykZJBioyiLGawZC//gKyQj8X4LLKRkiym8N49zp28STPPu9M0s3Dqde89H7/fOfed++7Do5OrVkLYJKJayKMg4hMSDBkKXAAMNzfW7ecRHw5Pr9sAaRMOT+KUT+DfWAqbky+sFJzAyCb/wNJO2eeXNQ8E3YTEZeNuZVX1xMxwR0IXnxXB55cZJYJ2ELCBAEJKGHl9falmcK+OQLtFvvBuDYP3AooAEHr4KWaSIBH2ja7EKnQE2goM/Cg3uc+EkPfSgnXVciiwFSRv1ofh4eWbG4m2gpWQ95YBHhCKUr6CGRDwZjXY/+gGrmzaCpQTCtGFUpaqeVIkvRtFRo+9dBtTWbk5RUIDxyaUxW2fElF6uRz0ntlrtzErgnSAhEwE/HM79el6p3VOBEByktA694eje2MLsQYnYFuXG4GK5j7l9u02JZz5wluzNmD66PqSxxa3m6RlDUgQF4CJOz7JmcJEiNTJhqlMo6aLTClbGHQEQHLGTuE/OsK7v6yuW7QWGlzklp/+KzilF6TOiqO4EqiISGhwVkfChy53ghQJinGeZ3w9+Ug/Cyg+UH6O8v9vNHX7Jy9ox/pyVyrM5J9FoX9bvgFfDa+ln7mJKwAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_XQ:hover {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd1JREFUSA3dljlLA1EQgGde4i2aIiESVPwB2tpbilYabUSwUqwEjQd4NCkkRhQsFFL4A7QX/4SFRyF4gEnwiuAFKnH3jbOrayRu9oWYNAaS3fdm5vvevF2yi77lRCfpEAOgRijqB5PogmG3AUeEkdRU804x+d5osot0ioE3Eqdign+yDLb4OVGK85IL3Pms2h+9rpH0vghEQUIgJNgq87hnL0cCL6r6vARSpjcBsJtQbAiQgi/aaPpR9zJ8UCVQblHD2pWPgf2IGBJEdQRYDogzDB5oWb33qATKDnRNqzchQp5LHdaBbSzr5O3CtHit49iDk0TZQWq86ZSJF7zyTK4wHHhyORaIO8GNmLIDEyBcvSChGkAzhyjFE7iozxwofjKrcki8CwX2XJV4bKXU1lcd3U407ltjp2NegmzA8+NLyB+Nt2bP240LEhDJOZ3wwBdJbPtXEm12YGuuIIFZzHcRAQV1DfZ9S8mwBcw+Ol7khpVEu6bRkABxKN/oLLv4W4TUw+fzdnFHgf4OHVw0KvkWAvNrhzDn7OUcctyi1HRThDMWcmK/Agw5zZXjKDCK7iabw0oJ/UFgSQTiNAL++vdEgBssr9jN1cG/eKJh0nhA52yxwMAnk98sSv3a8gEW3qVw8YWlQQAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_XQ.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAd5JREFUSA21VksvA1EYPbcvfUTr0SKUKIkm3SBIhA0bicR/YCFYCz9CIuwtLST+gKTCko2FV1dEE1rxiFIh02o7ve6dZph4zL2k/ZLJfczcc8733TMzlwSWE+NUxRpAgyhrkCSxYob4lxKJ+SFfsLvJUVb4o9scVvefkxauvNzgXGmPJpgGGUFlo+IENhn96WwRGycviN3n4XEQjLa7MN7lBpFYLCRQi8DKfhpPmSLGOl14UFRsxl5RpMBE2C2kEJboPJXDZbqA2X4v4k95BH12jIRc2IlnhOD8ASGBUijhUEJxzKwXPVcQqrUhU2CpSYSQIFxvg83KzExLFWeV0Wof8dsl4CUy8DgsmOv3gbAM9Ai4rZjs9epD01aYAV890FIFu+XTM5EGB2qcUkvFe/BVHq/91pnCXKV+vfXjWE6GYWk2TzWbLmynsH78ikcB0Z8JdK4CS2D3QsFiNIW9q6w+/a01fdEOb3I4vctptlTp5yYbUbhbj27fMNzmNE5/9E0JDq6zpup0lICH+fiXMC3RdJ8Xg60/KzPiNf6XgDuTfyJEJP8m4Cp1ktEOl9Y3Kuf9Zq8Vobrf32rTPdDBOMlUT7V26XOyrekeyIKYPccISJL/oMsdJUx2sqj0seUdh92PWTODHHwAAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_REX {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAphJREFUSA3VVk1oE0EUnrfZxpRqCoVajCKJMbWIpa2mklLQm9CKF1HwIIgitAdPoicFo1i8K168CSIIgvTi1VOTCpIfQkvW0qQk0Vil21Rl02ySfb4Rp7i7LkpJDg7svnlv3vu+N29mZxbiCWUCgT1BxH2sRQ0Y0xjArLRTmoZYUilKjE1FRg69bhE+S6c/dWlG5REi09lcIoutAv4dZz6T66PkVyn59rTI4IFVKvvuthGItNtOIAsmq6TpSVTDtwyYF5DVaDzm9njuhg/7y3PJ7DPSR3kMH5M75NPHBw8WuW5tjgQrKytucg7v6PN2Ges1b72m39Rrmy/JNg4Ix8Al3ZABFxrNDmP0iL9kBRa6I4FwCPt8GvW1bPZLVK2qlXw+7ymv64y2YGl0qD8n/JzkP60BL9d6VT3LkOUCgcAmB6PA3kS24Hu3vNztBM7tf50B38ux1Pvv9HXmJNl1QYAZRvNpVdN0YLBItglht0obAZVi15qmRsnxFgAYBPAQGZ53e+Vz4WBwYwtAck2OD4eSQp9LKjOdnZ2Pjw7s/yhsXNpKpOrqXmA4LZzGRvpniOSN/rU+y+sv7DaJeLFeqwatdhsBZU3VMLex4dB1hlAoV/TnfD1+jmLzZDy9dGY+tXTK7G3WbARi2O/36/QN3Oc6cSLN5AqVajGTKXTT6fuCrCfQMC7zJ7ZQ7BFxVmlbA8qQDj8+DzDI+Y4IIL1B/du/9KiwC0mHpuiapI2gx93zYa2pSvGkchVcrq1FNEVZFDQaQTTYHmRS3jJk36YDA73f4inlkoF4jzWajlM3A8EGSHAtMhQqme2ktes+4EQc23GRbZls0/D/EvArk3beZ4lepfmkMrnNCvwxjF/62NAf0JH7Ctr92/ID4uMOd90r/84AAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_REX:hover {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAApdJREFUSA3VVk1oE1EQnnmbxNTSVEq3wSQFsQcvXsR6VbwUWtGDKHgQbEVIDyK2te1BwSgWSSoiahE9aAURBEF68aonwZO3gpco2STabq2GNml+d5wHfSW72yCU5ODCMv/fvJl5+96ifs8YpBo8A6AINOlBwAIiLAT8u0exO24YLETNqd73TcKH4OzPdsuqPiK0ytAdT1GzgOtxeh4sBfWEsSTqlc3kl68Gl4iop2UJ1GJbnsCjMjlpjEg8njU+I2GAbSVC+gTetlsrY/qP7oTxCgmObMaUvB5xIjsRNpwYUm5Ywfw8+ICg37tHOwS4a0AQ5LFcfLsJclgIcU34fIOaz3MqMx5KbwcudQ0rUAHZaKjAfOFA3Iz9guKffS/Iv26mwRKQNseCSemHY8rbTRtWUO8q27WqlU4jQPL7CBalDWuo98bN0P6nq531vk7+nxXIvTyXMNYJIQma55wCIKi+3IBauZiDRdYNKr2TuhJwKzp+w0aMHa/zOi1AfMizOBvobD+TjHbltgA0bWhlIvxFyXoiNeOntjljWs8qnaSuFq1plTABjionczIyw+fUh7VcfkH2X+mdlAjPF7HS59S7EpAG3Gr7szzVO84tSuXN9Gs5D2kli44FZzMnexLZAbu3XXIlUObhYSgLhDtSRkQ62B+5CESLz5/kOnnLvkGioxZZI8Rv5L7RpeKc1DUDrHHH+byNIfcf4KYK+Hgcq8zf2JRjSq8on8qKtVFXgo6aN7OKVcFf6yUQ2tYQbVEOAcnq40r2+vzWN4fJ/aF9ndbX9ETmAgfdBqvWsHQ7EPHuEpczVyJpu56lVt0HMpHEbjhk10p2qPh/E8grk7f3MleAaT5vhnbYgW3D5KVPpcpdAnqHrf5t+QvWh/ZinlE//gAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_REX.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAoVJREFUSA3VVj1oFEEUfm9m9/aye3eJcgkELxLsTGklqI2doqJga2UTRIyVYqUoFsEfLAQxomBnJ7axsbGzsbMxSi6/Rwioud292533nDEZk+zeiYZc4YPlzcz73vvem7czuzh4v36CFUwBcA12SRAwRIQ3laI/jtXJet136N5wH7zfpfjQUk5xKeJrKdCiMJnvZnCTpCfTuOqrx7qSc5qgNxIIWGXmoZ4R2LR7TuBYpqxmgfj1B7wExkCXmkiBHweK/Kxf8sqXprgDDGPGx9iqRZqouLicjWHmXQkSEC4RjdV8Ohprkm8tuLAa4mR/mS8y8cHAEY+8As4gMlUEdwz+RwKbjSch9oBjH2BqNsJ3bSELAATC4caAVPMW103/VQ/MdjUSPK4Pz3yBVNsEUynvWWu71TaIUrfgZr3rFlmnz2s4vXEy58tFecNkbyRSeCtM01QkODMawBWLz+pcBUmK/mxTXF0HIhWEeIUM4b4Arg86yScboOTBxIEynxoN6FfweoiXTEXWbnWOICQaSonPW8CIr15IwR8Wmvhgff+tZbtOFJwMKX+f5QhAyu2eerY/4IcIvLTwne+afhhAK8FDy5E8thTh4ZzDloU8wYbRBUoKAp5bbK0EtyXyTJvdUgFxWld5KFJ8pkV4Ok64YnFZnW+yUgAoAYl4JOCn1kEyqZEAngC3QZPp632r6KLirfPNcY7AF6KxwizmQjzrFZzfTd10yY/SRNUYuNrn0kLWmiNwHQ59KW7GBOOtOO3POnSa6/zXPEdMlqVqZO05AgMY9umtVub5B9Fb20G6NrkDdkdL/y9Bk2Av6itMV4BzixEc2VH9XZzMR38llJf1m/Uae/3b8hNICftztdejQwAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_NUM {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAnZJREFUSA3tVjtok1EU/s5NalJDsa0PUHTwgXRQbAuCUESdfA26mEERjJaqg0Fj0NAuWaxVqaFRESsmoEPBDopD0ElRqi5GB5EaERE7GPERaQyJ+N/juSkJiSV1SLL1LOf+//3u95177rkPehZ/u50Jw8y8FDU0IpogRo/dkCvg8IbOtlgN+TH2MrETxMMYi49zLYlLuQy3BF9fmxX4b37tMyGkdOn42WiPBjaBKaeI7gz1Hrhnxvgv3FyU+235CVgBhYmGhjmhQf++j//ykVnprs42wU03b390UER8BHolvU0MXqlg26+bFo5iMvmOCAvA/AKEdQz6Y3e6VoV87u8Fphmr6PTA7XlCfkQ2TCzc5+loXYI1AH3QpE9R+stegJfJRuoO9x3cqAi7RajFyma6C+QFX7GKMjrbLqC5Ev0DAw56PFmZ5kMhWgvobeafanTdN7454Hkk4lmG7jLfpVZRwAZrvgFqwrfCANmRU22m1SDiiyf2/DB9QSItaUqJSH5MAW98RYFSUDXtigIWbPloFaMYlaRoqk2ckFSRLzTaYsSDLCcCo1nWpTjbQlBlZXosHHOoX8lDcki9d8L5PGOlM1I5WwUcNn08mdwilfNaJi65127OZUzfSGogulm8U9L2VHyZlc1Apb+2a81X2KJL5wLun6RwTSpph7c/Eqf05zcS4XLJ8/nWxTwi/pNmvuE9E3miGXelGFJ2h+t6Gbt8lAk0ki0hEUYFfNUAhwKek6ToqCzuuGTksSK1K9zruWUqSsGxnhmXRSgpkUeUQkfpHigKzR7XxVRUaJStQQVMVb/rL2Bu//wFXVWc0wcbzvzLot7Plr8avfRhA7RvpQAAAABJRU5ErkJggg==) no-repeat; }\n\n.ARK_ICON.ICON_NUM:hover, .ARK_ICON.ICON_NUM.active {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAlxJREFUSA3tVktoE2EQ/mY3acSgtTUPsNmCRQRBoT14kqKe6uOgZ/GilNaKFzUm117TBAs+qK2oBw8efRyKnhQFT6IeRKQHH9ktGoPVKGpisjvOn3ZDIm4tJPXUvczs/8983+x88+8uhTPmXrYxBXAMLb3IIh1DPgVOhOF8onu6lfihtLWfbZ5CKJXlVgLXYylsrX5hOfwVgn921bdYBDNTNDM7BOadDC5prN/MJbvuqJxo+kPERjlOjB65tXyaPv4+vuHdn3iLahAdMzOO41ySMdsiif027NuRtHl40zkO2Fx+IuAnhDwq+0fLduVZ7KzZuWSCnsm5dgYdI6LpfMLoC4aNrXJe3rCDRKFkHhJgQyMM5pPd/TrRQQHu+FXB4JIJvha+90pbVoNwTyW9PUJFgO7L2jY42KPW/DruKjsS73pAQNEB71D39ZdnizQN61UgOfjkJjAt+ESbQcTmydhntTdKEkX4IiTVHDdeWU+C+qBmfE8CZ6FyOeu1qkTUeZ95RjQgY9zqUOSjLFGMdSJ27WndohoI1HREUtnjkUx2YG178DmBfkjigApWe/LG3S2iv5Dnrva+WOHq3kRmdpeAryKmxy6waxsIvpWsXge4yA6dfz3cWZA2T8pZ2BdOmU8LP82XzNgoIGPBkHFDNDClgCvhVPaRzXxLaRDw47IL7NoGgkBwzQxBuybjOaECcmeM0xq0ERnPVwLwUId+4GMydl1NlNbWtl1EvyBEORH3qs/v77NOGXMucM2uvK5rrfBwGjTwiGlq+X8QkKU+0E2V+ZfkeUz5s1ju35bf6GXjj9JSLtoAAAAASUVORK5CYII=) no-repeat; }\n\n.ARK_ICON.ICON_DEL {\n position: absolute;\n top: 11px;\n right: 11px;\n width: 8px;\n height: 8px;\n margin: 0;\n padding: 0;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAAIxJREFUGBlNjjESwjAMBE8y/IfkD/SuQs0DGGjgC5mh4gcZSqjo+QPDf4htcsnII1Xn2/NJcuyHswS8b5f9F24O/b0BcqOE+Yfn6TpsjFNLzo8Q8BGaNBjSNTq+TbN1DtTQiBcKMAWjrVTCOhNE/bK4c8CtiLpC9DeJg53Vek9LwpbHGWQxdVHdpYT2D69xRVCaoaWHAAAAAElFTkSuQmCC) no-repeat; }\n\n.ARK_ICON.ICON_I {\n position: absolute;\n top: 9px;\n left: 60px;\n width: 15px;\n height: 15px;\n margin: 0;\n padding: 0;\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAc5JREFUKBV9Uj1PG0EQ3dkjCidcpKBIqIESQYXgT6QgcpEIoQPRINlgCF+mth0+FL4qBDJGSCBZAlHxExBUQAmiJwgQFJjzAXeTeTbrnJDDSnczO++9ud03R+o/a3Rm/bP3bNV//ODfzI45f6rR6G1xMJ3rY+ZxVtwk2IM8EUXqgkhNL032roX5FfHI3Fb9k+flhNikiZJUax0sJLovh+Y3v3DR7+SAM6zUeYR0TybZc4smNabT85O3Id3vrNq61vnhqGvqaCD5TuJ3ft8vFlYLHKzI/htwjVc8nXOka6MI+8PCWCor5fJCHbjsWmLpjX9iud8EjhoWGlE4AidNk8RBAnUNVxVzM+4YJiJfnuqteGIw8JhUez6ftzTGIcDD690MpxTDxzZAicfsHl+4nzSpmmsBInDVEN6LY9PbDYrIbmu07/Xi1PcrOdsZxvGeyGBe4HVIfhiNRv2S29IpFTCnZRy2IVWLwDFvS6k54BVD4qnsrjR5fDsu0wRCzBmapaTzA/XylyWxrYiDwkuxcDKYyXUZDxCx993CqcBk67oB8LAqXy5v5Yf5lf2qfPWTiTpkhC7MIVZH4uzsQtLZM7yqYgNijhgHXIU5ph6OfwHgJr3gZ7nUAgAAAABJRU5ErkJggg==) no-repeat;\n cursor: pointer; }\n\n.ARK_SCROLLBAR {\n overflow-y: auto;\n overflow-x: hidden; }\n\n.ARK_DROPDOWN {\n width: 238px;\n will-change: top, left;\n display: none;\n left: 68px;\n top: 33px;\n height: auto;\n border-radius: 2px;\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n z-index: 500;\n background: #fff;\n position: absolute;\n padding: 6px 0 !important;\n max-height: 230px;\n overflow-y: auto;\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: 40px; }\n\n.ARK_DROPDOWN.TOP {\n top: -120px; }\n\n.ARK_DROPDOWN li {\n position: relative;\n cursor: pointer; }\n\n.ARK_DROPDOWN span:hover {\n background: #f0f6fc; }\n\n.ARK_DROPDOWN span {\n display: block;\n height: 34px;\n margin: 0 1px;\n padding: 0 9px;\n font-size: 14px;\n line-height: 34px;\n color: #4c6072;\n background: #fff;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n -webkit-transition: background .2s;\n transition: background .2s; }\n\n.ARK_DROPDOWN .selected span {\n color: #1489e2; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar {\n width: 4px;\n height: 4px; }\n\n.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb {\n background: #e4eaf1; }\n\n.ARK_SCROLLBAR:hover::-webkit-scrollbar-thumb {\n background: #e4eaf1;\n min-width: 200px; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px; }\n\n.ARK_SCROLLBAR::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px; }\n\n.ARK_SCROLLBAR ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0);\n border-radius: 2px;\n -webkit-transition: background .2s ease-in-out;\n transition: background .2s ease-in-out; }\n\n.ARKTOOLTIP {\n padding: 8px 16px;\n position: absolute;\n z-index: 1070;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n filter: alpha(opacity=0);\n opacity: 1;\n line-break: auto;\n background: rgba(37, 45, 57, 0.95);\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n border-radius: 6px;\n -moz-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n -webkit-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n border: 1px solid #D8E0E9; }\n\n.ARKTOOLTIP .ARROW {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n bottom: -5px;\n left: 50%;\n margin-top: -10px;\n border-width: 5px 5px 0px;\n border-top-color: rgba(37, 45, 57, 0.95);\n /* right: 0; */\n margin-left: -5px; }\n\n.ARKTOOLTIP .ARROW.ARKTOP {\n border-width: 5px 5px 0px;\n border-top-color: rgba(37, 45, 57, 0.95); }\n\n.ARKTOOLTIP .ARROW.ARKRIGHT {\n left: 1px;\n bottom: unset;\n top: 38%;\n margin-left: -5px;\n border-top-color: unset;\n border-right-color: rgba(37, 45, 57, 0.95);\n border-width: 6px 4px 6px 0;\n border-color: transparent rgba(37, 45, 57, 0.95) transparent transparent; }\n\n.ARKTOOLTIP .ARROW.ARKBOTTOM {\n border-width: 0 5px 5px;\n border-bottom-color: rgba(37, 45, 57, 0.95);\n border-top-color: unset;\n bottom: unset;\n top: 5px; }\n\n.ARKTOOLTIP .WORDS {\n max-width: 200px;\n color: #ecf3f8;\n text-align: center;\n border-radius: 4px;\n /* white-space: nowrap; */\n line-height: 21px; }\n\n.ARK_FIXED_BOX {\n display: none;\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1000;\n background-color: rgba(255, 255, 255, 0.4); }\n"; - styleInject(css_248z); - - var ysMsg = '页面上每个可点击的位置都被视为元素,通过选择元素来圈定当前定义的事件生效范围,即点击哪些位置会上报定义的事件。
    1 当前文本:指定内容,不区分元素类型,当文本发生变化时,埋点失效。
    一般用于给某个特定内容文本埋点,
    比如:
    圈中按钮上的文字【登录】,当仅选择当前文本时,如果页面上有个非按钮的链接也叫【登录】,则在两处触发点击时,都会上报该事件。
    2 当前位置:指定位置的元素,当内容发生变化时,埋点仍然有效,页面结构发生变化时,埋点失效。
    一般用于给某个特定位置埋点。
    3 同级元素:指与埋点元素的所有父级元素标签类型及元素个数相同的元素,一般用于给列表埋点,可以添加属性,区分同级别但不同内容的元素。
    4 同类型元素:指与当前埋点元素的Class属性值相同或包含当前埋点元素的Class属性值的元素,点击相同类型的元素时会上报同一个事件,通常可以添加属性,区分同类型但不同内容的元素点击数据。
    四个选项可以结合使用,
    比如:
    可选择当前位置+当前文本来给特定位置上的特定内容埋点
    可选择当前文本+同类型元素来给相同控件相同名称的'; - var ymMsg = '可以选择埋点生效的页面:
    1 当前页面:指仅在当前页面(URL) 点击相应元素才触发上报该事件
    2 全部页面:指在所有接入SDK的页面中点击相应元素,都触发上报该事件。比如有非常多的商品详情页,每个页面上都有【加入购物车】按钮,即可选择全部页面,那在任何详情页上点击加入购物车,都会上报到同一个事件中,方便统计分析。'; - var eventHeader = '
    ' + '{CHANGETEXT}' + '(可拖动)' + '
    '; - - var eventIDBox = '
    定义事件' + '
    ' + '事件ID' + '' + '仅支持字母、数字和下划线,且以字母开头' + '
    ' + '
    ' + '事件名称' + '' + '建议您命名不超过50个字符,便于阅读' + '
    ' + '事件属性' + '
    '; - - var eventProItem = '
  • ' + '
    ' + '属性ID' + '' + '
      ' + '
    • 字符串
    • ' + '
    • 数值
    • ' + '
    • 布尔值
    • ' + '
    ' + '建议您命名不超过50个字符,便于阅读' + '
    ' + '
    ' + '属性值' + '' + '' + '
    ' + '
    ' + '' + '建议您命名不超过50个字符,便于阅读' + '' + '' + '
    ' + '
    ' + '' + '建议您命名不超过50个字符,便于阅读' + '' + '
    ' + '
    ' + '数据类型' + '' + '
      ' + '
    • 字符串
    • ' + '
    • 数值
    • ' + '
    • 布尔值
    • ' + '
    ' + '
    ' + '' + '
    '; - var eventPorListStart = '
    ' + '
    ' + '
      '; - - var eventPorListEnd = '
    ' + '
    ' + '' + '
    ' + '
    '; - var eventPage = '生效范围' + '
    ' + '圈定元素' + '
    ' + '' + '' + '' + '' + '
    ' + '
    ' + '生效页面' + '' + '
      ' + '
    • 当前页面
    • ' + '
    • 全部页面
    • ' + '
    ' + '
    ' + '
    ' + '
    ' + '
  • '; - - var eventSaveBox = '
    ' + '' + '' + '
    '; - - function setEventTemp(config) { - if (!config) { - config = {}; - } - var text = config.content && config.content.length > 10 ? config.content.substring(0, 10) + '...' : config.content; - var relateds = config.related || []; - var properties = config.properties || []; - var bindings = config.props_binding || []; - var proTemp = ''; - var isList = false; - if (config.new_path && config.newPath && JSON.stringify(config.new_path).indexOf('"row"') < 0 && JSON.stringify(config.newPath).indexOf('"row"') > -1) { - isList = true; - } - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var type = relateds[i].properties[0].prop_type; - var typeName = '字符串'; - if (type === 'bool') { - typeName = '布尔值'; - } else if (type === 'number') { - typeName = '数值'; - } - var value = relateds[i].properties[0].value; - var regex = relateds[i].properties[0].regex; - if (regex) { - try { - regex = Util$1.decode(regex); - var _regex = new RegExp(regex); - var regexVal = _regex.exec(value); - if (regexVal && regexVal.length > 0) { - value = regexVal[0]; - } - } catch (e) {} - relateds[i].properties[0].regex = regex; - } - proTemp += eventProItem.replace('{PRONAME}', relateds[i].properties[0].key).replace('{PROVALUE}', value || '--').replace('{PROVALUEDISABLED}', 'disabled').replace('{ISPROELECLASS}', 'v-radio-checked').replace('{PROREXACTIVE}', relateds[i].properties[0].regex ? 'active' : '').replace('{PROREXVALUE}', relateds[i].properties[0].regex || '').replace('{PROBASEVALUE}', relateds[i].properties[0].value).replace('{PROTYPE}', typeName).replace('{PROTYPEDATA}', type); - } - } - if (properties.length > 0) { - for (var y = 0; y < properties.length; y++) { - var proType = properties[y].prop_type; - var proTypeName = '字符串'; - if (proType === 'bool') { - proTypeName = '布尔值'; - } else if (proType === 'number') { - proTypeName = '数值'; - } - proTemp += eventProItem.replace('{PRONAME}', properties[y].key).replace('{PROVALUE}', properties[y].value || '').replace('{ISINPUTCLASS}', 'v-radio-checked').replace('{PROVALUEDISABLED}', '').replace('{ISPROELECLASS}', '').replace('{PROTYPE}', proTypeName).replace('{PROTYPEDATA}', proType).replace('{PROREXVALUE}', '').replace('{PROBASEVALUE}', ''); - } - } - - var eventTemp = eventHeader + eventIDBox + eventPorListStart + proTemp + eventPorListEnd + eventPage + eventSaveBox; - var temp = eventTemp.replace('{CHANGETEXT}', config.isChange ? '编辑事件' : '创建事件').replace('{EVENTID}', config.appEventId || '').replace(/{EVENTNAME}/g, config.appEventName || '').replace('{PAGENAME}', config.isAll === 1 ? '全部页面' : '当前页面').replace('{PAGENAMETYPE}', config.isAll === 1 ? 'isAll' : 'isPage').replace(/{EVENTTEXT}/g, text || '').replace(/{EVENTTEXTTITLE}/, config.content || '').replace('{ISPATHPAGE}', config.new_path ? 'v-radio-checked' : ''); - for (var z = 0; z < bindings.length; z++) { - var binding = bindings[z]; - if (binding.prop_name === 'class') { - temp = temp.replace('{ISCLASSPAGE}', 'v-radio-checked'); - } else if (binding.prop_name === 'text') { - temp = temp.replace('{ISCONTENTPAGE}', 'v-radio-checked'); - } - } - temp = temp.replace(/{ISCLASSPAGE}/g, '').replace(/{ISCONTENTPAGE}/g, '').replace(/{ISLISTPAGE}/g, isList === true ? 'v-radio-checked' : ''); - return temp; - } - - function setProItemTemp() { - var proTemp = eventProItem.replace('{PRONAME}', '').replace('{PROVALUE}', '').replace('{ISINPUTCLASS}', 'v-radio-checked').replace('{PROVALUEDISABLED}', '').replace('{PROTYPE}', '字符串').replace('{PROTYPEDATA}', 'string').replace('{PROREXVALUE}', '').replace('{PROBASEVALUE}', ''); - return proTemp; - } - - var $lib_version = '5.0.0'; - - var debugTemp = '
    ' + '
    ' + '
    {LOGLIST}
    ' + '' + '
    '; - - function setDebugTemp(config) { - if (!config) return; - - var list = ''; - for (var i = 0; i < config.list.length; i++) { - list += '
    ' + config.list[i].title + ':' + config.list[i].val + '
    '; - } - var temp = debugTemp.replace('{TOP}', config.top).replace('{LEFT}', config.left).replace('{LOGLIST}', list); - return temp; - } - - function MoveBox() { - var _this = this; - this.ele = null; - this.parent = null; - this.parentOption = { - x: 0, - y: 0 - }; - this.touchOption = { - x: 0, - y: 0 - }; - - function down(event) { - event.preventDefault(); - var touch; - if (event.touches) { - touch = event.touches[0]; - } else { - touch = event; - } - - _this.touchOption = { - x: touch.clientX, - y: touch.clientY - }; - _this.parentOption = { - x: _this.parent.offsetLeft, - y: _this.parent.offsetTop - }; - Util$1.addEvent(document, 'touchmove', function () { - event.preventDefault(); - }, false); - Util$1.addEvent(document, 'mousemove', move, false); - Util$1.addEvent(document, 'mouseup', end, false); - - Util$1.addEvent(document, 'touchmove', move, false); - Util$1.addEvent(document, 'touchend', end, false); - } - - function move(event) { - var touch; - if (event.touches) { - touch = event.touches[0]; - } else { - touch = event; - } - var x = _this.parentOption.x + touch.clientX - _this.touchOption.x; - var y = _this.parentOption.y + touch.clientY - _this.touchOption.y; - - _this.parent.style.left = x + 'px'; - _this.parent.style.top = y + 'px'; - // _this.parentOption = { - // x: x, - // y: y - // } - } - - function end(event) { - Util$1.removeEvent(document, 'touchmove', function () { - event.preventDefault(); - }, false); - - Util$1.removeEvent(document, 'touchmove', move, false); - Util$1.removeEvent(document, 'touchend', end, false); - - Util$1.removeEvent(document, 'mousemove', move, false); - Util$1.removeEvent(document, 'mouseup', end, false); - } - this.init = function (ele) { - this.ele = ele; - this.parent = this.ele.parentNode; - - Util$1.addEvent(_this.ele, 'mousedown', down, false); - Util$1.addEvent(_this.ele, 'touchstart', down, false); - }; - - this.remove = function () { - if (!this.ele) return; - Util$1.removeEvent(document, 'mousedown', down, false); - Util$1.removeEvent(document, 'touchstart', down, false); - }; - } - var moveBox = new MoveBox(); - - /** - * 添加关联元素属性及样式 - */ - function addProEleBox() { - var step = 0; - var proPath = Util$1.arrayMerge([], proEleObj.newPath); - var clickPath = Util$1.arrayMerge([], clickOpenEle.newPath); - clickPath = clickPath.reverse(); - proPath = proPath.reverse(); - - var status = true; - while (step < clickPath.length && status === true) { - if (!clickPath[step] || !proPath[step]) { - status = false; - } else { - for (var item in clickPath[step]) { - if (clickPath[step][item] !== proPath[step][item]) { - status = false; - } - } - } - - if (status === false) { - break; - } - step++; - } - if (step > 0) { - proPath.splice(0, step - 1); - } - if (step === 0) { - proPath[0] = clickPath[0]; - } - var num = clickOpenEle.newPath.length - step; - var proRelated = { - target: { - h5_path: proPath.reverse(), - step: num - } - }; - proEle.setAttribute('data-ark-related', JSON.stringify(proRelated)); - var value = getElementContent(proEleObj.ele, true); - proEle.value = value || '--'; - if (value) { - proEle.setAttribute('data-ark-value', value); - } - var activeIcon = proEle.parentNode.getElementsByClassName('ICON_XQ'); - if (activeIcon.length > 0) { - activeIcon = activeIcon[0]; - activeIcon.className = activeIcon.className.replace(/ active/g, ''); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].style.display = 'block'; - } - - var proDiv = setOnceBox(proEleObj.ele, '', 'ARK_SAVE_PRO'); - proEleObj.ele.parentNode.appendChild(proDiv); - - var showPro = document.getElementById('ARK_PRO'); - if (showPro) { - var showProParent = showPro.parentNode || document.body; - showProParent.removeChild(showPro); - } - isAddPro = false; - } - var clickOpenEle = null; - var relatedLength = 0; - - function openVisualBox() { - relatedLength = 0; - if (!clickEleObj.ele) return; - clickOpenEle = Util$1.toDeep(clickEleObj); - var ele = clickOpenEle.ele; - - // var eleParent = ele.parentNode || document.body - delClickBox(); - - // checkChildrenEvent(ele) - var tagName = ele.tagName; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var config = { - id: 0, - url: window.location.protocol + '//' + window.location.host + window.location.pathname + hash, - tagName: tagName, - appEventId: '', - appEventName: '', - isAll: 0, - allVersion: 0, - dispose: 0, - isText: '', - link: clickOpenEle.path, - index: clickOpenEle.index, - content: getElementContent(ele), - classes: Util$1.paramType(ele.className) === 'String' ? ele.className : '', - isChange: false, - related: [], - properties: [], - props_binding: [] - }; - var eventAttri = ele.getAttribute('data-ark-attr'); - if (eventAttri) { - eventAttri = JSON.parse(eventAttri); - config = Util$1.objMerge(config, eventAttri); - config.isChange = true; - config.new_path = eventAttri.new_path; - config.related = eventAttri.related || []; - config.props_binding = eventAttri.props_binding || []; - config.properties = eventAttri.properties || []; - for (var y = 0; y < config.props_binding.length; y++) { - if (config.props_binding[y].prop_name === 'class') { - config.classes = config.props_binding[y].value; - } - } - } - config.newPath = Util$1.arrayMerge([], clickOpenEle.newPath); - clickDiv = setOnceBox(ele, 'ARK_SAVE_CLICK', 'ARK_SAVE_CLICK'); - clickDiv.innerHTML = '编辑中'; - var parentEle = ele.parentNode || document.body; - parentEle.appendChild(clickDiv); - - var relateds = config.related || []; - relatedLength = relateds.length; - setElementRelatedsDisable(); - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var eRelated = relateds[i].target; - eRelated.newPath = eRelated.h5_path; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(config.newPath, eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var value = relatedEele ? getElementContent(relatedEele, true) : ''; - relateds[i].properties[0].value = value; - var id = config.id + 'pro' + i; - var proDiv = setOnceBox(relatedEele, id, 'ARK_SAVE_PRO'); - relatedEele.parentNode.appendChild(proDiv); - } - } - } - } - config.url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var clickBoxTemp = setEventTemp(config); - var clickDiv = document.createElement('div'); - clickDiv.className = 'ARK_BOX'; - clickDiv.id = 'ARK_BOX'; - clickDiv.innerHTML = clickBoxTemp; - if (boxOption.left !== null && boxOption.top !== null) { - clickDiv.style.left = boxOption.left; - clickDiv.style.top = boxOption.top; - } - document.body.appendChild(clickDiv); - - initClickBoxActive(clickDiv, config); - sendMsg({ - type: 'pointList', - close: true - }); - } - - function isTextAndIsAllEleClick(e) { - var ele = (e || window.event).target; - var parentEle = ele.parentNode; - var eleChecked = ele.getAttribute('checked'); - if (eleChecked !== 'checked') { - parentEle.className += ' v-radio-checked'; - ele.setAttribute('checked', 'checked'); - } else { - parentEle.className = parentEle.className ? parentEle.className.replace(/ v-radio-checked/g, '') : ''; - ele.removeAttribute('checked'); - } - } - - function inputOnblur(e) { - var ele = e.target || e.srcElement; - var nextEle = ele.nextSibling; - var value = ele.value || ''; - var eleId = ele.id; - - var status = true; - if (eleId === 'ARK_BOX_EVENT_ID') { - // to do - // status = checkPrivate(value, '$track', true) - if (!/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(value)) { - status = false; - } - } else { - if (value && value.length > 50) { - status = false; - } - } - - if (!status) { - ele.className += ' error'; - nextEle.style.display = 'block'; - } - } - - function inputOnfocus(e) { - var ele = e.target || e.srcElement; - var nextEle = ele.nextSibling; - ele.className = ele.className ? ele.className.replace(/ error/g, '') : ''; - nextEle.style.display = 'none'; - } - - function addProItem() { - var proItemTemp = setProItemTemp(); - var proDiv = document.createElement('div'); - proDiv.innerHTML = proItemTemp; - var proItem = proDiv.childNodes[0]; - var proListEls = document.getElementById('ARK_PRO_LIST'); - proListEls.appendChild(proItem); - proListEls.scrollTop = proListEls.scrollHeight; - setRelatedsActive(proItem, {}); - setElementRelatedsDisable(); - } - function getChildEle(ele, className) { - var chileEles = ele.childNodes; - var eleChild = null; - for (var i = 0; i < chileEles.length; i++) { - if (chileEles[i].nodeType === 1) { - if (Util$1.paramType(chileEles[i].className) === 'String' && chileEles[i].className.split(' ').indexOf(className) > -1) { - // eleList.push(chileEles[i]) - eleChild = chileEles[i]; - } - if (!eleChild && chileEles[i].childNodes.length > 0) { - eleChild = getChildEle(chileEles[i], className); - } - } - } - return eleChild; - } - var isAddPro = false; - var proEle = null; - function setRelatedsActive(ele, related) { - var clickEles = ele.getElementsByClassName('v-radio-wrapper'); - var inputKey = getChildEle(ele, 'PROID'); - var inputValue = getChildEle(ele, 'PROVALUE'); - var inputRegex = getChildEle(ele, 'PROREX'); - var inputType = getChildEle(ele, 'PROTYPE'); - var iconXQ = getChildEle(ele, 'ICON_XQ'); - var iconREX = getChildEle(ele, 'ICON_REX'); - var iconNUM = getChildEle(ele, 'ICON_NUM'); - var iconDel = getChildEle(ele, 'ICON_DEL'); - inputValue.setAttribute('data-ark-related', JSON.stringify(related)); - - for (var i = 0; i < clickEles.length; i++) { - var spanRadio = getChildEle(clickEles[i], 'v-radio-ARK'); - var checkedInput = getChildEle(clickEles[i], 'v-radio-input'); - - if (spanRadio.className.indexOf('v-radio-checked') > -1 && i === 0) { - checkedInput.setAttribute('checked', 'checked'); - inputValue.className += ' width246'; - inputRegex.style.display = 'none'; - iconXQ.style.display = 'none'; - iconREX.style.display = 'none'; - iconNUM.style.display = 'none'; - iconXQ.className = iconXQ.className.replace(/ active/g, ''); - iconREX.className = iconREX.className.replace(/ active/g, ''); - iconNUM.className = iconNUM.className.replace(/ active/g, ''); - inputValue.removeAttribute('disabled'); - inputValue.removeAttribute('data-ark-related'); - inputValue.removeAttribute('data-ark-value'); - } else if (spanRadio.className.indexOf('v-radio-checked') > -1 && i === 1) { - checkedInput.setAttribute('checked', 'checked'); - inputValue.setAttribute('disabled', 'disabled'); - iconXQ.style.display = 'block'; - iconREX.style.display = 'block'; - if (inputRegex.value === '') { - iconREX.className = iconREX.className.replace(/ active/g, ''); - } - inputValue.className = inputValue.className.replace(/ width246/g, ''); - if (!related.properties[0].regex || related.properties[0].regex === '') { - inputRegex.style.display = 'none'; - iconNUM.style.display = 'none'; - } - } - } - Util$1.addEvent(inputKey, 'input', setProInputChange); - - Util$1.addEvent(inputRegex, 'input', function () { - var initValue = inputValue.getAttribute('data-ark-value'); - - var rexegValue = inputRegex.value; - try { - var value = initValue || inputValue.value; - if (!value) return; - if (!rexegValue) { - inputValue.value = value; - return; - } - var _regex = new RegExp(rexegValue); - - var regexVal = _regex.exec(value); - if (regexVal && regexVal.length > 0) { - inputValue.value = regexVal[0]; - } else { - inputValue.value = value; - } - } catch (e) { - inputValue.value = value; - } - }); - - function isAddProActive() { - isAddPro = true; - iconXQ.className += ' active'; - proEle = inputValue; - var relateAttr = inputValue.getAttribute('data-ark-related'); - var isElementRelate = false; - if (inputValue.getAttribute('checked') === 'checked') { - isElementRelate = true; - } - if (relateAttr) { - var eRelated = JSON.parse(relateAttr).target; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(Util$1.arrayMerge([], clickOpenEle.newPath), eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var relateEle = getChildEle(relatedEele.parentNode, 'ARK_SAVE_PRO'); - - relateEle && relateEle.parentNode.removeChild(relateEle); - // relateds['ele'] = proDiv - // document.body.appendChild(proDiv) - } - } - isElementRelate = true; - } - return isElementRelate; - } - function notAddProActive() { - isAddPro = false; - var iconXQList = document.getElementsByClassName('ICON_XQ'); - for (var i = 0; i < iconXQList.length; i++) { - iconXQList[i].className = iconXQList[i].className.replace(/ active/g, ''); - } - proEle = null; - } - Util$1.addEvent(iconXQ, 'click', function () { - if (isAddPro === true) { - notAddProActive(); - } else { - isAddProActive(); - } - }); - Util$1.addEvent(iconREX, 'click', function () { - notAddProActive(); - if (iconNUM.style.display !== 'none') { - iconNUM.style.display = 'none'; - inputRegex.style.display = 'none'; - iconREX.className = iconREX.className.replace(/ active/g, ''); - } else { - iconNUM.style.display = 'block'; - inputRegex.style.display = 'block'; - iconREX.className += ' active'; - } - - inputRegex.value = ''; - }); - Util$1.addEvent(iconNUM, 'click', function () { - notAddProActive(); - var initValue = inputValue.getAttribute('data-ark-value'); - - var rexegValue = '[\\d.]+'; - inputRegex.value = rexegValue; - try { - var value = initValue || inputValue.value; - var _regex = new RegExp(rexegValue); - var regexVal = _regex.exec(value); - if (regexVal.length > 0) { - inputValue.value = regexVal[0]; - } - } catch (e) {} - }); - for (var y = 0; y < clickEles.length; y++) { - - Util$1.addEvent(clickEles[y], 'click', function (index) { - return function () { - - var ele = clickEles[index]; - var checkInput = getChildEle(ele, 'v-radio-input'); - var checkSpan = getChildEle(ele, 'v-radio-ARK'); - if (checkSpan.className.indexOf('v-radio-checked') < 0 && checkInput.disabled !== true) { - checkSpan.className += ' v-radio-checked'; - checkInput.setAttribute('checked', 'checked'); - var elementEle = ele.nextSibling; - - if (checkInput.id === 'ARK_PRO_ELEMENT') { - isAddProActive(); - elementEle = ele.previousSibling; - inputValue.setAttribute('placeholder', '--'); - inputValue.setAttribute('disabled', 'disabled'); - inputValue.value = ''; - inputRegex.value = ''; - iconXQ.style.display = 'block'; - iconREX.style.display = 'block'; - iconREX.className = iconREX.className.replace(/ active/g, ''); - inputValue.className = inputValue.className.replace(/ width246/g, ''); - relatedLength++; - } else { - notAddProActive(); - inputValue.setAttribute('placeholder', '请输入属性值'); - inputValue.value = ''; - inputRegex.value = ''; - inputValue.className += ' width246'; - inputRegex.style.display = 'none'; - iconXQ.style.display = 'none'; - iconREX.style.display = 'none'; - iconNUM.style.display = 'none'; - iconXQ.className.replace(/ active/g, ''); - iconREX.className.replace(/ active/g, ''); - iconNUM.className.replace(/ active/g, ''); - inputValue.removeAttribute('disabled'); - var relateAttr = inputValue.getAttribute('data-ark-related'); - if (relateAttr) { - var eRelated = JSON.parse(relateAttr).target; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(Util$1.arrayMerge([], clickOpenEle.newPath), eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var relateEle = getChildEle(relatedEele.parentNode, 'ARK_SAVE_PRO'); - - relateEle && relateEle.parentNode.removeChild(relateEle); - // relateds['ele'] = proDiv - // document.body.appendChild(proDiv) - } - } - } - inputValue.removeAttribute('data-ark-related'); - inputValue.removeAttribute('data-ark-value'); - relatedLength--; - } - var elementInput = getChildEle(elementEle, 'v-radio-input'); - var elementSpan = getChildEle(elementEle, 'v-radio-ARK'); - elementSpan.className = checkSpan.className.replace(/ v-radio-checked/g, ''); - elementInput.removeAttribute('checked'); - setElementRelatedsDisable(); - } - }; - }(y)); - } - - Util$1.addEvent(iconDel, 'click', function () { - var isElementR = isAddProActive(); - if (isElementR === true) { - relatedLength--; - } - isAddPro = false; - ele.parentNode.removeChild(ele); - setElementRelatedsDisable(); - }); - Util$1.addEvent(inputType, 'click', function () { - - var proTypeList = inputType.nextSibling; - proTypeList.className = proTypeList.className.replace(/ TOP/g, ''); - var isType = inputType.getAttribute('data-type'); - if (!ele.nextSibling) { - proTypeList.className += ' TOP'; - } - - proTypeList.style.display = 'block'; - var liEles = proTypeList.childNodes; - for (var i = 0; i < liEles.length; i++) { - var type = liEles[i].getAttribute('data-type'); - liEles[i].className = liEles[i].className.replace(/selected/g, ''); - if (isType === type) { - liEles[i].className += 'selected'; - } - liEles[i].onclick = function (ele) { - return function () { - var type = ele.getAttribute('data-type'); - for (var y = 0; y < liEles.length; y++) { - liEles[y].className = liEles[y].className.replace(/selected/g, ''); - } - inputType.value = ele.innerText; - ele.className += 'selected'; - inputType.setAttribute('data-type', type); - proTypeList.style.display = 'none'; - }; - }(liEles[i]); - } - }); - } - function setElementRelatedsDisable() { - var isDisable = false; - if (relatedLength >= 5) { - isDisable = true; - } - var ulEle = document.getElementById('ARK_PRO_LIST'); - if (!ulEle) { - return; - } - var liEles = ulEle.getElementsByClassName('ARK_PRO_ITEM'); - for (var i = 0; i < liEles.length; i++) { - var inputEles = liEles[i].getElementsByClassName('v-radio-input'); - var valueEle = inputEles[0]; - var elementEle = inputEles[1]; - if (valueEle.getAttribute('checked') === 'checked') { - var pathParentEle = elementEle.parentNode.parentNode; - if (isDisable) { - if (pathParentEle.className.indexOf(' v-radio-wrapper-disabled') < 0) { - pathParentEle.className += ' v-radio-wrapper-disabled'; - elementEle.setAttribute('disabled', 'disabled'); - pathParentEle.setAttribute('data-ark-tip', '关联元素个数达到上限,最多可关联5个元素!'); - pathParentEle.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '45px' })); - } - } else { - pathParentEle.className = pathParentEle.className.replace(/ v-radio-wrapper-disabled/g, ''); - elementEle.removeAttribute('disabled', 'disabled'); - pathParentEle.removeAttribute('data-ark-tip'); - } - } - } - } - var showProInputList = []; - function backProInputList(obj) { - var num = null; - for (var i = 0; i < showProInputList.length; i++) { - if (obj.id === showProInputList[i].id) { - showProInputList[i].callback(obj); - num = 1; - } - } - showProInputList.splice(num, 1); - } - function setProInputChange(e) { - var inputValue = (e || window.event).target; - var value = inputValue.value; - var ulEle = inputValue.nextSibling; - var parentEle = inputValue.parentNode.parentNode; - var proTypeEle = parentEle.getElementsByClassName('PROTYPE')[0]; - // proTypeEle.setAttribute('data-type', 'string') - proTypeEle.removeAttribute('disabled'); - // proTypeEle.value = '字符串' - ulEle.innerHTML = ''; - ulEle.style.display = 'none'; - ulEle.style.maxHeight = '130px'; - if (value === '') { - return; - } - - var callback = function (msg) { - var data = msg.data; - if (data.length > 0) { - for (var i = 0; i < data.length; i++) { - var liEles = document.createElement('li'); - liEles.innerHTML = '' + data[i].code + ''; - ulEle.appendChild(liEles); - liEles.onclick = function (data) { - return function () { - var type = data.dataType; - var name = '字符串'; - - inputValue.value = data.code; - ulEle.style.display = 'none'; - if (type === 'boolean') { - type = 'bool'; - name = '布尔值'; - } else if (type === 'number') { - name = '数值'; - } - proTypeEle.value = name; - proTypeEle.setAttribute('data-type', type); - proTypeEle.setAttribute('disabled', 'disabled'); - }; - }(data[i]); - } - ulEle.style.display = 'block'; - } - }; - var id = +new Date(); - showProInputList.push({ - id: id, - callback: callback - }); - // callback({ data: [{ code: '234' }, { code: '344' }, { code: '1222' }] }) - sendMsg({ - code: 200, - type: 'pro_like', - id: id, - key: inputValue.value - }); - } - function changeBindings(config) { - clearDisposeEles(); - var newEvent = [{ - newPath: config.new_path ? Util$1.arrayMerge([], config.new_path) : null, - bindings: Util$1.arrayMerge([], config.props_binding) - }]; - var eles = parserPageEvents(newEvent); - for (var y = 0; y < eles.length; y++) { - if (clickOpenEle.ele !== eles[y].ele) { - setShowDoms(eles[y].ele); - } - // setVisualEvent(eles[y].ele, eles[y].config, y) - } - } - function initClickBoxActive(ele, config) { - var saveEle = document.getElementById('ARK_BOX_SAVE'); - var cancelEle = document.getElementById('ARK_BOX_CANCEL'); - var isTextEle = document.getElementById('ARK_CONTENT_ISPAGE'); - var isClassEle = document.getElementById('ARK_CLASS_ISPAGE'); - var isPathEle = document.getElementById('ARK_PATH_ISPAGE'); - var isListEle = document.getElementById('ARK_LIST_ISPAGE'); - var isPageEle = document.getElementById('ARK_BOX_ISPAGE'); - var eventIDEle = document.getElementById('ARK_BOX_EVENT_ID'); - var eventIdErrorEle = document.getElementById('ARK_BOX_EVENT_ID_ERROR'); - var eventNameEle = document.getElementById('ARK_BOX_EVENT_NAME'); - var eventNameErrorEle = document.getElementById('ARK_BOX_EVENT_NAME_ERROR'); - var headMove = document.getElementById('ARK_BOX_HEADER'); - var addProEle = document.getElementById('ARK_ADD_PRO'); - - if (config.dispose !== 0) { - eventIDEle.setAttribute('disabled', 'disabled'); - eventIDEle.setAttribute('data-ark-tip', '已部署埋点不可修改事件ID'); - eventIDEle.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '120px', pos: 'bottom' })); - } - if (tooltipObj.newVision !== true) { - var msg = '此功能要求方舟平台版本在5.1及以上'; - addProEle.setAttribute('disabled', 'disabled'); - addProEle.parentNode.setAttribute('data-ark-tip', msg); - addProEle.parentNode.setAttribute('data-ark-tip-pos', JSON.stringify({ left: '70px' })); - document.getElementById('ARK_PRO_LIST').setAttribute('data-ark-tip', msg); - document.getElementById('ARK_PRO_LIST').setAttribute('data-ark-tip-pos', JSON.stringify({ left: '70px' })); - - var list = [isPathEle, isListEle, isClassEle]; - for (var i = 0; i < list.length; i++) { - var pathParentEle = list[i].parentNode.parentNode; - pathParentEle.className += ' v-radio-wrapper-disabled'; - pathParentEle.setAttribute('disabled', 'disabled'); - list[i].setAttribute('disabled', 'disabled'); - } - } - addProEle.onclick = addProItem; - var relatedsEles = document.getElementsByClassName('ARK_PRO_ITEM'); - for (var z = 0; z < relatedsEles.length; z++) { - if (tooltipObj.newVision !== true) { - var hoverBox = getChildEle(relatedsEles[z], 'ARK_FIXED_BOX'); - hoverBox.style.display = 'block'; - } - (function (relatedEle, conf) { - setRelatedsActive(relatedEle, conf); - })(relatedsEles[z], config.related[z]); - } - - if (config.content === '') { - isTextEle.parentNode.parentNode.style.display = 'none'; - } - if (config.classes === '') { - isClassEle.parentNode.parentNode.style.display = 'none'; - } - if (config.newPath && JSON.stringify(config.newPath).indexOf('"row"') < 0) { - isListEle.parentNode.parentNode.style.display = 'none'; - } - var pageUlEle = isPageEle.nextSibling; - - Util$1.addEvent(isPageEle, 'click', function () { - pageUlEle.style.display = 'block'; - pageUlEle.style.left = '80px'; - }); - var isPageType = isPageEle.getAttribute('data-type'); - for (var y = 0; y < pageUlEle.childNodes.length; y++) { - var pageLi = pageUlEle.childNodes[y]; - pageLi.className = (Util$1.paramType(pageLi.className) === 'String' ? pageLi.className : '').replace(/selected/g, ''); - var type = pageLi.getAttribute('data-type'); - if (isPageType === type) { - pageLi.className += 'selected'; - } - Util$1.addEvent(pageLi, 'click', function (ele) { - return function () { - for (var z = 0; z < pageUlEle.childNodes.length; z++) { - var liEle = pageUlEle.childNodes[z]; - liEle.className = (Util$1.paramType(liEle.className) === 'String' ? liEle.className : '').replace(/selected/g, ''); - } - var type = ele.getAttribute('data-type'); - isPageEle.value = ele.innerText; - ele.className += 'selected'; - isPageEle.setAttribute('data-type', type); - pageUlEle.style.display = 'none'; - }; - }(pageLi)); - } - for (var c = 0; c < config.props_binding.length; c++) { - var binding = config.props_binding[c]; - if (binding.prop_name === 'class') { - isClassEle.setAttribute('checked', 'checked'); - } else if (binding.prop_name === 'text') { - isTextEle.setAttribute('checked', 'checked'); - } - } - if (config.new_path) { - isPathEle.setAttribute('checked', 'checked'); - } - if (config.new_path && config.newPath && JSON.stringify(config.new_path).indexOf('"row"') < 0 && JSON.stringify(config.newPath).indexOf('"row"') > -1) { - isListEle.setAttribute('checked', 'checked'); - } - function eventBingsActive(e) { - if (e) { - isTextAndIsAllEleClick(e); - } - var pathParentEle = isPathEle.parentNode.parentNode; - if (isTextEle.getAttribute('checked') !== 'checked' && isClassEle.getAttribute('checked') !== 'checked' && isListEle.getAttribute('checked') !== 'checked' && isPathEle.getAttribute('checked') !== 'checked') { - isTextAndIsAllEleClick({ target: isPathEle }); - config.new_path = config.newPath; - } - var bindings = []; - if (isTextEle.getAttribute('checked') === 'checked') { - bindings.push({ - "prop_name": "text", - "prop_type": "string", - "value": config.content - }); - } - if (isClassEle.getAttribute('checked') === 'checked') { - bindings.push({ - "prop_name": "class", - "prop_type": "string", - "value": config.classes - }); - } - if (isListEle.getAttribute('checked') === 'checked') { - config.new_path = delPathRow(config.newPath); - if (isPathEle.getAttribute('checked') !== 'checked') { - isTextAndIsAllEleClick({ target: isPathEle }); - } - pathParentEle.className += ' v-radio-wrapper-disabled'; - pathParentEle.setAttribute('disabled', 'disabled'); - isPathEle.setAttribute('disabled', 'disabled'); - } else if (tooltipObj.newVision === true) { - pathParentEle.className = pathParentEle.className.replace(/ v-radio-wrapper-disabled/g, ''); - pathParentEle.removeAttribute('disabled'); - isPathEle.removeAttribute('disabled'); - config.new_path = config.newPath; - } - if (isPathEle.getAttribute('checked') !== 'checked') { - config.new_path = null; - } - config.props_binding = bindings; - changeBindings(config); - } - eventBingsActive(); - Util$1.addEvent([isPathEle, isListEle, isClassEle, isTextEle], 'click', eventBingsActive); - eventIDEle.focus(); - if (Util$1.paramType(eventIDEle.createTextRange) !== 'Undefined') { - var rtextRange = eventIDEle.createTextRange(); - rtextRange.moveStart('character', eventIDEle.value.length); - rtextRange.collapse(true); - rtextRange.select(); - } else if (Util$1.paramType(eventIDEle.selectionStart) !== 'Undefined') { - eventIDEle.selectionStart = eventIDEle.value.length; - } - eventNameEle.onblur = eventIDEle.onblur = inputOnblur; - Util$1.addEvent([eventNameEle, eventIDEle], 'focus', inputOnfocus); - // eventNameEle.onfocus = eventIDEle.onfocus = inputOnfocus - saveEle.onclick = function () { - inputOnblur({ - target: eventIDEle - }); - if (eventIdErrorEle.style.display && eventIdErrorEle.style.display !== 'none' || eventNameErrorEle.style.display && eventNameErrorEle.style.display !== 'none') { - return; - } - - var eventName = eventNameEle.value || ''; - var eventID = eventIDEle.value || ''; - - var relatedEles = document.getElementsByClassName('PROVALUE'); - var relatedTypeEles = document.getElementsByClassName('PROTYPE'); - var relatedKeyEles = document.getElementsByClassName('PROID'); - var relatedRegexEles = document.getElementsByClassName('PROREX'); - var relateds = []; - var properties = []; - for (var i = 0; i < relatedEles.length; i++) { - var relatedEle = relatedEles[i]; - var typeEle = relatedTypeEles[i]; - var relatedKeyEle = relatedKeyEles[i]; - var relatedRegexEle = relatedRegexEles[i]; - var related = relatedEle.getAttribute('data-ark-related'); - var relatedType = typeEle.getAttribute('data-type'); - var relatedValue = relatedEle.value; - var relatedKey = relatedKeyEle.value; - var relatedTegex = relatedRegexEle.value; - if (related && relatedKey !== '') { - related = JSON.parse(related); - related['properties'] = [{ - key: relatedKey, - prop_name: 'text', - prop_type: relatedType - }]; - if (relatedTegex !== '') { - related['properties'][0]['regex'] = Util$1.encode(relatedTegex); - } - - delete related['target']['path']; - delete related['target']['newPath']; - relateds.push(related); - } else if (relatedValue !== '' && relatedKey !== '') { - properties.push({ - key: relatedKey, - prop_name: 'text', - prop_type: relatedType, - value: relatedValue - }); - } - } - config.related = relateds; - config.properties = properties; - - // var isAll = isPageEle.getAttribute('checked') === 'checked' ? 0 : 1 - // var isText = isTextEle.getAttribute('checked') === 'checked' ? 1 : 0 - var isAll = isPageEle.getAttribute('data-type') === 'isAll' ? 1 : 0; - var isText = isTextEle.getAttribute('checked') === 'checked' ? 1 : 0; - config = Util$1.objMerge(config, { - appEventId: eventID, - appEventName: eventName, - isAll: isAll, - isText: isText === 1 ? config.content : '' - }); - - var isChange = config.isChange; - delete config.content; - delete config.isChange; - delete config.newPath; - delete config.classes; - delete config.bindings; - var obj = { - type: isChange ? 'change_update' : 'change_request', - payload: { - path: [config] - } - }; - sendMsg(obj); - delClickBox(); - }; - cancelEle.onclick = function () { - delClickBox(); - showVisualEvent(visualEvetnList); - }; - moveBox.init(headMove); - } - function clearDisposeEles() { - var className = 'ARK_SHOW_DISPOSE'; - var hasSetEles = document.getElementsByClassName(className); - // var delEles = [] - while (hasSetEles.length > 0) { - var eventID = hasSetEles[0].getAttribute('data-ark-attr'); - if (eventID) { - hasSetEles[0].className = hasSetEles[0].className.replace(/ ARK_SHOW_DISPOSE/g, ''); - } else { - var parentEls = hasSetEles[0].parentNode || document.body; - parentEls.removeChild(hasSetEles[0]); - } - } - } - var boxOption = { - top: null, - left: null - }; - function delClickBox() { - clearDisposeEles(); - clearShowDoms('ARK_SAVE_PRO'); - clearShowDoms('ARK_PRO_ELE'); - clearShowDoms('debugLog'); - - var clickBoxElement = document.getElementById('ARK_BOX'); - if (clickBoxElement) { - boxOption.left = clickBoxElement.style.left; - boxOption.top = clickBoxElement.style.top; - var boxParent = clickBoxElement.parentNode || document.body; - boxParent.removeChild(clickBoxElement); - } - var isEditEle = document.getElementById('ARK_IS_CLICK'); - if (isEditEle) { - var editParent = isEditEle.parentNode || document.body; - editParent.removeChild(isEditEle); - } - var isBox = document.getElementById('ARK_SAVE_CLICK'); - if (isBox) { - var isBoxParent = isBox.parentNode || document.body; - isBoxParent.removeChild(isBox); - } - } - - function clearShowDoms(className) { - var hasSetEles = document.getElementsByClassName(className); - while (hasSetEles.length > 0) { - var parentEls = hasSetEles[0].parentNode || document.body; - parentEls.removeChild(hasSetEles[0]); - } - - isAddPro = false; - } - function setShowDoms(ele) { - var eventID = ele.getAttribute('data-ark-id'); - var eventEle = document.getElementById(eventID); - if (eventEle) { - eventEle.className += ' ARK_SHOW_DISPOSE'; - } else { - var eleParent = ele.parentNode || document.body; - var diposeDiv = setOnceBox(ele, '', 'ARK_SHOW_DISPOSE'); - eleParent.appendChild(diposeDiv); - } - } - function setVisualEvent(ele, config, isOpen) { - - ele.setAttribute('data-ark-attr', JSON.stringify(config)); - var eventPostion = setBoxPostion(ele); - var width = eventPostion.width; - var height = eventPostion.height; - if (!width || !height) { - return; - } - - if (Util$1.paramType(ele.className) === 'String' && ele.className.indexOf('ARK_') > -1) { - ele.className = ele.className.replace(/ ARK_NO_LIGHT/g, ''); - return; - } - var eventEleId = ele.getAttribute('data-ark-id'); - var disposeDiv = null; - if (eventEleId) { - disposeDiv = document.getElementById(eventEleId); - } - if (!disposeDiv) { - eventEleId = +new Date() + '' + Math.floor(Math.random() * 1000000); - ele.setAttribute('data-ark-id', eventEleId); - var eleParent = ele.parentNode || document.body; - disposeDiv = setOnceBox(ele, '', 'ARK_SAVE_DISPOSE'); - eleParent.appendChild(disposeDiv); - // clearShowDoms('ARK_SAVE_DISPOSE') - // Util.addEvent(disposeDiv, 'click', (function (ele) { - // return function (event) { - // event.stopPropagation() - // setEleMessage(ele) - // openVisualBox(disposeDiv) - // return false - // } - // })(ele)) - } else { - disposeDiv.style.left = eventPostion.x + 'px'; - disposeDiv.style.top = eventPostion.y + 'px'; - disposeDiv.style.width = eventPostion.width + 'px'; - disposeDiv.style.height = eventPostion.height + 'px'; - } - disposeDiv.setAttribute('data-ark-attr', JSON.stringify(config)); - disposeDiv.id = eventEleId; - - if (isOpen) { - setEleMessage(ele); - openVisualBox(); - } - } - - function removeVisualEvent(ele) { - delClickBox(); - ele.removeAttribute('data-ark-attr'); - var eventID = ele.getAttribute('data-ark-id'); - if (eventID) { - ele.removeAttribute('data-ark-id'); - ele.removeAttribute('data-ark-attr'); - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var eventEle = document.getElementById(eventID); - if (eventEle) { - var eventParentEle = eventEle.parentNode || document.body; - eventParentEle.removeChild(eventEle); - } - } - } - var elePath = null; - var patt = /\d{13}/g; - - // function checkChildrenEvent (ele) { - // var eleAttr = ele.getAttribute('data-ark-attr') - - // if (!eleAttr && visualEvetnList.length > 0) { - // showVisualEvent(visualEvetnList) - // } - - // } - function offset(curEle) { - var totalLeft = null, - totalTop = null, - par = curEle; - var eleTable = null; - //首先加自己本身的左偏移和上偏移 - // totalLeft += curEle.offsetLeft; - // totalTop += curEle.offsetTop - //只要没有找到body,我们就把父级参照物的边框和偏移也进行累加 - while (par) { - if (par.tagName === 'TABLE') { - eleTable = par; - } - if (navigator.userAgent.indexOf("MSIE 8.0") === -1) { - //累加父级参照物的边框 - totalLeft += par.clientLeft; - totalTop += par.clientTop; - } - //累加父级参照物本身的偏移 - totalLeft += par.offsetLeft; - totalTop += par.offsetTop; - par = par.offsetParent; - } - - return { - left: totalLeft, - top: totalTop, - eleTable: eleTable - }; - } - var moveX = 0; - var moveY = 0; - var hiddenEle = []; - function mouseMoveEvent(e) { - - var ele = e.target || e.srcElement; - if (ele.id && (ele.id === 'ARK_PRO' || ele.id === 'ARK_SAVE_CLICK') || Util$1.paramType(ele.className) === 'String' && (ele.className.indexOf('ARK_SAVE_DISPOSE') > -1 || ele.className === 'ARK_SAVE_PRO') || ele.className === 'ARK_SHOW_DISPOSE') { - ele.style.display = 'none'; - - hiddenEle.push(ele); - return true; - } - if (isParent(ele, document.getElementById('ARK_SAVE_CLICK'))) { - document.getElementById('ARK_SAVE_CLICK').style.display = 'none'; - hiddenEle.push(document.getElementById('ARK_SAVE_CLICK')); - return true; - } - var tagName = ele.tagName; - - if (isParent(ele, document.getElementById('ARK_BOX')) || isParent(ele, document.getElementById('ARK_DEBUG_BOX')) || ['html', 'body', 'hr', 'br', 'canvas', 'svg', 'use'].indexOf(tagName.toLowerCase()) > -1) { - var clickEle = document.getElementById('ARK_CLICK'); - if (clickEle) { - var parentClickEle = clickEle.parentNode || document.body; - parentClickEle.removeChild(clickEle); - } - return true; - } - var moveEle = isAddPro === true ? proEleObj.ele : clickEleObj.ele; - eleDiv = isAddPro === true ? document.getElementById('ARK_PRO') : document.getElementById('ARK_CLICK'); - if (eleDiv && (Math.abs(e.clientX - moveX) > 2 || Math.abs(e.clientY - moveY) > 2)) { - // if (eleDiv) { - eleDiv.style.display = 'none'; - } - - if (ele !== eleDiv && moveEle !== ele) { - var eleParent = ele.parentNode || document.body; - // var eleParent = document.body - moveEle = ele; - setEleMessage(ele); - if (debugModel !== true) { - if (eleDiv) { - var parentEle = eleDiv.parentNode || document.body; - // var parentEle = document.body - parentEle.removeChild(eleDiv); - } - var eleDivTemp = isAddPro === true ? setOnceBox(moveEle, 'ARK_PRO', 'ARK_PRO_ELE') : setOnceBox(moveEle, 'ARK_CLICK', 'ARK_CLICK_ELE'); - eleParent.appendChild(eleDivTemp); - } - checkPoints(); - } - - clearTimeout(timer); - timer = null; - timer = setTimeout(function () { - if (!eleDiv) return; - eleDiv.style.display = 'block'; - }, 20); - } - function mouseOutEvent(e) { - var ele = (e || window.event).target; - // if (ele.id && (ele.id === 'ARK_IS_CLICK'||)) { - // return - // } - if (ele.id && ele.id === 'ARK_PRO' || Util$1.paramType(ele.className) === 'String' && ele.className.indexOf('ARK_') > -1) { - return; - } - // var proEles = document.getElementsByClassName('ARK_SAVE_PRO') - for (var i = 0; i < hiddenEle.length; i++) { - hiddenEle[i].style.display = 'block'; - } - // var disposeEle = document.getElementsByClassName('ARK_SAVE_DISPOSE') - // for (var y = 0; y < disposeEle.length; y++) { - // disposeEle[y].style.display = 'block' - // } - hiddenEle = []; - } - - Util$1.addEvent(document, 'click', function (event) { - var ele = (event || window.evnet).target; - var ulELes = document.getElementsByClassName('ARK_DROPDOWN'); - for (var i = 0; i < ulELes.length; i++) { - ulELes[i].style.display = 'none'; - } - if (highlightStatus === false || isParent(ele, document.getElementById('ARK_BOX'))) { - return true; - } - if (debugModel === true) { - if (isParent(ele, document.getElementById('ARK_DEBUG_BOX')) === false) { - event.stopPropagation(); - event.preventDefault(); - delDebugBox(); - sendDebugMsg(); - return false; - } - return true; - } - delDebugBox(); - if (isAddPro === true && proEleObj.ele) { - event.stopPropagation(); - event.preventDefault(); - addProEleBox(); - return false; - } - if (isParent(ele, document.getElementById('ARK_BOX')) === false) { - event.stopPropagation(); - event.preventDefault(); - delClickBox(); - openVisualBox(); - return false; - } - // if (isAddPro === true) { - // Util.addEvent(eleDivTemp, 'click', function () { - // event.stopPropagation() - // addProEleBox() - // return false - // }) - // } else if (debugModel === false) { - // Util.addEvent(eleDivTemp, 'click', function (event) { - - // }, true) - // } - }, true); - - function setBoxPostion(ele) { - var eleOffsetParent = ele.offsetParent || document.body; - var mouseElePosition = offset(ele); - var parentPostion = offset(eleOffsetParent); - var y = mouseElePosition.top - parentPostion.top; - var x = mouseElePosition.left - parentPostion.left; - if (mouseElePosition.eleTable !== null) { - parentPostion = offset(mouseElePosition.eleTable.offsetParent); - x = mouseElePosition.left - parentPostion.left; - y = mouseElePosition.top - parentPostion.top; - } - var width = ele.offsetWidth; - var height = ele.offsetHeight; - return { - x: x - 1.5, - y: y - 1.5, - width: width, - height: height - }; - } - function setOnceBox(ele, id, className) { - var boxDiv = document.createElement('div'); - boxDiv.id = id; - boxDiv.className = className; - var eventPostion = setBoxPostion(ele); - boxDiv.style.top = eventPostion.y + 'px'; - boxDiv.style.left = eventPostion.x + 'px'; - boxDiv.style.width = eventPostion.width + 'px'; - boxDiv.style.height = eventPostion.height + 'px'; - return boxDiv; - } - - var eleDiv = null; - var timer = null; - var clickEleObj = {}; - var proEleObj = {}; - function setEleMessage(ele) { - var pathObj = domParentList(ele); - var path = pathObj.path; - var index = setIndex(ele, pathObj.path); - if (isAddPro === true) { - proEleObj = { - index: index, - elePath: elePath, - path: path, - newPath: pathObj.newPath, - ele: ele - }; - } else { - clickEleObj = { - index: index, - elePath: elePath, - path: path, - newPath: pathObj.newPath, - ele: ele - }; - } - } - - function addVisualListener() { - delClickBox(); - Util$1.addEvent(document, 'mousemove', mouseMoveEvent, true); - Util$1.addEvent(document, 'mouseout', mouseOutEvent, true); - // Util.addEvent(document, 'mouseover', showEleHover, true) - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].className = hoverEles[i].className.replace(' ARK_NO_LIGHT', ''); - } - } - function delEvents() { - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - while (hoverEles.length > 0) { - var hoverParentEle = hoverEles[0].parentNode || document.body; - hoverParentEle.removeChild(hoverEles[0]); - } - var eventDivs = Util$1.selectorAllEleList('[data-ark-id]'); - for (var i = 0; i < eventDivs.length; i++) { - eventDivs[i].removeAttribute('data-ark-id'); - eventDivs[i].removeAttribute('data-ark-attr'); - } - } - function removeVisualListener() { - delClickBox(); - // Util.removeEvent(document, 'mouseover', showEleHover, true) - Util$1.removeEvent(document, 'mousemove', mouseMoveEvent, true); - var hoverEle = document.getElementById('ARK_CLICK'); - if (hoverEle) { - var parentEle = hoverEle.parentNode || document.body; - parentEle.removeChild(hoverEle); - } - var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE'); - for (var i = 0; i < hoverEles.length; i++) { - hoverEles[i].className += ' ARK_NO_LIGHT'; - } - } - var visualEvetnList = []; - function checkPoints() { - var ele = clickEleObj.ele; - var pageEvents = visualEvetnList; - var childrenList = ele.childNodes || []; - for (var i = 0; i < childrenList.length; i++) { - for (var y = 0; y < pageEvents.length; y++) { - var eventEleObj = pageEvents[y]; - if (checkNewPathBase(clickEleObj.newPath, eventEleObj.newPath) == true && pathContrast(clickEleObj, eventEleObj, true) === true) { - setVisualEvent(ele, eventEleObj); - } - } - } - } - function showVisualEvent(list) { - delEvents(); - var localList = []; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var newEvent = []; - for (var i = 0; i < list.length; i++) { - list[i]['inPage'] = false; - if (url === list[i].url || list[i].isAll === 1) { - - var eleShowPath = list[i].link; - var newPath = list[i].new_path; - var bindings = list[i].props_binding; - // var related = list[i].related - if (!newPath && !bindings) { - var index = list[i].index; - if (patt.test(eleShowPath) === true) { - eleShowPath = eleShowPath.replace(patt, ''); - } - var ele = parseEvent(eleShowPath)[index]; - if (ele) { - setVisualEvent(ele, list[i]); - list[i]['inPage'] = true; - } - } else { - list[i].newPath = newPath; - newEvent.push(list[i]); - } - localList.push(list[i]); - } - } - if (newEvent.length > 0) { - var eles = parserPageEvents(newEvent); - for (var y = 0; y < eles.length; y++) { - setVisualEvent(eles[y].ele, eles[y].config); - } - for (var t = 0; t < list.length; t++) { - for (var z = 0; z < newEvent.length; z++) { - if (list[t].appEventId === newEvent[z].newEvent && list[t].inPage === false) { - if (list[i].isAll === 1) { - list[t].inPage = newEvent[z].inPage; - } - } - } - } - } - visualEvetnList = localList; - - return list; - } - - function delVisualEvent(obj) { - var newPath = obj.new_path; - var bindings = obj.props_binding; - var ele = null; - var eles = []; - if (!newPath && !bindings) { - var eleShowPath = obj.link; - var index = obj.index; - ele = parseEvent(eleShowPath)[index]; - } else { - eles = parserPageEvents([obj]); - } - if (ele) { - removeVisualEvent(ele); - } - for (var i = 0; i < eles.length; i++) { - removeVisualEvent(eles[i].ele); - } - } - var highlightStatus = true; - function hiddenVisualEvent(status) { - delClickBox(); - // var eleList = Util.selectorAllEleList('[data-ark-attr]') // document.querySelectorAll('[data-ark-attr]') - if (!status) { - highlightStatus = false; - removeVisualListener(); - // var hoverEles = document.getElementsByClassName('ARK_SAVE_DISPOSE') - // for (var i = 0; i < hoverEles.length; i++) { - // hoverEles[i].className += ' ARK_NO_LIGHT' - // } - } else { - highlightStatus = true; - addVisualListener(); - } - // for (var i = 0; i < eleList.length; i++) { - // var ele = eleList[i] - // if (status) { - // var eleAttr = ele.getAttribute('data-ark-attr') - // setVisualEvent(ele, JSON.parse(eleAttr)) - // } - // } - } - - function openVisualEvent(obj) { - var newPath = obj.new_path; - var bindings = obj.props_binding; - var ele = null; - obj.isPage = true; - if (!newPath && !bindings) { - var eleShowPath = obj.link; - var index = obj.index; - ele = parseEvent(eleShowPath)[index]; - } else { - var eles = parserPageEvents([obj]); - if (eles.length > 0) { - ele = eles[0].ele; - } - } - if (ele) { - setVisualEvent(ele, obj, true); - } - } - var debugModel = false; - function openDebugModule(status) { - debugModel = status; - } - - /** - * 清除当前展示的debug框 - */ - function delDebugBox() { - var ele = document.getElementById('ARK_DEBUG_BOX'); - if (ele) { - var parent = ele.parentNode; - parent.removeChild(ele); - } - } - function openDebugEvent(obj) { - var ele = clickEleObj.ele; - var attrConfig = ele.getAttribute('data-ark-attr'); - attrConfig = JSON.parse(attrConfig); - var relateds = attrConfig.related || []; - var properties = attrConfig.properties || []; - var elePosition = boxPosition(ele, 'debug'); - var config = { - top: elePosition.top, - left: elePosition.left, - list: obj.event_info || [], - newPath: domParentList(ele).newPath - }; - if (relateds.length > 0) { - for (var i = 0; i < relateds.length; i++) { - var eRelated = Util$1.toDeep(relateds[i].target); - eRelated['path'] = eRelated.h5_path; - if (eRelated.h5_path) { - var relatedPath = backH5PathProPath(config.newPath, eRelated); - var relatedEele = parseNewPath(relatedPath, eRelated.step, clickEleObj.ele); - if (relatedEele) { - var value = relatedEele ? getElementContent(relatedEele, true) : ''; - if (value !== '') { - var rxegx = relateds[i].properties[0].regex; - if (rxegx) { - try { - rxegx = Util$1.decode(rxegx); - // rexegValue = rexegValue.replace('\\', '\\\\') - var _regex = new RegExp(rxegx); - var regexVal = _regex.exec(value); //value.match(rexegValue)// - if (regexVal && regexVal.length > 0) { - value = regexVal[0]; - } - } catch (e) {} - } - config.list.push({ - title: relateds[i].properties[0].key, - val: value - }); - } - } - } - } - } - for (var y = 0; y < properties.length; y++) { - config.list.push({ - title: properties[y].key, - val: properties[y].value - }); - } - - var debugTemp = setDebugTemp(config); - - var debugDiv = document.createElement('div'); - debugDiv.innerHTML = debugTemp; - document.body.appendChild(debugDiv.childNodes[0]); - - var cancelEle = document.getElementById('ARK_DEBUG_CHA'); - Util$1.addEvent(cancelEle, 'click', delDebugBox); - } - - function sendDebugMsg() { - - var eventConfig = clickEleObj.ele.getAttribute('data-ark-attr'); - if (!eventConfig) return; - var eventId = JSON.parse(eventConfig).appEventId; - var hash = window.location.hash; - if (hash.indexOf('?') > -1) { - hash = hash.split('?')[0]; - } - var url = window.location.protocol + '//' + window.location.host + window.location.pathname + hash; - var config = { - event_info: { - $event_id: eventId, - $lib_version: $lib_version, - $screen_width: window.screen.width, - $screen_height: window.screen.height - }, - type: 'debug', - target_page: url - }; - sendMsg(config); - } - - // 设置文字提示 - function delTipEle() { - var ele = document.getElementById('ARKTOOLTIP'); - if (ele) { - var parentEle = ele.parentNode || document.body; - parentEle.removeChild(ele); - tooltipObj.ele = null; - } - } - var tooltipObj = {}; - var hiddenTipTimer = null; - - Util$1.addEvent(document, 'mouseover', function (e) { - clearTimeout(hiddenTipTimer); - var ele = (e || window.event).target; - - var attr = ele.getAttribute('data-ark-tip'); - var attrPostion = ele.getAttribute('data-ark-tip-pos') || {}; - if (Util$1.paramType(attrPostion) === 'String') { - attrPostion = attrPostion.replace(/'/g, '"'); - attrPostion = JSON.parse(attrPostion); - } - if (attr) { - tooltipObj.ele = ele; - - delTipEle(); - try { - attr = JSON.parse(attr); - } catch (e) {} - var msg = ''; - var classPostion = 'ARKTOP'; - if (Util$1.paramType(attr) === 'String') { - msg = attr; - } - if (Util$1.paramType(attr) === 'Object' || Util$1.paramType(attrPostion) === 'Object') { - msg = attr.msg || msg; - if (attr['pos'] === 'right' || attrPostion['pos'] === 'right') { - classPostion = 'ARKRIGHT'; - } - if (attr['pos'] === 'bottom' || attrPostion['pos'] === 'bottom') { - classPostion = 'ARKBOTTOM'; - } - } - delTipEle(); - var tipDiv = setOnceBox(ele, 'ARKTOOLTIP', 'ARKTOOLTIP'); - if (classPostion === 'ARKBOTTOM') { - tipDiv.style.bottom = '-44px'; - tipDiv.style.top = 'unset'; - } else { - tipDiv.style.top = ele.offsetTop - 44 + 'px'; - } - - if (attrPostion['left']) { - tipDiv.style.left = attrPostion['left']; - } - if (attrPostion['top']) { - tipDiv.style.top = attrPostion['top']; - } - tipDiv.style.width = 'auto'; - tipDiv.style.height = 'auto'; - tipDiv.innerHTML = '
    ' + msg + ''; - ele.parentNode.appendChild(tipDiv); - } else { - hiddenTipTimer = setTimeout(function () { - if (isParent(ele, tooltipObj.ele) === false && isParent(ele, document.getElementById('ARKTOOLTIP')) === false) { - delTipEle(); - } - }, 200); - } - }); - - function setVisualStatus(status) { - tooltipObj['newVision'] = status; - } - - var isVisaulInit = true; - var visualStatus = false; - var highlightStatus$1 = true; - - /** - * 监听服务端iframeMessage消息 - * - * @param {JSON} msg 消息 - */ - function processMsg(msg) { - if (!isVisaulInit) { - return; - } - var eventList = []; - var type = msg.type; - // var url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.hash - switch (type) { - case 'INIT': - // 初始化验证 - if (msg.appid !== visualConfig.appkey) { - sendMsg({ - code: 400, - type: 'INIT', - msg: 'appkey不相同' - }); - isVisaulInit = false; - return; - } - sendMsg({ - code: 200, - type: 'INIT', - isNewVisual: true - }); - var obj = { - type: 'checkUrl', - code: 200, - url: window.location.href, - skip: true - }; - sendMsg(obj); - setVisualStatus(msg.isNewVisual || false); - sendChangeUrl(); - break; - case 'point_list': - // 所有已埋点元素绑定debug模式 - - eventList = msg.data || []; - if (highlightStatus$1 === false) { - return; - } - if (!isElmentReady() || document.readyState !== 'complete') { - setTimeout(function () { - processMsg(msg); - }, 1000); - return; - } else { - var pageList = showVisualEvent(eventList); - sendMsg({ - type: 'check_points', - list: pageList - }); - } - break; - // case 'EVENT_URL': - // // 验证埋点元素是否为当前页元素 - - // var eventUrlObj = { - // type: 'checkUrl', - // code: 200, - // url: url, - // skip: msg.url === url - // } - // sendMsg(eventUrlObj) - // break - case 'VISUAL': - if (highlightStatus$1 === false) { - visualStatus = msg.visual || false; - return; - } - if (msg.visual === true) { - // 开始初始化可视化埋点 - openDebugModule(false); - } else if (msg.debugmode === true) { - // 开始初始化debug模式 - openDebugModule(true); - } - if (highlightStatus$1 === true) { - addVisualListener(); - } - break; - case 'change_update': - if (highlightStatus$1 === false) { - return; - } - if (msg.path && msg.path.length > 0) { - // if (msg.path[0].url.charAt(msg.path[0].url.length - 1) === '/' && url.charAt(url.length - 1) !== '/') { - // url += '/' - // } - // if (url !== msg.path[0].url) { - // sendMsg({ - // type: 'change_page', - // code: 200, - // msg: '跳转埋点页面', - // path: msg.path, - // url: url - // }) - // } else { - openVisualEvent(msg.path[0]); - // } - } - break; - case 'change_delete': - if (visualStatus === false) { - openDebugModule(false); - } - - if (msg.path && msg.path.length > 0) { - delVisualEvent(msg.path[0]); - sendMsg({ - code: 200, - type: 'change_delete' - }); - } else { - sendMsg({ - code: 400, - type: 'change_delete', - msg: '删除失败' - }); - } - break; - case 'add_success': - sendMsg({ - code: 200, - type: 'add_success', - msg: '添加成功' - }); - break; - case 'success_update': - if (msg.path && msg.path.length > 0) { - showVisualEvent(msg.path); - } - break; - case 'debug': - // openDebugBox(msg) - openDebugEvent(msg); - break; - case 'highlight': - highlightStatus$1 = msg.highlight; - // if (highlightStatus === true) { - // showVisualEvent(eventList) - // } - // if (visualStatus) { - hiddenVisualEvent(highlightStatus$1); - - // } else { - // hiddenVisualEvent(highlightStatus) - - // } - break; - case 'like_pro': - backProInputList(msg); - break; - } - } - /** - * [initHeatmap description]初始化可视化并建立通讯 - * @return {[type]} [description] - */ - function initVisual() { - Util$1.changeHash(function () { - highlightStatus$1 = true; - visualStatus = true; - delEvents(); - hiddenVisualEvent(true); - sendChangeUrl(); - }); - } - // } - function sendChangeUrl() { - // var url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.hash - sendMsg({ - type: 'change_page_now', - code: 200, - msg: '跳转埋点页面', - url: window.location.href.replace('?visual=true&', '?').replace('?visual=true', '') - }); - } - - initVisual(); - - getMsg(msg => { - processMsg(msg); - }); - - // window.AnalysysModule = Util.objMerge(window.AnalysysModule || {}, { - // visual: { - // init: initVisual, - // msg: processMsg, - // version: '4.5.1' - // } - // }) - -}()); diff --git a/demo/jquery/sdk/AnalysysAgent_MPAAS.amd.min.js b/demo/jquery/sdk/AnalysysAgent_MPAAS.amd.min.js deleted file mode 100644 index 27312c4..0000000 --- a/demo/jquery/sdk/AnalysysAgent_MPAAS.amd.min.js +++ /dev/null @@ -1 +0,0 @@ -define(function(){"use strict";var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(){}e.prototype.paramType=function(e){return Object.prototype.toString.call(e).replace("[object ","").replace("]","")},e.prototype.objHasKay=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e.prototype.ArrayToObj=function(e){for(var t={},n=0;n>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);l>2,o=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),p=p+c.charAt(i)+c.charAt(o)+c.charAt(a)+c.charAt(s);return p},e.prototype.decode=function(e){var t,n,r,i,o,a,s="",p=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");p>4,n=(15&i)<<4|(o=c.indexOf(e.charAt(p++)))>>2,r=(3&o)<<6|(a=c.indexOf(e.charAt(p++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function l(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=l(e,l(l((s=t)&n|~s&r,i),a)),l(p(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=l(e,l(l(t&(s=r)|n&~s,i),a)),l(p(e,o),t)}function i(e,t,n,r,i,o,a){return e=l(e,l(l(t^n^r,i),a)),l(p(e,o),t)}function o(e,t,n,r,i,o,a){return e=l(e,l(l(n^(t|~r),i),a)),l(p(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,u,d,f=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),y=1732584193,h=4023233417,g=2562383102,m=271733878,v=0;v>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}(e);l>2,o=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,s=63&r,isNaN(n)?a=s=64:isNaN(r)&&(s=64),p=p+c.charAt(i)+c.charAt(o)+c.charAt(a)+c.charAt(s);return p},e.prototype.decode=function(e){var t,n,r,i,o,a,s="",p=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");p>4,n=(15&i)<<4|(o=c.indexOf(e.charAt(p++)))>>2,r=(3&o)<<6|(a=c.indexOf(e.charAt(p++))),s+=String.fromCharCode(t),64!==o&&(s+=String.fromCharCode(n)),64!==a&&(s+=String.fromCharCode(r));return s=function(e){for(var t="",n=0,r=0,i=0,o=0;n>>32-t}function l(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,a=(1073741823&e)+(1073741823&t);return i&o?2147483648^a^n^r:i|o?1073741824&a?3221225472^a^n^r:1073741824^a^n^r:a^n^r}function n(e,t,n,r,i,o,a){var s;return e=l(e,l(l((s=t)&n|~s&r,i),a)),l(p(e,o),t)}function r(e,t,n,r,i,o,a){var s;return e=l(e,l(l(t&(s=r)|n&~s,i),a)),l(p(e,o),t)}function i(e,t,n,r,i,o,a){return e=l(e,l(l(t^n^r,i),a)),l(p(e,o),t)}function o(e,t,n,r,i,o,a){return e=l(e,l(l(n^(t|~r),i),a)),l(p(e,o),t)}function a(e){for(var t="",n="",r=0;r<=3;r++)t+=(n="0"+(e>>>8*r&255).toString(16)).substr(n.length-2,2);return t}for(var s,c,u,d,f=function(e){for(var t,n=e.length,r=n+8,i=16*(1+(r-r%64)/64),o=Array(i-1),a=0,s=0;s>>29,o}(e),y=1732584193,h=4023233417,g=2562383102,m=271733878,v=0;v>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}(e);l>2,a=(3&t)<<4|(r=e.charCodeAt(l++))>>4,i=(15&r)<<2|(n=e.charCodeAt(l++))>>6,p=63&n,isNaN(r)?i=p=64:isNaN(n)&&(p=64),s=s+c.charAt(o)+c.charAt(a)+c.charAt(i)+c.charAt(p);return s},t.prototype.decode=function(e){var t,r,n,o,a,i,p="",s=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");s>4,r=(15&o)<<4|(a=c.indexOf(e.charAt(s++)))>>2,n=(3&a)<<6|(i=c.indexOf(e.charAt(s++))),p+=String.fromCharCode(t),64!==a&&(p+=String.fromCharCode(r)),64!==i&&(p+=String.fromCharCode(n));return p=function(e){for(var t="",r=0,n=0,o=0,a=0;r>>32-t}function l(e,t){var r=2147483648&e,n=2147483648&t,o=1073741824&e,a=1073741824&t,i=(1073741823&e)+(1073741823&t);return o&a?2147483648^i^r^n:o|a?1073741824&i?3221225472^i^r^n:1073741824^i^r^n:i^r^n}function r(e,t,r,n,o,a,i){var p;return e=l(e,l(l((p=t)&r|~p&n,o),i)),l(s(e,a),t)}function n(e,t,r,n,o,a,i){var p;return e=l(e,l(l(t&(p=n)|r&~p,o),i)),l(s(e,a),t)}function o(e,t,r,n,o,a,i){return e=l(e,l(l(t^r^n,o),i)),l(s(e,a),t)}function a(e,t,r,n,o,a,i){return e=l(e,l(l(r^(t|~n),o),i)),l(s(e,a),t)}function i(e){for(var t="",r="",n=0;n<=3;n++)t+=(r="0"+(e>>>8*n&255).toString(16)).substr(r.length-2,2);return t}for(var p,c,u,h,d=function(e){for(var t,r=e.length,n=r+8,o=16*(1+(n-n%64)/64),a=Array(o-1),i=0,p=0;p>>29,a}(e),f=1732584193,y=4023233417,g=2562383102,v=271733878,m=0;m>6|192):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128)),t+=String.fromCharCode(63&n|128))}return t}(e);c>2,a=(3&t)<<4|(r=e.charCodeAt(c++))>>4,i=(15&r)<<2|(n=e.charCodeAt(c++))>>6,p=63&n,isNaN(r)?i=p=64:isNaN(n)&&(p=64),s=s+l.charAt(o)+l.charAt(a)+l.charAt(i)+l.charAt(p);return s},t.prototype.decode=function(e){var t,r,n,o,a,i,p="",s=0;for(e=e.replace(/[^A-Za-z0-9+/=]/g,"");s>4,r=(15&o)<<4|(a=l.indexOf(e.charAt(s++)))>>2,n=(3&a)<<6|(i=l.indexOf(e.charAt(s++))),p+=String.fromCharCode(t),64!==a&&(p+=String.fromCharCode(r)),64!==i&&(p+=String.fromCharCode(n));return p=function(e){for(var t="",r=0,n=0,o=0,a=0;r>>32-t}function c(e,t){var r=2147483648&e,n=2147483648&t,o=1073741824&e,a=1073741824&t,i=(1073741823&e)+(1073741823&t);return o&a?2147483648^i^r^n:o|a?1073741824&i?3221225472^i^r^n:1073741824^i^r^n:i^r^n}function r(e,t,r,n,o,a,i){var p;return e=c(e,c(c((p=t)&r|~p&n,o),i)),c(s(e,a),t)}function n(e,t,r,n,o,a,i){var p;return e=c(e,c(c(t&(p=n)|r&~p,o),i)),c(s(e,a),t)}function o(e,t,r,n,o,a,i){return e=c(e,c(c(t^r^n,o),i)),c(s(e,a),t)}function a(e,t,r,n,o,a,i){return e=c(e,c(c(r^(t|~n),o),i)),c(s(e,a),t)}function i(e){for(var t="",r="",n=0;n<=3;n++)t+=(r="0"+(e>>>8*n&255).toString(16)).substr(r.length-2,2);return t}for(var p,l,u,h,d=function(e){for(var t,r=e.length,n=r+8,o=16*(1+(n-n%64)/64),a=Array(o-1),i=0,p=0;p>>29,a}(e),f=1732584193,y=4023233417,g=2562383102,v=271733878,m=0;m=n}function A(e,t){var n=!0;return S(e,99)?s.indexOf(e)>-1?(n=!1,t&&(t.code=600012)):n=/^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(e):n=!1,t&&t.fn&&!n&&w(t),n}function x(e,t){var n=!1;if(o(e)||r(e)||i(e)||a(e))if(n=!0,o(e))S(e,255)||(n=!1);else if(i(e)){n=e.some((function(e){return S(e,255)}))}return t&&t.fn&&t.key&&!n&&w(t),n}function T(e,t){var n={};if(!u(e))return w({code:600016,fn:t,value:e}),{};for(var r in e){var o=c(e[r])?e[r]():e[r];A(r,{code:600023,fn:t,key:r})&&x(o,{code:600022,fn:t,key:r,value:o})&&(n[r]=o)}return n}function $(e,t){if(e){var n=window.location;if(o(e)){var r=n.href,a=n.protocol+"//"+n.host,u=a+n.pathname;if([r,a,u+"index.html",u,u+n.hash].indexOf(e)>-1)return!0}else{if(c(e))return e(t);if(i(e))for(var l=0;l-1){n=a;break}i=i.parentNode}if(r.indexOf(n)>-1||o()||E(t,e)){if("svg"===n&&e.children&&e.children.length>0){for(var u=!1,c=e.children,l=0;l>2,i=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,u=63&r,isNaN(n)?a=u=64:isNaN(r)&&(u=64),c=c+R.charAt(o)+R.charAt(i)+R.charAt(a)+R.charAt(u);return c},D=function(e){var t,n,r,o,i,a,u="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,n=(15&o)<<4|(i=R.indexOf(e.charAt(c++)))>>2,r=(3&i)<<6|(a=R.indexOf(e.charAt(c++))),u+=String.fromCharCode(t),64!=i&&(u+=String.fromCharCode(n)),64!=a&&(u+=String.fromCharCode(r));return u=P(u)},C=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t},P=function(e){for(var t="",n=0,r=0,o=0,i=0;n191&&r<224?(o=e.charCodeAt(n+1),t+=String.fromCharCode((31&r)<<6|63&o),n+=2):(o=e.charCodeAt(n+1),i=e.charCodeAt(n+2),t+=String.fromCharCode((15&r)<<12|(63&o)<<6|63&i),n+=3);return t},L=window.document;function O(e,t,n){if(n=n||{},void 0!==t){if(null===t&&(t="",n.expires=-1),"number"==typeof n.expires){var r=n.expires,o=n.expires=new Date;o.setTime(o.getTime()+864e5*r)}var i=function(e){try{return n.raw?e:encodeURIComponent(e)}catch(e){}return e};return L.cookie=[i(e),"=",i(t),n.expires?"; expires="+n.expires.toUTCString():"",n.path?"; path="+n.path:"",n.domain?"; domain="+n.domain:"",n.secure?"; secure":""].join("")}for(var a=null,u=L.cookie,c=u?u.split("; "):[],l=-1,f=c.length,s=e.length+1;++l2&&(t=n[2]);if(!0===/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(t)||"localhost"===t)return"";var r=t.split("."),o=!0===e?2:r.length;o<2&&(o=2);var i=[];if(!(r.length>1))return"";r.length=0&&i.length!==o;a--)i.push(r[a]);return i.reverse().join(".")}(!0),V=Y?"FZ_STROAGE."+Y:"";function j(){var e=z();if(_t.crossSubdomain){var t=l({},e);delete t.ARKSUPER,V&&K(V,t,{expires:7300,domain:Y})}I("FZ_STROAGE",e)}function J(e,t){function n(e,t){return e<>>32-t}function r(e,t){var n,r,o,i,a;return o=2147483648&e,i=2147483648&t,a=(1073741823&e)+(1073741823&t),(n=1073741824&e)&(r=1073741824&t)?2147483648^a^o^i:n|r?1073741824&a?3221225472^a^o^i:1073741824^a^o^i:a^o^i}function o(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&t|~e&n}(t,o,i),a),c)),r(n(e,u),t)}function i(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&n|t&~n}(t,o,i),a),c)),r(n(e,u),t)}function a(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e^t^n}(t,o,i),a),c)),r(n(e,u),t)}function u(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return t^(e|~n)}(t,o,i),a),c)),r(n(e,u),t)}function c(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0"+(e>>>8*t&255).toString(16)).substr(r.length-2,2);return n}var l,f,s,d,p,h,v,g,m,y;for(l=function(e){for(var t,n=e.length,r=n+8,o=16*((r-r%64)/64+1),i=Array(o-1),a=0,u=0;u>>29,i}(e),v=1732584193,g=4023233417,m=2562383102,y=271733878,f=0;f=0;n--){var r=M.POSTDATA[n];t[r.xwhen]&&M.POSTDATA.splice(n,1)}j()}function oe(e){return null==e?"":u(e)?JSON.stringify(e):e+""}function ie(e,t,n){var r=new window.XMLHttpRequest||new window.ActiveXObject("Microsoft.XMLHTTP")||new window.ActiveXObject("Msxml2.XMLHTTP"),i=(e.method||"GET").toUpperCase(),a=e.url,c=e.data,l=Z({},e.header);"GET"===i&&e.data&&(a+=(/\?/.test(e.url)?"&":"?")+function(e){var t=[];for(var n in e){var r=e[n];o(r)?r=encodeURIComponent(e[n]):u(r)&&(r=encodeURIComponent(JSON.stringify(e[n]))),t.push(n+"="+r)}return t.join("&")}(e.data));for(var f in"POST"===i&&e.data&&!l["Content-Type"]&&(c=JSON.stringify(e.data)),r.open(i,a),l)r.setRequestHeader(f,l[f]);r.timeout=e.timeout,r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var o={header:(i=r.getAllResponseHeaders(),a=i.trim().split(/[\r\n]+/),u={},a.forEach((function(e){var t=e.split(": "),n=t.shift(),r=t.join(": ");u[n]=r})),u),data:r.responseText};try{o.data=JSON.parse(r.responseText)}catch(e){}t&&t(o,r),e.success&&e.success(o,r)}else n&&n(r),e.error&&e.error(r);var i,a,u},r.send(c)}var ae=0,ue=!1,ce=0;function le(){return+new Date+ce}var fe=!1,se=[];function de(){ue&&wt&&se.length&&(se.forEach((function(e){e.fn.apply(e.fn,e.arg)})),se=[],fe=!0)}function pe(e,t){return function(){for(var n=[],r=0;r-1?t=e.value||"":"img"===e.tagName.toLowerCase()?t=e.getAttribute("alt")||e.getAttribute("title")||"":"a"===e.tagName.toLowerCase()&&(t=e.getAttribute("title")||""),!t)for(var n=e.childNodes,r=0;r0){for(var f="",s=0;s-1&&t.indexOf("PC")<0||t.indexOf("Pad")>-1||t.indexOf("Nexus 7")>-1?"tablet":t.indexOf("Mobi")>-1||t.indexOf("iPh")>-1||t.indexOf("480")>-1?"phone":"desktop"}function Ye(e,t){var n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src=e,n.onload=t;var r=document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0];r&&r.appendChild(n)}var Ve={xwho:function(){return M.ARK_LOGINID||M.ARK_TRACKID||M.ARK_ID},xwhen:function(){return le()},xwhat:function(e){return e},$lib:function(){return"JS"},$lib_version:function(){return"5.0.0"},$platform:function(){return"JS"},$debug:function(){return _t.debugMode},$is_login:function(){return!!M.ARK_LOGINID},$session_id:function(){return e=new Date,t=e.getTime(),n=e.getTimezoneOffset(),r=new Date(t+60*n*1e3+288e5).getDate(),o=M.SEESIONDATE?new Date(M.SEESIONDATE+60*n*1e3+288e5).getDate():0,(!M.SEESIONID||!M.SEESIONDATE||t-M.SEESIONDATE>18e5||o!==r)&&Q(),M.SEESIONID;var e,t,n,r,o},$screen_width:function(){return window.screen.width||0},$screen_height:function(){return window.screen.height||0},$language:function(){return(e.navigator.language||e.navigator.browserLanguage).toLowerCase()},$user_agent:function(){return e.navigator.userAgent.replace(/"/g,'\\"')},$time_zone:function(){return"GMT"+(e=(new Date).getTimezoneOffset(),n=e%60,r="-",((t=e/60)<=0||n<0)&&(r="+",t=-t,n<0&&(n=-n)),1==(t+="").length&&(t="0"+t),1==(n+="").length&&(n="0"+n),r+t+":"+n);var e,t,n,r},$startup_time:function(){return F.STARTUPTIME},$is_first_time:function(){return!M.FRISTDAY},$is_first_day:function(){return!M.FRISTDAY||(o(M.FRISTDAY)?B(new Date(le()),"yyyyMMdd")===M.FRISTDAY:!!r(M.FRISTDAY)&&B(new Date(le()),"yyyyMMdd")===B(new Date(M.FRISTDAY),"yyyyMMdd"))},$first_visit_time:function(){return M.ARKFRISTPROFILE},$first_visit_language:function(){return""},$original_id:function(){return M.ARK_TRACKID||M.ARK_ID},$is_time_calibrated:function(){return!(!_t.allowTimeCheck||!ce)},$referrer:function(){return Ae.pageview.prevPath},$title:function(){return document.title},$url:function(){return Ae.pageview.path},$url_path:function(){return""},$url_domain:function(){return""},$utm_campaign_id:function(){return Re},$utm_source:function(){return ke},$utm_medium:function(){return De},$utm_term:function(){return Ce},$utm_content:function(){return Pe},$utm_campaign:function(){return Le},$element_content:function(){return oe(Ie.element_content)},$element_id:function(){return oe(Ie.element_id)},$element_type:function(){return oe(Ie.element_type)},$element_name:function(){return oe(Ie.element_name)},$element_class_name:function(){return oe(Ie.element_class_name)},$element_target_url:function(){return oe(Ie.element_target_url)},$element_path:function(){return oe(Ie.element_path)},$page_width:function(){return document.documentElement.scrollWidth},$page_height:function(){return document.documentElement.scrollHeight},$click_x:function(){return Ue.click_x},$click_y:function(){return Ue.click_y},$element_x:function(){return Ue.element_x},$element_y:function(){return Ue.element_y},$element_clickable:function(){return Ue.element_clickable},$viewport_width:function(){return document.documentElement.clientWidth||document.body.clientWidth},$viewport_height:function(){return document.documentElement.clientHeight||document.body.clientHeight},$viewport_position:function(){return document.documentElement.scrollTop||document.body.scrollTop},$event_duration:function(){var e=+new Date-(Ae.webstay.xwhen||Ae.pageview.xwhen);return e>_t.webstayDuration?_t.webstayDuration:e},$device_type:function(){return Me()},$web_crawler:function(){return!!navigator.userAgent.toLowerCase().match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)}};function je(e){var t={appid:_t.appkey,xwho:Ve.xwho(),xwhat:Ve.xwhat(e),xwhen:Ve.xwhen(),xcontext:{}},n=g[e];function r(e){var n=Ve[e];if(n){var r=n();""!==r&&null!=r&&(t.xcontext[e]=r)}}return p.forEach((function(e){r(e)})),n&&n.forEach((function(e){r(e)})),t}function Je(e,t,n){if(!$(_t.pageViewBlackList)){var r={},o={};S(e)&&(r.$title=e,t&&(o=T(t,"$pageview"))),r=Z({},o,r);var i=je("$pageview");Ae.webstay.xwhen=0,Ae.pageview.xwhen=i.xwhen,i.xcontext=Z({},i.xcontext,ee(),_t.pageProperty,r),be(i,n)}}var Be={};function He(e,t,n,r){var o=je(e);d.forEach((function(e){o.xcontext[e]&&delete o.xcontext[e]}));var i={};u(t)&&(i=t),S(t)&&x(n)&&(i[t]=n),o.xcontext=Z({},o.xcontext,T(i,e));var a=r||null;c(n)&&!r&&(a=n),be(o,a)}function Ze(e,t,n){He("$profile_set_once",e,t,n)}function Ge(e,t,n){He("$profile_set",e,t,n)}function ze(e,t,n){He("$profile_increment",e,t,n)}function Xe(e,t,n){He("$profile_append",e,t,n)}function We(e,t){var n,r=je("$profile_unset");d.forEach((function(e){r.xcontext[e]&&delete r.xcontext[e]})),A(e)?r.xcontext=Z({},r.xcontext,((n={})[e]="",n)):w({code:600010,fn:"profileUnset",key:e}),be(r,t)}function qe(e){var t=je("$profile_delete");d.forEach((function(e){t.xcontext[e]&&delete t.xcontext[e]})),be(t,e)}function Qe(e,t){if(!S(e))return w({code:60005,value:e,fn:"alias"}),!1;W("ARK_LOGINID",e),_({code:20014});var n=je("$alias");d.forEach((function(e){n.xcontext[e]&&delete n.xcontext[e]})),!0===_t.autoProfile?(be(n,t),Ze()):be(n,t)}function et(e){Ke(e.target||e.srcElement),Fe(e);var t=je("$web_click");t.xcontext=Z({},t.xcontext),be(t)}function tt(e){X(),!0===_t.autoProfile&&Ze({$reset_time:B(new Date,"yyyy-MM-dd hh:mm:ss.SSS")}),_({fn:"$reset",code:20005}),e&&e()}function nt(e){var t=je("$getPresetProperties");return delete t.xcontext.$is_login,_({code:20010,fn:"getPresetProperties",value:t.xcontext}),e&&e(t.xcontext),t.xcontext}function rt(e,t,n){if(/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(e)){var r=je(e),o={};t&&!c(t)&&(o=T(t,e)),r.xcontext=Z({},r.xcontext,ee(),o);var i=n||null;c(t)&&!n&&(i=t),be(r,i)}else w({code:600025,fn:"track",value:e})}function ot(t,n){var r;S(t)?(r=t,M.ARK_TRACKID=r,j(),_({code:20002,value:t,fn:"identify"}),n&&n(),e.AnalysysModal&&e.AnalysysModal([{xwhat:"$identify",xwho:t}])):w({code:60009,fn:"identify",value:t})}function it(e){var t=M.ARK_TRACKID||M.ARK_ID;return e&&e(t),t}function at(e){var t=T(e,"$pageProperty");!function(e){Be=Z({},Be,e)}(t),Object.keys(t).length&&_({fn:"$pageProperty",code:20002,value:e})}function ut(){var e=je("page_close");if(!e.xcontext||e.xcontext.$url){var t={pagestaytime:e.xwhen-Ae.pageview.xwhen-(Ae.pageClose.hideStartTime?Ae.pageClose.hideTime+(e.xwhen-Ae.pageClose.hideStartTime):Ae.pageClose.hideTime)};e.xcontext=Z({},e.xcontext,ee(),Be,t),Be={},be(e),Ae.pageClose.hideStartTime=0,Ae.pageClose.hideTime=0}}function ct(){_t.autoPageViewDuration&&Ae.pageview.xwhen&&ut(),Ae.pageview.prevPath=Ae.pageview.path,Ae.pageview.path=document.location.href}function lt(e){return e&&e.tagName&&e.tagName.toLowerCase()||""}function ft(e){var t=function(e){var t=function(e){return e.parentNode}(e);return t?t.children:null}(e);if(t)for(var n=0;n-1&&_t.visitorConfigURL&&Ye((_t.SDKFileDirectory||"/sdk/")+"AnalysysAgent_JS_SDK_VISUAL.min.js")}var ht=null;function vt(){var e;ct(),_t.auto?pe(Je)():(Ae.webstay.xwhen=0,Ae.pageview.xwhen=+new Date),(e=_t.visitorConfigURL)&&-1===dt.indexOf("arkheatmap=true")&&-1===dt.indexOf("visual=true")&&ie({url:e+"configure",data:{appkey:_t.appkey,lib:"Js",url:window.location.href},timeout:_t.getDataTimeout},(function(e){var t=e.data.data;t&&t.length?(st={},t.forEach((function(e){for(var t="",n=e.new_path.length-3;n>=0;n--){var r=e.new_path[n];t+=r.tagName+(r.id?"#"+r.id:"")+(void 0===r.row||r.id?"":r.row)}st[t]=e}))):st=null}))}function gt(){!function(){for(var e=[],t=0;t=e;i--){var a=t[i],u=lt(t[i]);if(u){var c=u+(a.id?"#"+a.id:"");if(r+=c,o+=c,"html"===u||"body"===u||a.id||(o+=""+ft(a)),"button"===u)break}}return{path:r,pathIndex:o}}for(var o=[],i=0;i_t.maxDiffTimeInterval&&(ce=ae-n,_({code:20013,value:B(new Date(ae),"yyyy-MM-dd hh:mm:ss +SSS"),key:B(new Date(n),"yyyy-MM-dd hh:mm:ss +SSS"),fn:r+"s"}))}ue=!0,e&&e(ae)}),(function(t){ue=!0,e&&e(ae)}))}((function(){de()})),de(),t&&t(_t)}var At=new(function(){function t(){this.config={appkey:"",uploadURL:"",debugMode:0,visitorConfigURL:"",name:"",auto:!0,SDKFileDirectory:"",autoTrack:!1,autoClickBlackList:"",userClickProperty:{},trackList:[],autoHeatmap:!1,autoWebstay:!0,webstayDuration:18e6,autoProfile:!0,hash:!0,encryptType:0,allowTimeCheck:!1,maxDiffTimeInterval:30,autoPageViewDuration:!1,sendDataTimeout:1e4,getDataTimeout:1e4,sendType:"img",crossSubdomain:!1},this.pageView=pe(Je),this.registerSuperProperty=pe(ve,!0),this.registerSuperProperties=pe(ge,!0),this.getSuperProperty=pe(me),this.getSuperProperties=ye,this.unRegisterSuperProperty=_e,this.clearSuperProperties=we,this.profileSetOnce=Ze,this.profileSet=Ge,this.profileAppend=Xe,this.profileIncrement=ze,this.profileDelete=qe,this.profileUnset=We,this.reset=tt,this.track=pe(rt),this.alias=pe(Qe),this.getPresetProperties=nt,this.identify=ot,this.getDistinctId=it,this.pageProperty=at}return t.prototype.init=function(t){var n=this;St(t,(function(t){n.config=t,n.config.name&&(e[n.config.name]=e.AnalysysAgent)}))},t}());return e.AnalysysAgent=At,At})); diff --git a/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.es6.min.js b/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.es6.min.js deleted file mode 100644 index 049da3c..0000000 --- a/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.es6.min.js +++ /dev/null @@ -1,15 +0,0 @@ -var e=window;var t={};function n(e){var n=typeof e;return"object"===n?t[Object.prototype.toString.call(e)]:n}function r(e){return"number"===n(e)}function o(e){return"string"===n(e)}function i(e){return Array.isArray(e)}function a(e){return"boolean"===n(e)}function u(e){return"object"===n(e)}function c(e){return"function"===n(e)} -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */["Boolean","Number","String","Function","Array","Date","RegExp","Object","Error","HTMLCollection"].map((function(e){t["[object "+e+"]"]=e.toLowerCase()}));var l=function(){return(l=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=n}function x(e,t){var n=!0;return S(e,99)?s.indexOf(e)>-1?(n=!1,t&&(t.code=600012)):n=/^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(e):n=!1,t&&t.fn&&!n&&w(t),n}function A(e,t){var n=!1;if(o(e)||r(e)||i(e)||a(e))if(n=!0,o(e))S(e,255)||(n=!1);else if(i(e)){n=e.some((function(e){return S(e,255)}))}return t&&t.fn&&t.key&&!n&&w(t),n}function T(e,t){var n={};if(!u(e))return w({code:600016,fn:t,value:e}),{};for(var r in e){var o=c(e[r])?e[r]():e[r];x(r,{code:600023,fn:t,key:r})&&A(o,{code:600022,fn:t,key:r,value:o})&&(n[r]=o)}return n}function $(e,t){if(e){var n=window.location;if(o(e)){var r=n.href,a=n.protocol+"//"+n.host,u=a+n.pathname;if([r,a,u+"index.html",u,u+n.hash].indexOf(e)>-1)return!0}else{if(c(e))return e(t);if(i(e))for(var l=0;l-1){n=a;break}i=i.parentNode}if(r.indexOf(n)>-1||o()||E(t,e)){if("svg"===n&&e.children&&e.children.length>0){for(var u=!1,c=e.children,l=0;l>2,i=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,u=63&r,isNaN(n)?a=u=64:isNaN(r)&&(u=64),c=c+R.charAt(o)+R.charAt(i)+R.charAt(a)+R.charAt(u);return c},D=function(e){var t,n,r,o,i,a,u="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,n=(15&o)<<4|(i=R.indexOf(e.charAt(c++)))>>2,r=(3&i)<<6|(a=R.indexOf(e.charAt(c++))),u+=String.fromCharCode(t),64!=i&&(u+=String.fromCharCode(n)),64!=a&&(u+=String.fromCharCode(r));return u=P(u)},C=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t},P=function(e){for(var t="",n=0,r=0,o=0,i=0;n191&&r<224?(o=e.charCodeAt(n+1),t+=String.fromCharCode((31&r)<<6|63&o),n+=2):(o=e.charCodeAt(n+1),i=e.charCodeAt(n+2),t+=String.fromCharCode((15&r)<<12|(63&o)<<6|63&i),n+=3);return t},L=window.document;function O(e,t,n){if(n=n||{},void 0!==t){if(null===t&&(t="",n.expires=-1),"number"==typeof n.expires){var r=n.expires,o=n.expires=new Date;o.setTime(o.getTime()+864e5*r)}var i=function(e){try{return n.raw?e:encodeURIComponent(e)}catch(e){}return e};return L.cookie=[i(e),"=",i(t),n.expires?"; expires="+n.expires.toUTCString():"",n.path?"; path="+n.path:"",n.domain?"; domain="+n.domain:"",n.secure?"; secure":""].join("")}for(var a=null,u=L.cookie,c=u?u.split("; "):[],l=-1,f=c.length,s=e.length+1;++l2&&(t=n[2]);if(!0===/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(t)||"localhost"===t)return"";var r=t.split("."),o=!0===e?2:r.length;o<2&&(o=2);var i=[];if(!(r.length>1))return"";r.length=0&&i.length!==o;a--)i.push(r[a]);return i.reverse().join(".")}(!0),V=Y?"FZ_STROAGE."+Y:"";function j(){var e=z();if(_t.crossSubdomain){var t=l({},e);delete t.ARKSUPER,V&&K(V,t,{expires:7300,domain:Y})}I("FZ_STROAGE",e)}function J(e,t){function n(e,t){return e<>>32-t}function r(e,t){var n,r,o,i,a;return o=2147483648&e,i=2147483648&t,a=(1073741823&e)+(1073741823&t),(n=1073741824&e)&(r=1073741824&t)?2147483648^a^o^i:n|r?1073741824&a?3221225472^a^o^i:1073741824^a^o^i:a^o^i}function o(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&t|~e&n}(t,o,i),a),c)),r(n(e,u),t)}function i(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&n|t&~n}(t,o,i),a),c)),r(n(e,u),t)}function a(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e^t^n}(t,o,i),a),c)),r(n(e,u),t)}function u(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return t^(e|~n)}(t,o,i),a),c)),r(n(e,u),t)}function c(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0"+(e>>>8*t&255).toString(16)).substr(r.length-2,2);return n}var l,f,s,d,p,h,v,g,m,y;for(l=function(e){for(var t,n=e.length,r=n+8,o=16*((r-r%64)/64+1),i=Array(o-1),a=0,u=0;u>>29,i}(e),v=1732584193,g=4023233417,m=2562383102,y=271733878,f=0;f=0;n--){var r=M.POSTDATA[n];t[r.xwhen]&&M.POSTDATA.splice(n,1)}j()}function oe(e){return null==e?"":u(e)?JSON.stringify(e):e+""}function ie(e,t,n){var r=new window.XMLHttpRequest||new window.ActiveXObject("Microsoft.XMLHTTP")||new window.ActiveXObject("Msxml2.XMLHTTP"),i=(e.method||"GET").toUpperCase(),a=e.url,c=e.data,l=Z({},e.header);"GET"===i&&e.data&&(a+=(/\?/.test(e.url)?"&":"?")+function(e){var t=[];for(var n in e){var r=e[n];o(r)?r=encodeURIComponent(e[n]):u(r)&&(r=encodeURIComponent(JSON.stringify(e[n]))),t.push(n+"="+r)}return t.join("&")}(e.data));for(var f in"POST"===i&&e.data&&!l["Content-Type"]&&(c=JSON.stringify(e.data)),r.open(i,a),l)r.setRequestHeader(f,l[f]);r.timeout=e.timeout,r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var o={header:(i=r.getAllResponseHeaders(),a=i.trim().split(/[\r\n]+/),u={},a.forEach((function(e){var t=e.split(": "),n=t.shift(),r=t.join(": ");u[n]=r})),u),data:r.responseText};try{o.data=JSON.parse(r.responseText)}catch(e){}t&&t(o,r),e.success&&e.success(o,r)}else n&&n(r),e.error&&e.error(r);var i,a,u},r.send(c)}var ae=0,ue=!1,ce=0;function le(){return+new Date+ce}var fe=!1,se=[];function de(){ue&&wt&&se.length&&(se.forEach((function(e){e.fn.apply(e.fn,e.arg)})),se=[],fe=!0)}function pe(e,t){return function(){for(var n=[],r=0;r-1?t=e.value||"":"img"===e.tagName.toLowerCase()?t=e.getAttribute("alt")||e.getAttribute("title")||"":"a"===e.tagName.toLowerCase()&&(t=e.getAttribute("title")||""),!t)for(var n=e.childNodes,r=0;r0){for(var f="",s=0;s-1&&t.indexOf("PC")<0||t.indexOf("Pad")>-1||t.indexOf("Nexus 7")>-1?"tablet":t.indexOf("Mobi")>-1||t.indexOf("iPh")>-1||t.indexOf("480")>-1?"phone":"desktop"}function Ye(e,t){var n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src=e,n.onload=t;var r=document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0];r&&r.appendChild(n)}var Ve={xwho:function(){return M.ARK_LOGINID||M.ARK_TRACKID||M.ARK_ID},xwhen:function(){return le()},xwhat:function(e){return e},$lib:function(){return"JS"},$lib_version:function(){return"5.0.0"},$platform:function(){return"JS"},$debug:function(){return _t.debugMode},$is_login:function(){return!!M.ARK_LOGINID},$session_id:function(){return e=new Date,t=e.getTime(),n=e.getTimezoneOffset(),r=new Date(t+60*n*1e3+288e5).getDate(),o=M.SEESIONDATE?new Date(M.SEESIONDATE+60*n*1e3+288e5).getDate():0,(!M.SEESIONID||!M.SEESIONDATE||t-M.SEESIONDATE>18e5||o!==r)&&Q(),M.SEESIONID;var e,t,n,r,o},$screen_width:function(){return window.screen.width||0},$screen_height:function(){return window.screen.height||0},$language:function(){return(e.navigator.language||e.navigator.browserLanguage).toLowerCase()},$user_agent:function(){return e.navigator.userAgent.replace(/"/g,'\\"')},$time_zone:function(){return"GMT"+(e=(new Date).getTimezoneOffset(),n=e%60,r="-",((t=e/60)<=0||n<0)&&(r="+",t=-t,n<0&&(n=-n)),1==(t+="").length&&(t="0"+t),1==(n+="").length&&(n="0"+n),r+t+":"+n);var e,t,n,r},$startup_time:function(){return F.STARTUPTIME},$is_first_time:function(){return!M.FRISTDAY},$is_first_day:function(){return!M.FRISTDAY||(o(M.FRISTDAY)?B(new Date(le()),"yyyyMMdd")===M.FRISTDAY:!!r(M.FRISTDAY)&&B(new Date(le()),"yyyyMMdd")===B(new Date(M.FRISTDAY),"yyyyMMdd"))},$first_visit_time:function(){return M.ARKFRISTPROFILE},$first_visit_language:function(){return""},$original_id:function(){return M.ARK_TRACKID||M.ARK_ID},$is_time_calibrated:function(){return!(!_t.allowTimeCheck||!ce)},$referrer:function(){return xe.pageview.prevPath},$title:function(){return document.title},$url:function(){return xe.pageview.path},$url_path:function(){return""},$url_domain:function(){return""},$utm_campaign_id:function(){return Re},$utm_source:function(){return ke},$utm_medium:function(){return De},$utm_term:function(){return Ce},$utm_content:function(){return Pe},$utm_campaign:function(){return Le},$element_content:function(){return oe(Ie.element_content)},$element_id:function(){return oe(Ie.element_id)},$element_type:function(){return oe(Ie.element_type)},$element_name:function(){return oe(Ie.element_name)},$element_class_name:function(){return oe(Ie.element_class_name)},$element_target_url:function(){return oe(Ie.element_target_url)},$element_path:function(){return oe(Ie.element_path)},$page_width:function(){return document.documentElement.scrollWidth},$page_height:function(){return document.documentElement.scrollHeight},$click_x:function(){return Ue.click_x},$click_y:function(){return Ue.click_y},$element_x:function(){return Ue.element_x},$element_y:function(){return Ue.element_y},$element_clickable:function(){return Ue.element_clickable},$viewport_width:function(){return document.documentElement.clientWidth||document.body.clientWidth},$viewport_height:function(){return document.documentElement.clientHeight||document.body.clientHeight},$viewport_position:function(){return document.documentElement.scrollTop||document.body.scrollTop},$event_duration:function(){var e=+new Date-(xe.webstay.xwhen||xe.pageview.xwhen);return e>_t.webstayDuration?_t.webstayDuration:e},$device_type:function(){return Me()},$web_crawler:function(){return!!navigator.userAgent.toLowerCase().match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)}};function je(e){var t={appid:_t.appkey,xwho:Ve.xwho(),xwhat:Ve.xwhat(e),xwhen:Ve.xwhen(),xcontext:{}},n=g[e];function r(e){var n=Ve[e];if(n){var r=n();""!==r&&null!=r&&(t.xcontext[e]=r)}}return p.forEach((function(e){r(e)})),n&&n.forEach((function(e){r(e)})),t}function Je(e,t,n){if(!$(_t.pageViewBlackList)){var r={},o={};S(e)&&(r.$title=e,t&&(o=T(t,"$pageview"))),r=Z({},o,r);var i=je("$pageview");xe.webstay.xwhen=0,xe.pageview.xwhen=i.xwhen,i.xcontext=Z({},i.xcontext,ee(),_t.pageProperty,r),be(i,n)}}var Be={};function He(e,t,n,r){var o=je(e);d.forEach((function(e){o.xcontext[e]&&delete o.xcontext[e]}));var i={};u(t)&&(i=t),S(t)&&A(n)&&(i[t]=n),o.xcontext=Z({},o.xcontext,T(i,e));var a=r||null;c(n)&&!r&&(a=n),be(o,a)}function Ze(e,t,n){He("$profile_set_once",e,t,n)}function Ge(e,t,n){He("$profile_set",e,t,n)}function ze(e,t,n){He("$profile_increment",e,t,n)}function Xe(e,t,n){He("$profile_append",e,t,n)}function We(e,t){var n,r=je("$profile_unset");d.forEach((function(e){r.xcontext[e]&&delete r.xcontext[e]})),x(e)?r.xcontext=Z({},r.xcontext,((n={})[e]="",n)):w({code:600010,fn:"profileUnset",key:e}),be(r,t)}function qe(e){var t=je("$profile_delete");d.forEach((function(e){t.xcontext[e]&&delete t.xcontext[e]})),be(t,e)}function Qe(e,t){if(!S(e))return w({code:60005,value:e,fn:"alias"}),!1;W("ARK_LOGINID",e),_({code:20014});var n=je("$alias");d.forEach((function(e){n.xcontext[e]&&delete n.xcontext[e]})),!0===_t.autoProfile?(be(n,t),Ze()):be(n,t)}function et(e){Ke(e.target||e.srcElement),Fe(e);var t=je("$web_click");t.xcontext=Z({},t.xcontext),be(t)}function tt(e){X(),!0===_t.autoProfile&&Ze({$reset_time:B(new Date,"yyyy-MM-dd hh:mm:ss.SSS")}),_({fn:"$reset",code:20005}),e&&e()}function nt(e){var t=je("$getPresetProperties");return delete t.xcontext.$is_login,_({code:20010,fn:"getPresetProperties",value:t.xcontext}),e&&e(t.xcontext),t.xcontext}function rt(e,t,n){if(/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(e)){var r=je(e),o={};t&&!c(t)&&(o=T(t,e)),r.xcontext=Z({},r.xcontext,ee(),o);var i=n||null;c(t)&&!n&&(i=t),be(r,i)}else w({code:600025,fn:"track",value:e})}function ot(t,n){var r;S(t)?(r=t,M.ARK_TRACKID=r,j(),_({code:20002,value:t,fn:"identify"}),n&&n(),e.AnalysysModal&&e.AnalysysModal([{xwhat:"$identify",xwho:t}])):w({code:60009,fn:"identify",value:t})}function it(e){var t=M.ARK_TRACKID||M.ARK_ID;return e&&e(t),t}function at(e){var t=T(e,"$pageProperty");!function(e){Be=Z({},Be,e)}(t),Object.keys(t).length&&_({fn:"$pageProperty",code:20002,value:e})}function ut(){var e=je("page_close");if(!e.xcontext||e.xcontext.$url){var t={pagestaytime:e.xwhen-xe.pageview.xwhen-(xe.pageClose.hideStartTime?xe.pageClose.hideTime+(e.xwhen-xe.pageClose.hideStartTime):xe.pageClose.hideTime)};e.xcontext=Z({},e.xcontext,ee(),Be,t),Be={},be(e),xe.pageClose.hideStartTime=0,xe.pageClose.hideTime=0}}function ct(){_t.autoPageViewDuration&&xe.pageview.xwhen&&ut(),xe.pageview.prevPath=xe.pageview.path,xe.pageview.path=document.location.href}function lt(e){return e&&e.tagName&&e.tagName.toLowerCase()||""}function ft(e){var t=function(e){var t=function(e){return e.parentNode}(e);return t?t.children:null}(e);if(t)for(var n=0;n-1&&_t.visitorConfigURL&&Ye((_t.SDKFileDirectory||"/sdk/")+"AnalysysAgent_JS_SDK_VISUAL.min.js")}var ht=null;function vt(){var e;ct(),_t.auto?pe(Je)():(xe.webstay.xwhen=0,xe.pageview.xwhen=+new Date),(e=_t.visitorConfigURL)&&-1===dt.indexOf("arkheatmap=true")&&-1===dt.indexOf("visual=true")&&ie({url:e+"configure",data:{appkey:_t.appkey,lib:"Js",url:window.location.href},timeout:_t.getDataTimeout},(function(e){var t=e.data.data;t&&t.length?(st={},t.forEach((function(e){for(var t="",n=e.new_path.length-3;n>=0;n--){var r=e.new_path[n];t+=r.tagName+(r.id?"#"+r.id:"")+(void 0===r.row||r.id?"":r.row)}st[t]=e}))):st=null}))}function gt(){!function(){for(var e=[],t=0;t=e;i--){var a=t[i],u=lt(t[i]);if(u){var c=u+(a.id?"#"+a.id:"");if(r+=c,o+=c,"html"===u||"body"===u||a.id||(o+=""+ft(a)),"button"===u)break}}return{path:r,pathIndex:o}}for(var o=[],i=0;i_t.maxDiffTimeInterval&&(ce=ae-n,_({code:20013,value:B(new Date(ae),"yyyy-MM-dd hh:mm:ss +SSS"),key:B(new Date(n),"yyyy-MM-dd hh:mm:ss +SSS"),fn:r+"s"}))}ue=!0,e&&e(ae)}),(function(t){ue=!0,e&&e(ae)}))}((function(){de()})),de(),t&&t(_t)}var xt=new(function(){function t(){this.config={appkey:"",uploadURL:"",debugMode:0,visitorConfigURL:"",name:"",auto:!0,SDKFileDirectory:"",autoTrack:!1,autoClickBlackList:"",userClickProperty:{},trackList:[],autoHeatmap:!1,autoWebstay:!0,webstayDuration:18e6,autoProfile:!0,hash:!0,encryptType:0,allowTimeCheck:!1,maxDiffTimeInterval:30,autoPageViewDuration:!1,sendDataTimeout:1e4,getDataTimeout:1e4,sendType:"img",crossSubdomain:!1},this.pageView=pe(Je),this.registerSuperProperty=pe(ve,!0),this.registerSuperProperties=pe(ge,!0),this.getSuperProperty=pe(me),this.getSuperProperties=ye,this.unRegisterSuperProperty=_e,this.clearSuperProperties=we,this.profileSetOnce=Ze,this.profileSet=Ge,this.profileAppend=Xe,this.profileIncrement=ze,this.profileDelete=qe,this.profileUnset=We,this.reset=tt,this.track=pe(rt),this.alias=pe(Qe),this.getPresetProperties=nt,this.identify=ot,this.getDistinctId=it,this.pageProperty=at}return t.prototype.init=function(t){var n=this;St(t,(function(t){n.config=t,n.config.name&&(e[n.config.name]=e.AnalysysAgent)}))},t}());e.AnalysysAgent=xt;export default xt; diff --git a/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.min.js b/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.min.js deleted file mode 100644 index d7cbc38..0000000 --- a/demo/jquery/sdk/demo/react/public/sdk/demo/vue-pc/public/sdk/dist/AnalysysAgent_JS_SDK.min.js +++ /dev/null @@ -1,15 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).AnalysysAgent=t()}(this,(function(){"use strict";var e=window;var t={};function n(e){var n=typeof e;return"object"===n?t[Object.prototype.toString.call(e)]:n}function r(e){return"number"===n(e)}function o(e){return"string"===n(e)}function i(e){return Array.isArray(e)}function a(e){return"boolean"===n(e)}function u(e){return"object"===n(e)}function c(e){return"function"===n(e)} -/*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */["Boolean","Number","String","Function","Array","Date","RegExp","Object","Error","HTMLCollection"].map((function(e){t["[object "+e+"]"]=e.toLowerCase()}));var l=function(){return(l=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=n}function A(e,t){var n=!0;return S(e,99)?s.indexOf(e)>-1?(n=!1,t&&(t.code=600012)):n=/^[$a-zA-Z][a-zA-Z0-9_$]{0,}$/.test(e):n=!1,t&&t.fn&&!n&&w(t),n}function x(e,t){var n=!1;if(o(e)||r(e)||i(e)||a(e))if(n=!0,o(e))S(e,255)||(n=!1);else if(i(e)){n=e.some((function(e){return S(e,255)}))}return t&&t.fn&&t.key&&!n&&w(t),n}function T(e,t){var n={};if(!u(e))return w({code:600016,fn:t,value:e}),{};for(var r in e){var o=c(e[r])?e[r]():e[r];A(r,{code:600023,fn:t,key:r})&&x(o,{code:600022,fn:t,key:r,value:o})&&(n[r]=o)}return n}function $(e,t){if(e){var n=window.location;if(o(e)){var r=n.href,a=n.protocol+"//"+n.host,u=a+n.pathname;if([r,a,u+"index.html",u,u+n.hash].indexOf(e)>-1)return!0}else{if(c(e))return e(t);if(i(e))for(var l=0;l-1){n=a;break}i=i.parentNode}if(r.indexOf(n)>-1||o()||E(t,e)){if("svg"===n&&e.children&&e.children.length>0){for(var u=!1,c=e.children,l=0;l>2,i=(3&t)<<4|(n=e.charCodeAt(l++))>>4,a=(15&n)<<2|(r=e.charCodeAt(l++))>>6,u=63&r,isNaN(n)?a=u=64:isNaN(r)&&(u=64),c=c+R.charAt(o)+R.charAt(i)+R.charAt(a)+R.charAt(u);return c},D=function(e){var t,n,r,o,i,a,u="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,n=(15&o)<<4|(i=R.indexOf(e.charAt(c++)))>>2,r=(3&i)<<6|(a=R.indexOf(e.charAt(c++))),u+=String.fromCharCode(t),64!=i&&(u+=String.fromCharCode(n)),64!=a&&(u+=String.fromCharCode(r));return u=P(u)},C=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t},P=function(e){for(var t="",n=0,r=0,o=0,i=0;n191&&r<224?(o=e.charCodeAt(n+1),t+=String.fromCharCode((31&r)<<6|63&o),n+=2):(o=e.charCodeAt(n+1),i=e.charCodeAt(n+2),t+=String.fromCharCode((15&r)<<12|(63&o)<<6|63&i),n+=3);return t},L=window.document;function O(e,t,n){if(n=n||{},void 0!==t){if(null===t&&(t="",n.expires=-1),"number"==typeof n.expires){var r=n.expires,o=n.expires=new Date;o.setTime(o.getTime()+864e5*r)}var i=function(e){try{return n.raw?e:encodeURIComponent(e)}catch(e){}return e};return L.cookie=[i(e),"=",i(t),n.expires?"; expires="+n.expires.toUTCString():"",n.path?"; path="+n.path:"",n.domain?"; domain="+n.domain:"",n.secure?"; secure":""].join("")}for(var a=null,u=L.cookie,c=u?u.split("; "):[],l=-1,f=c.length,s=e.length+1;++l2&&(t=n[2]);if(!0===/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(t)||"localhost"===t)return"";var r=t.split("."),o=!0===e?2:r.length;o<2&&(o=2);var i=[];if(!(r.length>1))return"";r.length=0&&i.length!==o;a--)i.push(r[a]);return i.reverse().join(".")}(!0),V=Y?"FZ_STROAGE."+Y:"";function j(){var e=z();if(_t.crossSubdomain){var t=l({},e);delete t.ARKSUPER,V&&K(V,t,{expires:7300,domain:Y})}I("FZ_STROAGE",e)}function J(e,t){function n(e,t){return e<>>32-t}function r(e,t){var n,r,o,i,a;return o=2147483648&e,i=2147483648&t,a=(1073741823&e)+(1073741823&t),(n=1073741824&e)&(r=1073741824&t)?2147483648^a^o^i:n|r?1073741824&a?3221225472^a^o^i:1073741824^a^o^i:a^o^i}function o(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&t|~e&n}(t,o,i),a),c)),r(n(e,u),t)}function i(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e&n|t&~n}(t,o,i),a),c)),r(n(e,u),t)}function a(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return e^t^n}(t,o,i),a),c)),r(n(e,u),t)}function u(e,t,o,i,a,u,c){return e=r(e,r(r(function(e,t,n){return t^(e|~n)}(t,o,i),a),c)),r(n(e,u),t)}function c(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0"+(e>>>8*t&255).toString(16)).substr(r.length-2,2);return n}var l,f,s,d,p,h,v,g,m,y;for(l=function(e){for(var t,n=e.length,r=n+8,o=16*((r-r%64)/64+1),i=Array(o-1),a=0,u=0;u>>29,i}(e),v=1732584193,g=4023233417,m=2562383102,y=271733878,f=0;f=0;n--){var r=M.POSTDATA[n];t[r.xwhen]&&M.POSTDATA.splice(n,1)}j()}function oe(e){return null==e?"":u(e)?JSON.stringify(e):e+""}function ie(e,t,n){var r=new window.XMLHttpRequest||new window.ActiveXObject("Microsoft.XMLHTTP")||new window.ActiveXObject("Msxml2.XMLHTTP"),i=(e.method||"GET").toUpperCase(),a=e.url,c=e.data,l=Z({},e.header);"GET"===i&&e.data&&(a+=(/\?/.test(e.url)?"&":"?")+function(e){var t=[];for(var n in e){var r=e[n];o(r)?r=encodeURIComponent(e[n]):u(r)&&(r=encodeURIComponent(JSON.stringify(e[n]))),t.push(n+"="+r)}return t.join("&")}(e.data));for(var f in"POST"===i&&e.data&&!l["Content-Type"]&&(c=JSON.stringify(e.data)),r.open(i,a),l)r.setRequestHeader(f,l[f]);r.timeout=e.timeout,r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var o={header:(i=r.getAllResponseHeaders(),a=i.trim().split(/[\r\n]+/),u={},a.forEach((function(e){var t=e.split(": "),n=t.shift(),r=t.join(": ");u[n]=r})),u),data:r.responseText};try{o.data=JSON.parse(r.responseText)}catch(e){}t&&t(o,r),e.success&&e.success(o,r)}else n&&n(r),e.error&&e.error(r);var i,a,u},r.send(c)}var ae=0,ue=!1,ce=0;function le(){return+new Date+ce}var fe=!1,se=[];function de(){ue&&wt&&se.length&&(se.forEach((function(e){e.fn.apply(e.fn,e.arg)})),se=[],fe=!0)}function pe(e,t){return function(){for(var n=[],r=0;r-1?t=e.value||"":"img"===e.tagName.toLowerCase()?t=e.getAttribute("alt")||e.getAttribute("title")||"":"a"===e.tagName.toLowerCase()&&(t=e.getAttribute("title")||""),!t)for(var n=e.childNodes,r=0;r0){for(var f="",s=0;s-1&&t.indexOf("PC")<0||t.indexOf("Pad")>-1||t.indexOf("Nexus 7")>-1?"tablet":t.indexOf("Mobi")>-1||t.indexOf("iPh")>-1||t.indexOf("480")>-1?"phone":"desktop"}function Ye(e,t){var n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src=e,n.onload=t;var r=document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0];r&&r.appendChild(n)}var Ve={xwho:function(){return M.ARK_LOGINID||M.ARK_TRACKID||M.ARK_ID},xwhen:function(){return le()},xwhat:function(e){return e},$lib:function(){return"JS"},$lib_version:function(){return"5.0.0"},$platform:function(){return"JS"},$debug:function(){return _t.debugMode},$is_login:function(){return!!M.ARK_LOGINID},$session_id:function(){return e=new Date,t=e.getTime(),n=e.getTimezoneOffset(),r=new Date(t+60*n*1e3+288e5).getDate(),o=M.SEESIONDATE?new Date(M.SEESIONDATE+60*n*1e3+288e5).getDate():0,(!M.SEESIONID||!M.SEESIONDATE||t-M.SEESIONDATE>18e5||o!==r)&&Q(),M.SEESIONID;var e,t,n,r,o},$screen_width:function(){return window.screen.width||0},$screen_height:function(){return window.screen.height||0},$language:function(){return(e.navigator.language||e.navigator.browserLanguage).toLowerCase()},$user_agent:function(){return e.navigator.userAgent.replace(/"/g,'\\"')},$time_zone:function(){return"GMT"+(e=(new Date).getTimezoneOffset(),n=e%60,r="-",((t=e/60)<=0||n<0)&&(r="+",t=-t,n<0&&(n=-n)),1==(t+="").length&&(t="0"+t),1==(n+="").length&&(n="0"+n),r+t+":"+n);var e,t,n,r},$startup_time:function(){return F.STARTUPTIME},$is_first_time:function(){return!M.FRISTDAY},$is_first_day:function(){return!M.FRISTDAY||(o(M.FRISTDAY)?B(new Date(le()),"yyyyMMdd")===M.FRISTDAY:!!r(M.FRISTDAY)&&B(new Date(le()),"yyyyMMdd")===B(new Date(M.FRISTDAY),"yyyyMMdd"))},$first_visit_time:function(){return M.ARKFRISTPROFILE},$first_visit_language:function(){return""},$original_id:function(){return M.ARK_TRACKID||M.ARK_ID},$is_time_calibrated:function(){return!(!_t.allowTimeCheck||!ce)},$referrer:function(){return Ae.pageview.prevPath},$title:function(){return document.title},$url:function(){return Ae.pageview.path},$url_path:function(){return""},$url_domain:function(){return""},$utm_campaign_id:function(){return Re},$utm_source:function(){return ke},$utm_medium:function(){return De},$utm_term:function(){return Ce},$utm_content:function(){return Pe},$utm_campaign:function(){return Le},$element_content:function(){return oe(Ie.element_content)},$element_id:function(){return oe(Ie.element_id)},$element_type:function(){return oe(Ie.element_type)},$element_name:function(){return oe(Ie.element_name)},$element_class_name:function(){return oe(Ie.element_class_name)},$element_target_url:function(){return oe(Ie.element_target_url)},$element_path:function(){return oe(Ie.element_path)},$page_width:function(){return document.documentElement.scrollWidth},$page_height:function(){return document.documentElement.scrollHeight},$click_x:function(){return Ue.click_x},$click_y:function(){return Ue.click_y},$element_x:function(){return Ue.element_x},$element_y:function(){return Ue.element_y},$element_clickable:function(){return Ue.element_clickable},$viewport_width:function(){return document.documentElement.clientWidth||document.body.clientWidth},$viewport_height:function(){return document.documentElement.clientHeight||document.body.clientHeight},$viewport_position:function(){return document.documentElement.scrollTop||document.body.scrollTop},$event_duration:function(){var e=+new Date-(Ae.webstay.xwhen||Ae.pageview.xwhen);return e>_t.webstayDuration?_t.webstayDuration:e},$device_type:function(){return Me()},$web_crawler:function(){return!!navigator.userAgent.toLowerCase().match(/(bot|crawler|spider|scrapy|dnspod|ia_archiver|jiankongbao|slurp|transcoder|networkbench|oneapm|PhantomJS|BingPreview)/i)}};function je(e){var t={appid:_t.appkey,xwho:Ve.xwho(),xwhat:Ve.xwhat(e),xwhen:Ve.xwhen(),xcontext:{}},n=g[e];function r(e){var n=Ve[e];if(n){var r=n();""!==r&&null!=r&&(t.xcontext[e]=r)}}return p.forEach((function(e){r(e)})),n&&n.forEach((function(e){r(e)})),t}function Je(e,t,n){if(!$(_t.pageViewBlackList)){var r={},o={};S(e)&&(r.$title=e,t&&(o=T(t,"$pageview"))),r=Z({},o,r);var i=je("$pageview");Ae.webstay.xwhen=0,Ae.pageview.xwhen=i.xwhen,i.xcontext=Z({},i.xcontext,ee(),_t.pageProperty,r),be(i,n)}}var Be={};function He(e,t,n,r){var o=je(e);d.forEach((function(e){o.xcontext[e]&&delete o.xcontext[e]}));var i={};u(t)&&(i=t),S(t)&&x(n)&&(i[t]=n),o.xcontext=Z({},o.xcontext,T(i,e));var a=r||null;c(n)&&!r&&(a=n),be(o,a)}function Ze(e,t,n){He("$profile_set_once",e,t,n)}function Ge(e,t,n){He("$profile_set",e,t,n)}function ze(e,t,n){He("$profile_increment",e,t,n)}function Xe(e,t,n){He("$profile_append",e,t,n)}function We(e,t){var n,r=je("$profile_unset");d.forEach((function(e){r.xcontext[e]&&delete r.xcontext[e]})),A(e)?r.xcontext=Z({},r.xcontext,((n={})[e]="",n)):w({code:600010,fn:"profileUnset",key:e}),be(r,t)}function qe(e){var t=je("$profile_delete");d.forEach((function(e){t.xcontext[e]&&delete t.xcontext[e]})),be(t,e)}function Qe(e,t){if(!S(e))return w({code:60005,value:e,fn:"alias"}),!1;W("ARK_LOGINID",e),_({code:20014});var n=je("$alias");d.forEach((function(e){n.xcontext[e]&&delete n.xcontext[e]})),!0===_t.autoProfile?(be(n,t),Ze()):be(n,t)}function et(e){Ke(e.target||e.srcElement),Fe(e);var t=je("$web_click");t.xcontext=Z({},t.xcontext),be(t)}function tt(e){X(),!0===_t.autoProfile&&Ze({$reset_time:B(new Date,"yyyy-MM-dd hh:mm:ss.SSS")}),_({fn:"$reset",code:20005}),e&&e()}function nt(e){var t=je("$getPresetProperties");return delete t.xcontext.$is_login,_({code:20010,fn:"getPresetProperties",value:t.xcontext}),e&&e(t.xcontext),t.xcontext}function rt(e,t,n){if(/^[a-zA-Z$][a-zA-Z0-9_]{1,99}$|^[a-zA-Z]$/.test(e)){var r=je(e),o={};t&&!c(t)&&(o=T(t,e)),r.xcontext=Z({},r.xcontext,ee(),o);var i=n||null;c(t)&&!n&&(i=t),be(r,i)}else w({code:600025,fn:"track",value:e})}function ot(t,n){var r;S(t)?(r=t,M.ARK_TRACKID=r,j(),_({code:20002,value:t,fn:"identify"}),n&&n(),e.AnalysysModal&&e.AnalysysModal([{xwhat:"$identify",xwho:t}])):w({code:60009,fn:"identify",value:t})}function it(e){var t=M.ARK_TRACKID||M.ARK_ID;return e&&e(t),t}function at(e){var t=T(e,"$pageProperty");!function(e){Be=Z({},Be,e)}(t),Object.keys(t).length&&_({fn:"$pageProperty",code:20002,value:e})}function ut(){var e=je("page_close");if(!e.xcontext||e.xcontext.$url){var t={pagestaytime:e.xwhen-Ae.pageview.xwhen-(Ae.pageClose.hideStartTime?Ae.pageClose.hideTime+(e.xwhen-Ae.pageClose.hideStartTime):Ae.pageClose.hideTime)};e.xcontext=Z({},e.xcontext,ee(),Be,t),Be={},be(e),Ae.pageClose.hideStartTime=0,Ae.pageClose.hideTime=0}}function ct(){_t.autoPageViewDuration&&Ae.pageview.xwhen&&ut(),Ae.pageview.prevPath=Ae.pageview.path,Ae.pageview.path=document.location.href}function lt(e){return e&&e.tagName&&e.tagName.toLowerCase()||""}function ft(e){var t=function(e){var t=function(e){return e.parentNode}(e);return t?t.children:null}(e);if(t)for(var n=0;n-1&&_t.visitorConfigURL&&Ye((_t.SDKFileDirectory||"/sdk/")+"AnalysysAgent_JS_SDK_VISUAL.min.js")}var ht=null;function vt(){var e;ct(),_t.auto?pe(Je)():(Ae.webstay.xwhen=0,Ae.pageview.xwhen=+new Date),(e=_t.visitorConfigURL)&&-1===dt.indexOf("arkheatmap=true")&&-1===dt.indexOf("visual=true")&&ie({url:e+"configure",data:{appkey:_t.appkey,lib:"Js",url:window.location.href},timeout:_t.getDataTimeout},(function(e){var t=e.data.data;t&&t.length?(st={},t.forEach((function(e){for(var t="",n=e.new_path.length-3;n>=0;n--){var r=e.new_path[n];t+=r.tagName+(r.id?"#"+r.id:"")+(void 0===r.row||r.id?"":r.row)}st[t]=e}))):st=null}))}function gt(){!function(){for(var e=[],t=0;t=e;i--){var a=t[i],u=lt(t[i]);if(u){var c=u+(a.id?"#"+a.id:"");if(r+=c,o+=c,"html"===u||"body"===u||a.id||(o+=""+ft(a)),"button"===u)break}}return{path:r,pathIndex:o}}for(var o=[],i=0;i_t.maxDiffTimeInterval&&(ce=ae-n,_({code:20013,value:B(new Date(ae),"yyyy-MM-dd hh:mm:ss +SSS"),key:B(new Date(n),"yyyy-MM-dd hh:mm:ss +SSS"),fn:r+"s"}))}ue=!0,e&&e(ae)}),(function(t){ue=!0,e&&e(ae)}))}((function(){de()})),de(),t&&t(_t)}var At=new(function(){function t(){this.config={appkey:"",uploadURL:"",debugMode:0,visitorConfigURL:"",name:"",auto:!0,SDKFileDirectory:"",autoTrack:!1,autoClickBlackList:"",userClickProperty:{},trackList:[],autoHeatmap:!1,autoWebstay:!0,webstayDuration:18e6,autoProfile:!0,hash:!0,encryptType:0,allowTimeCheck:!1,maxDiffTimeInterval:30,autoPageViewDuration:!1,sendDataTimeout:1e4,getDataTimeout:1e4,sendType:"img",crossSubdomain:!1},this.pageView=pe(Je),this.registerSuperProperty=pe(ve,!0),this.registerSuperProperties=pe(ge,!0),this.getSuperProperty=pe(me),this.getSuperProperties=ye,this.unRegisterSuperProperty=_e,this.clearSuperProperties=we,this.profileSetOnce=Ze,this.profileSet=Ge,this.profileAppend=Xe,this.profileIncrement=ze,this.profileDelete=qe,this.profileUnset=We,this.reset=tt,this.track=pe(rt),this.alias=pe(Qe),this.getPresetProperties=nt,this.identify=ot,this.getDistinctId=it,this.pageProperty=at}return t.prototype.init=function(t){var n=this;St(t,(function(t){n.config=t,n.config.name&&(e[n.config.name]=e.AnalysysAgent)}))},t}());return e.AnalysysAgent=At,At})); diff --git a/demo/jquery/sdk/init.js b/demo/jquery/sdk/init.js deleted file mode 100644 index 73b096f..0000000 --- a/demo/jquery/sdk/init.js +++ /dev/null @@ -1,99 +0,0 @@ -(function () { - window.AnalysysAgent = window.AnalysysAgent || {} - // 鏄撹sdk褰撳墠濡傛灉宸茬粡鍒濆鍖栧畬鎴愶紝鍒欐棤闇€鍐嶈繘琛屽垵濮嬪寲鎿嶄綔 - if (window.AnalysysAgent && window.AnalysysAgent.isInit === true) { - return - } - var d = document, - e = d.createElement('script'), - n = d.getElementsByTagName('script')[0]; - e.type = 'text/javascript'; - e.async = true; - e.src = 'https://design.yonyoucloud.com/static/analytics/yiguan/latest/AnalysysAgent_PageViewStayTime.min.js'; //椤甸潰璁块棶鏃堕暱妯″潡 SDK瀛樻斁鍦板潃 - n.parentNode.insertBefore(e, n); -})(); -(function (c) { - window.AnalysysAgent = window.AnalysysAgent || {} - // 鏄撹sdk褰撳墠濡傛灉宸茬粡鍒濆鍖栧畬鎴愶紝鍒欐棤闇€鍐嶈繘琛屽垵濮嬪寲鎿嶄綔 - if (window.AnalysysAgent && window.AnalysysAgent.isInit === true) { - return - } - var a = window.AnalysysAgent || {} - var ans = ['identify', 'alias', 'reset', 'track', 'profileSet', 'profileSetOnce', 'profileIncrement', 'profileAppend', 'profileUnset', 'profileDelete', 'registerSuperProperty', 'registerSuperProperties', 'unRegisterSuperProperty', 'clearSuperProperties', 'getSuperProperty', 'getSuperProperties', 'pageView', 'getDistinctId'] - a['config'] = c - a['param'] = [] - function factory (b) { - return function () { - a['param'].push([b, arguments]) - return window.AnalysysAgent - } - } - for (var i = 0; i < ans.length; i++) { - a[ans[i]] = factory(ans[i]) - } - if (c.name) { - window[c.name] = a - } - var date = new Date(); - var time = '4_5_5_11_'+new String(date.getFullYear()) + new String(date.getMonth() + 1) + new String(date.getDate()); - var d = document, - e = d.createElement('script'), - n = d.getElementsByTagName('script')[0]; - e.type = 'text/javascript'; - e.async = true; - e.id = 'ARK_SDK'; - e.src = 'https://design.yonyoucloud.com/static/analytics/yiguan/latest/AnalysysAgent_JS_SDK.min.js' + '?v=' + time; //JS SDK鐎涙ɑ鏂侀崷鏉挎絻 - n.parentNode.insertBefore(e, n); -})({ - appkey: '4d0f00f6b5fab47d', //姝e紡鐜 - uploadURL: 'https://art.diwork.com', - debugMode: 2, - crossSubdomainSuper: (function(){ - var origin = window.location.origin; - var YS_URL_OBJ = { - 'https://yonsuite.diwork.com': true, // YS姝e紡鐜鍦板潃 - 'https://www.diwork.com': true, // YB鐨刣iwork鐜鍦板潃 - 'https://yonbip.yonyou.com': true, // YB姝e紡鐜鍦板潃 - } - if (YS_URL_OBJ[origin]) { - return true - } else { - return false - } - })(), - visitorConfigURL: 'https://art.diwork.com' -}) - - - -(function (config) { - var c = document.createElement('script'), - n = document.getElementsByTagName('script')[0]; - c.type = 'text/javascript'; - c.async = true; - c.id = 'ARK_SDK'; - c.src = 'https://design.yonyoucloud.com/static/analytics/yiguan/latest/AnalysysAgent_JS_SDK.min.js' + '?v=' + (+new Date()); - c.onload = function () { - window.AnalysysAgent.init(config) - } - n.parentNode.insertBefore(c, n); -})({ - appkey: '4d0f00f6b5fab47d', //姝e紡鐜 - uploadURL: 'https://art.diwork.com', - debugMode: 2, - autoPageViewDuration: true, //自动上报页面关闭事件 - crossSubdomainSuper: (function(){ - var origin = window.location.origin; - var YS_URL_OBJ = { - 'https://yonsuite.diwork.com': true, // YS姝e紡鐜鍦板潃 - 'https://www.diwork.com': true, // YB鐨刣iwork鐜鍦板潃 - 'https://yonbip.yonyou.com': true, // YB姝e紡鐜鍦板潃 - } - if (YS_URL_OBJ[origin]) { - return true - } else { - return false - } - })(), - visitorConfigURL: 'https://art.diwork.com' -}) \ No newline at end of file diff --git a/demo/jquery/style/console.js b/demo/jquery/style/console.js deleted file mode 100755 index e4160dc..0000000 --- a/demo/jquery/style/console.js +++ /dev/null @@ -1,16 +0,0 @@ -console.oldLog = console.log -console.log = a = function () { - if (console.constructor === Object && console.log) { - try { - console.oldLog.apply(console, arguments); - } catch (e) { - console.oldLog(arguments[0]); - } - } - // console.log(arguments) - if (arguments[0] && arguments[0].constructor === String && arguments[0].indexOf("Send") > -1) { - try { - document.getElementById("upLog").innerText = arguments[0] - } catch (e) {} - } -} \ No newline at end of file diff --git a/demo/jquery/style/index.js b/demo/jquery/style/index.js deleted file mode 100755 index ce3bc18..0000000 --- a/demo/jquery/style/index.js +++ /dev/null @@ -1,157 +0,0 @@ -/** - * [pageView description] 页面事件 - * @param {[String]} pageName [description] 页面标识,支持类型:String;最大长度255字符 - * @param {[Object]} pageInfo [description] 页面信息,支持类型:Object/Array;页面信息最多包含100条;Object类型内key以字母或$开头,包括大小写字母、数字、下划线和$,最大长度125字符,不支持乱码和中文;Object/Array中的value,支持类型:String;则最大长度255字符 - */ -function pageView(pageName, pageInfo) { - AnalysysAgent.pageView(pageName, pageInfo) -} -/** - * [track description] 点击事件 - * @param {[String]} eventName [description] 事件名称。支持类型:String。以字母或$开头,可以包含大小写字母/数字/下划线,不支持中文,不支持乱码,最大长度99字符。 - * @param {[Object]} eventInfo [description] 事件属性,支持类型:Object/Array;事件属性最多包含100条;Object类型内key以字母或$开头,包括大小写字母、数字、下划线和$,最大长度125字符,不支持乱码和中文;Object/Array中的value,支持类型:String;则最大长度255字符 - */ -function track(eventName, eventInfo) { - AnalysysAgent.track(eventName, eventInfo); -} -/** - * [registerSuperProperty description] 注册通用属性 - * @param {[String]} uperPropertyName [description] 属性名称 支持类型:String。以字母或$开头,可以包含大小写字母/数字/下划线,不支持中文,不支持乱码,最大长度99字符。 - * @param {[String]} superPropertyValue [description] 事件属性,支持类型:String;则最大长度255字符 - */ -function registerSuperProperty(superPropertyName, superPropertyValue) { - AnalysysAgent.registerSuperProperty(superPropertyName, superPropertyValue); -} - -/** - * [registerSuperProperties description] 注册通用属性 - * @param {[Object]} superProperties [description] 属性集合 支持类型:Object。key以字母或$开头,可以包含大小写字母/数字/下划线,不支持中文,不支持乱码,最大长度99字符,value支持类型:String;则最大长度255字符。 - */ -function registerSuperProperties(superProperties) { - AnalysysAgent.registerSuperProperties(superProperties); -} -/** - * [unregisterSuperProperty description] 删除单个通用属性 - * @param {[Object]} superPropertyName [description] 属性名称 支持类型:String。以字母或$开头,可以包含大小写字母/数字/下划线,不支持中文,不支持乱码,最大长度99字符。 - */ -function unRegisterSuperProperty(superPropertyName) { - AnalysysAgent.unRegisterSuperProperty(superPropertyName); -} -/** - * [clearSuperProperties description] 清除所有通用属性 - */ -function clearSuperProperties() { - AnalysysAgent.clearSuperProperties(); -} -/** - * [clearSuperProperties description] 获取单个通用属性 - */ -function getSuperProperty(superPropertyName) { - var superProperty = AnalysysAgent.getSuperProperty(superPropertyName); - console.log('获取单个通用属性[' + superPropertyName + ']:', superProperty) -} -/** - * [clearSuperProperties description] 获取所有通用属性 - */ -function getSuperProperties() { - var superProperties = AnalysysAgent.getSuperProperties(); - console.log('获取所有通用属性:', superProperties) -} -/** - * [identify description] 用户ID设置 - * @param {[String]} distinctId [description] 唯一身份标识,支持类型:String;长度大于0且小于255字符 - */ -function identify(distinctId) { - AnalysysAgent.identify(distinctId); -} -/** - * [alias description]用户关联 新distinctID关联到原有originalID,originalID为原始id. - * @param {[String]} aliasId [description] 支持类型:String;长度大于0,且小于255字符 - */ -function alias(aliasId) { - AnalysysAgent.alias(aliasId); -} -/** - * [profileSet description] 设置用户属性 - * @param {[String]} propertyName [description] 支持类型:String;以字母或`$`开头,可包含大小写字母/数字/`_`/`$`,最大长度125字符,不支持乱码和中文 - * @param {[String/Number/Boolean/Array]} propertyValue [description]支持类型:String/Number/Boolean/Array;若为字符串,则最大长度255字符;若为数组或集合,则最多包含100条,且key约束条件与属性名称一致,value最大长度255字符 - */ -function profileSet(propertyName, propertyValue) { - AnalysysAgent.profileSet(propertyName, propertyValue); -} -/** - * [profileSetOnce description] 在首次设置时有效的属性 - * @param {[String]} propertyName [description] 支持类型:String;以字母或`$`开头,可包含大小写字母/数字/`_`/`$`,最大长度125字符,不支持乱码和中文 - * @param {[String/Number/Boolean/Array]} propertyValue [description] 支持类型:String/Number/Boolean/Array;若为字符串,则最大长度255字符;若为数组或集合,则最多包含100条,且key约束条件与属性名称一致,value最大长度255字符 - */ -function profileSetOnce(propertyName, propertyValue) { - AnalysysAgent.profileSetOnce(propertyName, propertyValue); -} -/** - * [profileIncrement description] 设置用户属性相对变化值 - * @param {[String]} propertyName [description] 属性名称 支持类型:String;以字母或`$`开头,可包含大小写字母/数字/`_`/`$`,最大长度125字符,不支持乱码和中文 - * @param {[String/Number/Boolean/Array]} propertyValue [description] 属性值 支持类型:String/Number/Boolean/Array;若为字符串,则最大长度255字符;若为数组或集合,则最多包含100条,且key约束条件与属性名称一致,value最大长度255字符 - */ -function profileIncrement(propertyName, propertyValue) { - AnalysysAgent.profileIncrement(propertyName, propertyValue) -} -/** - * [profileAppend description]设置单个列表类型的属性 - * @param {[String]} propertyName [description] 属性名称 支持类型:String;以字母或`$`开头,可包含大小写字母/数字/`_`/`$`,最大长度125字符,不支持乱码和中文 - * @param {[String/Number/Boolean]} propertyValue [description] 属性值 支持类型:String/Number/Boolean;最大长度255字符; - */ -function profileAppend(propertyName, propertyValue) { - AnalysysAgent.profileAppend(propertyName, propertyValue); -} -/** - * [profileUnset description] 删除设置的属性 - * @param {[String]} property [description] 属性名称 支持类型:String;以字母或`$`开头,可包含大小写字母/数字/`_`/`$`,最大长度125字符,不支持乱码和中文 - */ -function profileUnset(property) { - AnalysysAgent.profileUnset(property); -} -/** - * [profileDelete description] 要清除已经设置的所有属性 - */ -function profileDelete() { - AnalysysAgent.profileDelete(); -} -/** - * [reset description] 清除本地设置 - */ -function reset() { - AnalysysAgent.reset(); -} - -/** - * [historyPage description] 修改history记录跳转页面 - * @param {[String]} page [description] 跳转页面地址 - */ -function historyPage(page) { - document.title = 'historyPage' //跳转后的页面title - history.pushState(null, null, page) -} -/** - * [historyPage description] 修改hash值跳转页面 - * @param {[String]} page [description] 跳转页面地址 - */ -function hashPage(page) { - document.title = 'hashPage' - location.href = page -} - -/** - * 获取预置属性 - */ -function getPresetProperties() { - var presetProperties = AnalysysAgent.getPresetProperties() - console.log('获取预置属性:', presetProperties) -} - -/** - * 获取匿名ID - */ -function getDistinctId() { - var distinctId = AnalysysAgent.getDistinctId() - console.log("匿名ID:" + distinctId) -} \ No newline at end of file diff --git a/demo/jquery/style/plugIn/JSON.js b/demo/jquery/style/plugIn/JSON.js deleted file mode 100755 index cfa8f42..0000000 --- a/demo/jquery/style/plugIn/JSON.js +++ /dev/null @@ -1,506 +0,0 @@ -// json2.js -// 2016-10-28 -// Public Domain. -// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -// See http://www.JSON.org/js.html -// This code should be minified before deployment. -// See http://javascript.crockford.com/jsmin.html - -// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO -// NOT CONTROL. - -// This file creates a global JSON object containing two methods: stringify -// and parse. This file provides the ES5 JSON capability to ES3 systems. -// If a project might run on IE8 or earlier, then this file should be included. -// This file does nothing on ES5 systems. - -// JSON.stringify(value, replacer, space) -// value any JavaScript value, usually an object or array. -// replacer an optional parameter that determines how object -// values are stringified for objects. It can be a -// function or an array of strings. -// space an optional parameter that specifies the indentation -// of nested structures. If it is omitted, the text will -// be packed without extra whitespace. If it is a number, -// it will specify the number of spaces to indent at each -// level. If it is a string (such as "\t" or " "), -// it contains the characters used to indent at each level. -// This method produces a JSON text from a JavaScript value. -// When an object value is found, if the object contains a toJSON -// method, its toJSON method will be called and the result will be -// stringified. A toJSON method does not serialize: it returns the -// value represented by the name/value pair that should be serialized, -// or undefined if nothing should be serialized. The toJSON method -// will be passed the key associated with the value, and this will be -// bound to the value. - -// For example, this would serialize Dates as ISO strings. - -// Date.prototype.toJSON = function (key) { -// function f(n) { -// // Format integers to have at least two digits. -// return (n < 10) -// ? "0" + n -// : n; -// } -// return this.getUTCFullYear() + "-" + -// f(this.getUTCMonth() + 1) + "-" + -// f(this.getUTCDate()) + "T" + -// f(this.getUTCHours()) + ":" + -// f(this.getUTCMinutes()) + ":" + -// f(this.getUTCSeconds()) + "Z"; -// }; - -// You can provide an optional replacer method. It will be passed the -// key and value of each member, with this bound to the containing -// object. The value that is returned from your method will be -// serialized. If your method returns undefined, then the member will -// be excluded from the serialization. - -// If the replacer parameter is an array of strings, then it will be -// used to select the members to be serialized. It filters the results -// such that only members with keys listed in the replacer array are -// stringified. - -// Values that do not have JSON representations, such as undefined or -// functions, will not be serialized. Such values in objects will be -// dropped; in arrays they will be replaced with null. You can use -// a replacer function to replace those with JSON values. - -// JSON.stringify(undefined) returns undefined. - -// The optional space parameter produces a stringification of the -// value that is filled with line breaks and indentation to make it -// easier to read. - -// If the space parameter is a non-empty string, then that string will -// be used for indentation. If the space parameter is a number, then -// the indentation will be that many spaces. - -// Example: - -// text = JSON.stringify(["e", {pluribus: "unum"}]); -// // text is '["e",{"pluribus":"unum"}]' - -// text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t"); -// // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - -// text = JSON.stringify([new Date()], function (key, value) { -// return this[key] instanceof Date -// ? "Date(" + this[key] + ")" -// : value; -// }); -// // text is '["Date(---current time---)"]' - -// JSON.parse(text, reviver) -// This method parses a JSON text to produce an object or array. -// It can throw a SyntaxError exception. - -// The optional reviver parameter is a function that can filter and -// transform the results. It receives each of the keys and values, -// and its return value is used instead of the original value. -// If it returns what it received, then the structure is not modified. -// If it returns undefined then the member is deleted. - -// Example: - -// // Parse the text. Values that look like ISO date strings will -// // be converted to Date objects. - -// myData = JSON.parse(text, function (key, value) { -// var a; -// if (typeof value === "string") { -// a = -// /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); -// if (a) { -// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], -// +a[5], +a[6])); -// } -// } -// return value; -// }); - -// myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { -// var d; -// if (typeof value === "string" && -// value.slice(0, 5) === "Date(" && -// value.slice(-1) === ")") { -// d = new Date(value.slice(5, -1)); -// if (d) { -// return d; -// } -// } -// return value; -// }); - -// This is a reference implementation. You are free to copy, modify, or -// redistribute. - -/*jslint - eval, for, this -*/ - -/*property - JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== "object") { - JSON = {}; -} - -(function () { - "use strict"; - - var rx_one = /^[\],:{}\s]*$/; - var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; - var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; - var rx_four = /(?:^|:|,)(?:\s*\[)+/g; - var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 - ? "0" + n - : n; - } - - function this_value() { - return this.valueOf(); - } - - if (typeof Date.prototype.toJSON !== "function") { - - Date.prototype.toJSON = function () { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + "-" + - f(this.getUTCMonth() + 1) + "-" + - f(this.getUTCDate()) + "T" + - f(this.getUTCHours()) + ":" + - f(this.getUTCMinutes()) + ":" + - f(this.getUTCSeconds()) + "Z" - : null; - }; - - Boolean.prototype.toJSON = this_value; - Number.prototype.toJSON = this_value; - String.prototype.toJSON = this_value; - } - - var gap; - var indent; - var meta; - var rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - rx_escapable.lastIndex = 0; - return rx_escapable.test(string) - ? "\"" + string.replace(rx_escapable, function (a) { - var c = meta[a]; - return typeof c === "string" - ? c - : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }) + "\"" - : "\"" + string + "\""; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i; // The loop counter. - var k; // The member key. - var v; // The member value. - var length; - var mind = gap; - var partial; - var value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === "object" && - typeof value.toJSON === "function") { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === "function") { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case "string": - return quote(value); - - case "number": - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) - ? String(value) - : "null"; - - case "boolean": - case "null": - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce "null". The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is "object", we might be dealing with an object or an array or -// null. - - case "object": - -// Due to a specification blunder in ECMAScript, typeof null is "object", -// so watch out for that case. - - if (!value) { - return "null"; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === "[object Array]") { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || "null"; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? "[]" - : gap - ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" - : "[" + partial.join(",") + "]"; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === "object") { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === "string") { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? "{}" - : gap - ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" - : "{" + partial.join(",") + "}"; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== "function") { - meta = { // table of character substitutions - "\b": "\\b", - "\t": "\\t", - "\n": "\\n", - "\f": "\\f", - "\r": "\\r", - "\"": "\\\"", - "\\": "\\\\" - }; - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ""; - indent = ""; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === "number") { - for (i = 0; i < space; i += 1) { - indent += " "; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === "string") { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== "function" && - (typeof replacer !== "object" || - typeof replacer.length !== "number")) { - throw new Error("JSON.stringify"); - } - -// Make a fake root object containing our value under the key of "". -// Return the result of stringifying the value. - - return str("", {"": value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== "function") { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k; - var v; - var value = holder[key]; - if (value && typeof value === "object") { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - rx_dangerous.lastIndex = 0; - if (rx_dangerous.test(text)) { - text = text.replace(rx_dangerous, function (a) { - return "\\u" + - ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with "()" and "new" -// because they can cause invocation, and "=" because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with "@" (a non-JSON character). Second, we -// replace all simple value tokens with "]" characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or "]" or -// "," or ":" or "{" or "}". If that is so, then the text is safe for eval. - - if ( - rx_one.test( - text - .replace(rx_two, "@") - .replace(rx_three, "]") - .replace(rx_four, "") - ) - ) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The "{" operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval("(" + text + ")"); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return (typeof reviver === "function") - ? walk({"": j}, "") - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError("JSON.parse"); - }; - } -}()); \ No newline at end of file diff --git a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css b/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css deleted file mode 100755 index ec5fdf4..0000000 --- a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css +++ /dev/null @@ -1,587 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-default.disabled, -.btn-primary.disabled, -.btn-success.disabled, -.btn-info.disabled, -.btn-warning.disabled, -.btn-danger.disabled, -.btn-default[disabled], -.btn-primary[disabled], -.btn-success[disabled], -.btn-info[disabled], -.btn-warning[disabled], -.btn-danger[disabled], -fieldset[disabled] .btn-default, -fieldset[disabled] .btn-primary, -fieldset[disabled] .btn-success, -fieldset[disabled] .btn-info, -fieldset[disabled] .btn-warning, -fieldset[disabled] .btn-danger { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default .badge, -.btn-primary .badge, -.btn-success .badge, -.btn-info .badge, -.btn-warning .badge, -.btn-danger .badge { - text-shadow: none; -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #e0e0e0; - background-image: none; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #245580; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #265a88; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #265a88; - border-color: #245580; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #265a88; - background-image: none; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #419641; - background-image: none; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #2aabd2; - background-image: none; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #eb9316; - background-image: none; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #2e6da4; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -@media (max-width: 767px) { - .navbar .navbar-nav .open .dropdown-menu > .active > a, - .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); - background-repeat: repeat-x; - border-color: #2b669a; -} -.list-group-item.active .badge, -.list-group-item.active:hover .badge, -.list-group-item.active:focus .badge { - text-shadow: none; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css.map b/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css.map deleted file mode 100755 index 7535311..0000000 --- a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.min.css b/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.min.css deleted file mode 100755 index 899bdcd..0000000 --- a/demo/jquery/style/plugIn/bootstrap/css/bootstrap-theme.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css b/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css deleted file mode 100755 index fa616e2..0000000 --- a/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css +++ /dev/null @@ -1,6800 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -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; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - margin: .67em 0; - font-size: 2em; -} -mark { - color: #000; - background: #ff0; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -.5em; -} -sub { - bottom: -.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} -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 { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - 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-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} -legend { - padding: 0; - border: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: .01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.333333px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 3; - color: #23527c; - background-color: #eee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - min-height: 16.42857143px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 0; - - line-break: auto; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - - line-break: auto; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: 0; - opacity: .9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css.map b/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css.map deleted file mode 100755 index 9f60ed2..0000000 --- a/demo/jquery/style/plugIn/bootstrap/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,eAAA;CH8O9C;AG7OmC;EAAW,eAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EErDA,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNqkCD;AIxgCD;EACE,UAAA;CJ0gCD;AIpgCD;EACE,uBAAA;CJsgCD;AIlgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CPglCD;AItgCD;EACE,mBAAA;CJwgCD;AIlgCD;EACE,aAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CPgmCD;AIlgCD;EACE,mBAAA;CJogCD;AI9/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJggCD;AIx/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJ0/BD;AIl/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJo/BH;AIz+BD;EACE,gBAAA;CJ2+BD;AQloCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR8oCD;AQnpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRoqCH;AQhqCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRqqCD;AQzqCD;;;;;;;;;;;;EAQI,eAAA;CR+qCH;AQ5qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRirCD;AQrrCD;;;;;;;;;;;;EAQI,eAAA;CR2rCH;AQvrCD;;EAAU,gBAAA;CR2rCT;AQ1rCD;;EAAU,gBAAA;CR8rCT;AQ7rCD;;EAAU,gBAAA;CRisCT;AQhsCD;;EAAU,gBAAA;CRosCT;AQnsCD;;EAAU,gBAAA;CRusCT;AQtsCD;;EAAU,gBAAA;CR0sCT;AQpsCD;EACE,iBAAA;CRssCD;AQnsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRqsCD;AQhsCD;EAAA;IAFI,gBAAA;GRssCD;CACF;AQ9rCD;;EAEE,eAAA;CRgsCD;AQ7rCD;;EAEE,0BAAA;EACA,cAAA;CR+rCD;AQ3rCD;EAAuB,iBAAA;CR8rCtB;AQ7rCD;EAAuB,kBAAA;CRgsCtB;AQ/rCD;EAAuB,mBAAA;CRksCtB;AQjsCD;EAAuB,oBAAA;CRosCtB;AQnsCD;EAAuB,oBAAA;CRssCtB;AQnsCD;EAAuB,0BAAA;CRssCtB;AQrsCD;EAAuB,0BAAA;CRwsCtB;AQvsCD;EAAuB,2BAAA;CR0sCtB;AQvsCD;EACE,eAAA;CRysCD;AQvsCD;ECrGE,eAAA;CT+yCD;AS9yCC;;EAEE,eAAA;CTgzCH;AQ3sCD;ECxGE,eAAA;CTszCD;ASrzCC;;EAEE,eAAA;CTuzCH;AQ/sCD;EC3GE,eAAA;CT6zCD;AS5zCC;;EAEE,eAAA;CT8zCH;AQntCD;EC9GE,eAAA;CTo0CD;ASn0CC;;EAEE,eAAA;CTq0CH;AQvtCD;ECjHE,eAAA;CT20CD;AS10CC;;EAEE,eAAA;CT40CH;AQvtCD;EAGE,YAAA;EE3HA,0BAAA;CVm1CD;AUl1CC;;EAEE,0BAAA;CVo1CH;AQztCD;EE9HE,0BAAA;CV01CD;AUz1CC;;EAEE,0BAAA;CV21CH;AQ7tCD;EEjIE,0BAAA;CVi2CD;AUh2CC;;EAEE,0BAAA;CVk2CH;AQjuCD;EEpIE,0BAAA;CVw2CD;AUv2CC;;EAEE,0BAAA;CVy2CH;AQruCD;EEvIE,0BAAA;CV+2CD;AU92CC;;EAEE,0BAAA;CVg3CH;AQpuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRsuCD;AQ9tCD;;EAEE,cAAA;EACA,oBAAA;CRguCD;AQnuCD;;;;EAMI,iBAAA;CRmuCH;AQ5tCD;EACE,gBAAA;EACA,iBAAA;CR8tCD;AQ1tCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR6tCD;AQ/tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR6tCH;AQxtCD;EACE,cAAA;EACA,oBAAA;CR0tCD;AQxtCD;;EAEE,wBAAA;CR0tCD;AQxtCD;EACE,kBAAA;CR0tCD;AQxtCD;EACE,eAAA;CR0tCD;AQjsCD;EAAA;IAVM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXs6CC;EQ3sCH;IAHM,mBAAA;GRitCH;CACF;AQxsCD;;EAGE,aAAA;EACA,kCAAA;CRysCD;AQvsCD;EACE,eAAA;EA9IqB,0BAAA;CRw1CtB;AQrsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRusCD;AQlsCG;;;EACE,iBAAA;CRssCL;AQhtCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRksCH;AQhsCG;;;EACE,uBAAA;CRosCL;AQ5rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR8rCD;AQxrCG;;;;;;EAAW,YAAA;CRgsCd;AQ/rCG;;;;;;EACE,uBAAA;CRssCL;AQhsCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRksCD;AYx+CD;;;;EAIE,+DAAA;CZ0+CD;AYt+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZw+CD;AYp+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZs+CD;AY5+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZs+CH;AYj+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;CZm+CD;AY9+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZk+CH;AY79CD;EACE,kBAAA;EACA,mBAAA;CZ+9CD;AazhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd+hDD;AazhDC;EAAA;IAFE,aAAA;Gb+hDD;CACF;Aa3hDC;EAAA;IAFE,aAAA;GbiiDD;CACF;Aa7hDD;EAAA;IAFI,cAAA;GbmiDD;CACF;Aa1hDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdojDD;AavhDD;ECvBE,mBAAA;EACA,oBAAA;CdijDD;AejjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfijDL;AejiDG;EACE,YAAA;CfmiDL;Ae5hDC;EACE,YAAA;Cf8hDH;Ae/hDC;EACE,oBAAA;CfiiDH;AeliDC;EACE,oBAAA;CfoiDH;AeriDC;EACE,WAAA;CfuiDH;AexiDC;EACE,oBAAA;Cf0iDH;Ae3iDC;EACE,oBAAA;Cf6iDH;Ae9iDC;EACE,WAAA;CfgjDH;AejjDC;EACE,oBAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,WAAA;CfyjDH;Ae1jDC;EACE,oBAAA;Cf4jDH;Ae7jDC;EACE,mBAAA;Cf+jDH;AejjDC;EACE,YAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,oBAAA;CfyjDH;Ae1jDC;EACE,WAAA;Cf4jDH;Ae7jDC;EACE,oBAAA;Cf+jDH;AehkDC;EACE,oBAAA;CfkkDH;AenkDC;EACE,WAAA;CfqkDH;AetkDC;EACE,oBAAA;CfwkDH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBsrED;AgBzrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,8BAAA;ChBsrEP;AgBpsED;EAoBI,uBAAA;EACA,iCAAA;ChBmrEH;AgBxsED;;;;;;EA8BQ,cAAA;ChBkrEP;AgBhtED;EAoCI,8BAAA;ChB+qEH;AgBntED;EAyCI,0BAAA;ChB6qEH;AgBtqED;;;;;;EAOQ,aAAA;ChBuqEP;AgB5pED;EACE,0BAAA;ChB8pED;AgB/pED;;;;;;EAQQ,0BAAA;ChB+pEP;AgBvqED;;EAeM,yBAAA;ChB4pEL;AgBlpED;EAEI,0BAAA;ChBmpEH;AgB1oED;EAEI,0BAAA;ChB2oEH;AgBloED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBooED;AgB/nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBkoEL;AiB9wEC;;;;;;;;;;;;EAOI,0BAAA;CjBqxEL;AiB/wEC;;;;;EAMI,0BAAA;CjBgxEL;AiBnyEC;;;;;;;;;;;;EAOI,0BAAA;CjB0yEL;AiBpyEC;;;;;EAMI,0BAAA;CjBqyEL;AiBxzEC;;;;;;;;;;;;EAOI,0BAAA;CjB+zEL;AiBzzEC;;;;;EAMI,0BAAA;CjB0zEL;AiB70EC;;;;;;;;;;;;EAOI,0BAAA;CjBo1EL;AiB90EC;;;;;EAMI,0BAAA;CjB+0EL;AiBl2EC;;;;;;;;;;;;EAOI,0BAAA;CjBy2EL;AiBn2EC;;;;;EAMI,0BAAA;CjBo2EL;AgBltED;EACE,iBAAA;EACA,kBAAA;ChBotED;AgBvpED;EAAA;IA1DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,0BAAA;GhBqtED;EgB/pEH;IAlDM,iBAAA;GhBotEH;EgBlqEH;;;;;;IAzCY,oBAAA;GhBmtET;EgB1qEH;IAjCM,UAAA;GhB8sEH;EgB7qEH;;;;;;IAxBY,eAAA;GhB6sET;EgBrrEH;;;;;;IApBY,gBAAA;GhBitET;EgB7rEH;;;;IAPY,iBAAA;GhB0sET;CACF;AkBp6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBm6ED;AkBh6ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBk6ED;AkB/5ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBi6ED;AkBt5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL63ET;AkBt5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBw5ED;AkBr5ED;EACE,eAAA;ClBu5ED;AkBn5ED;EACE,eAAA;EACA,YAAA;ClBq5ED;AkBj5ED;;EAEE,aAAA;ClBm5ED;AkB/4ED;;;EZvEE,qBAAA;EAEA,2CAAA;EACA,qBAAA;CN09ED;AkB/4ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClBi5ED;AkBv3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,0BAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CL0zET;AmBl8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CL27ET;AK15EC;EACE,eAAA;EACA,WAAA;CL45EH;AK15EC;EAA0B,eAAA;CL65E3B;AK55EC;EAAgC,eAAA;CL+5EjC;AkB/3EC;;;EAGE,0BAAA;EACA,WAAA;ClBi4EH;AkB93EC;;EAEE,oBAAA;ClBg4EH;AkB53EC;EACE,aAAA;ClB83EH;AkBl3ED;EACE,yBAAA;ClBo3ED;AkB50ED;EAtBI;;;;IACE,kBAAA;GlBw2EH;EkBr2EC;;;;;;;;IAEE,kBAAA;GlB62EH;EkB12EC;;;;;;;;IAEE,kBAAA;GlBk3EH;CACF;AkBx2ED;EACE,oBAAA;ClB02ED;AkBl2ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBo2ED;AkBz2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBq2EH;AkBl2ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBo2ED;AkBj2ED;;EAEE,iBAAA;ClBm2ED;AkB/1ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2ED;AkB/1ED;;EAEE,cAAA;EACA,kBAAA;ClBi2ED;AkBx1EC;;;;;;EAGE,oBAAA;ClB61EH;AkBv1EC;;;;EAEE,oBAAA;ClB21EH;AkBr1EC;;;;EAGI,oBAAA;ClBw1EL;AkB70ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClB60ED;AkB30EC;;EAEE,gBAAA;EACA,iBAAA;ClB60EH;AkBh0ED;EC7PE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBgkFD;AmB9jFC;EACE,aAAA;EACA,kBAAA;CnBgkFH;AmB7jFC;;EAEE,aAAA;CnB+jFH;AkB50ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClB60EH;AkBn1ED;EASI,aAAA;EACA,kBAAA;ClB60EH;AkBv1ED;;EAcI,aAAA;ClB60EH;AkB31ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClB60EH;AkBz0ED;ECzRE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBqmFD;AmBnmFC;EACE,aAAA;EACA,kBAAA;CnBqmFH;AmBlmFC;;EAEE,aAAA;CnBomFH;AkBr1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBs1EH;AkB51ED;EASI,aAAA;EACA,kBAAA;ClBs1EH;AkBh2ED;;EAcI,aAAA;ClBs1EH;AkBp2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBs1EH;AkB70ED;EAEE,mBAAA;ClB80ED;AkBh1ED;EAMI,sBAAA;ClB60EH;AkBz0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBv0ED;;;;;;;;;;ECpZI,eAAA;CnBuuFH;AkBn1ED;EChZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwrFT;AmBtuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6rFT;AkB71ED;ECtYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBsuFH;AkBl2ED;EChYI,eAAA;CnBquFH;AkBl2ED;;;;;;;;;;ECvZI,eAAA;CnBqwFH;AkB92ED;ECnZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLstFT;AmBpwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2tFT;AkBx3ED;ECzYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBowFH;AkB73ED;ECnYI,eAAA;CnBmwFH;AkB73ED;;;;;;;;;;EC1ZI,eAAA;CnBmyFH;AkBz4ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLovFT;AmBlyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CLyvFT;AkBn5ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBkyFH;AkBx5ED;ECtYI,eAAA;CnBiyFH;AkBp5EC;EACG,UAAA;ClBs5EJ;AkBp5EC;EACG,OAAA;ClBs5EJ;AkB54ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB84ED;AkB3zED;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB63EH;EkBj0EH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB23EH;EkBt0EH;IAhDM,sBAAA;GlBy3EH;EkBz0EH;IA5CM,sBAAA;IACA,uBAAA;GlBw3EH;EkB70EH;;;IAtCQ,YAAA;GlBw3EL;EkBl1EH;IAhCM,YAAA;GlBq3EH;EkBr1EH;IA5BM,iBAAA;IACA,uBAAA;GlBo3EH;EkBz1EH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBi3EH;EkBh2EH;;IAdQ,gBAAA;GlBk3EL;EkBp2EH;;IATM,mBAAA;IACA,eAAA;GlBi3EH;EkBz2EH;IAHM,OAAA;GlB+2EH;CACF;AkBr2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClBk2EH;AkB72ED;;EAiBI,iBAAA;ClBg2EH;AkBj3ED;EJhhBE,mBAAA;EACA,oBAAA;Cdo4FD;AkB90EC;EAAA;IAVI,kBAAA;IACA,iBAAA;IACA,iBAAA;GlB41EH;CACF;AkB53ED;EAwCI,YAAA;ClBu1EH;AkBz0EC;EAAA;IAJM,yBAAA;IACA,gBAAA;GlBi1EL;CACF;AkBv0EC;EAAA;IAJM,iBAAA;IACA,gBAAA;GlB+0EL;CACF;AoBl6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC6CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB4JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL6tFT;AoBr6FG;;;;;;EdrBF,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNi8FD;AoBz6FC;;;EAGE,eAAA;EACA,sBAAA;CpB26FH;AoBx6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLg5FT;AoBx6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CLy5FT;AoBx6FG;;EAEE,qBAAA;CpB06FL;AoBj6FD;EC3DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrB+9FD;AqB79FC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBq+FT;AqBl+FC;;;EAGE,uBAAA;CrBo+FH;AqB/9FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB6+FT;AoB/9FD;ECTI,eAAA;EACA,0BAAA;CrB2+FH;AoBh+FD;EC9DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBiiGD;AqB/hGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuiGT;AqBpiGC;;;EAGE,uBAAA;CrBsiGH;AqBjiGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB+iGT;AoB9hGD;ECZI,eAAA;EACA,0BAAA;CrB6iGH;AoB9hGD;EClEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBmmGD;AqBjmGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBymGT;AqBtmGC;;;EAGE,uBAAA;CrBwmGH;AqBnmGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBinGT;AoB5lGD;EChBI,eAAA;EACA,0BAAA;CrB+mGH;AoB5lGD;ECtEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBqqGD;AqBnqGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB2qGT;AqBxqGC;;;EAGE,uBAAA;CrB0qGH;AqBrqGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBmrGT;AoB1pGD;ECpBI,eAAA;EACA,0BAAA;CrBirGH;AoB1pGD;EC1EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBuuGD;AqBruGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB6uGT;AqB1uGC;;;EAGE,uBAAA;CrB4uGH;AqBvuGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBqvGT;AoBxtGD;ECxBI,eAAA;EACA,0BAAA;CrBmvGH;AoBxtGD;EC9EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrByyGD;AqBvyGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+yGT;AqB5yGC;;;EAGE,uBAAA;CrB8yGH;AqBzyGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBuzGT;AoBtxGD;EC5BI,eAAA;EACA,0BAAA;CrBqzGH;AoBjxGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpBmxGD;AoBjxGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLuzGT;AoBlxGC;;;;EAIE,0BAAA;CpBoxGH;AoBlxGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpBoxGH;AoBhxGG;;;;EAEE,eAAA;EACA,sBAAA;CpBoxGL;AoB3wGD;;ECrEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBo1GD;AoB9wGD;;ECzEE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrB21GD;AoBjxGD;;EC7EE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBk2GD;AoBhxGD;EACE,eAAA;EACA,YAAA;CpBkxGD;AoB9wGD;EACE,gBAAA;CpBgxGD;AoBzwGC;;;EACE,YAAA;CpB6wGH;AuBv6GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLsvGT;AuB16GC;EACE,WAAA;CvB46GH;AuBx6GD;EACE,cAAA;CvB06GD;AuBx6GC;EAAY,eAAA;CvB26Gb;AuB16GC;EAAY,mBAAA;CvB66Gb;AuB56GC;EAAY,yBAAA;CvB+6Gb;AuB56GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CLgwGT;AwB18GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxB48GD;AwBx8GD;;EAEE,mBAAA;CxB08GD;AwBt8GD;EACE,WAAA;CxBw8GD;AwBp8GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,0BAAA;EACA,0BAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBu8GD;AwBl8GC;EACE,SAAA;EACA,WAAA;CxBo8GH;AwB79GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBy/GD;AwBn+GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBm8GH;AwB77GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB+7GH;AwBz7GC;;;EAGE,eAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxB27GH;AwBl7GC;;;EAGE,eAAA;CxBo7GH;AwBh7GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxBk7GH;AwB76GD;EAGI,eAAA;CxB66GH;AwBh7GD;EAQI,WAAA;CxB26GH;AwBn6GD;EACE,WAAA;EACA,SAAA;CxBq6GD;AwB75GD;EACE,QAAA;EACA,YAAA;CxB+5GD;AwB35GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB65GD;AwBz5GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxB25GD;AwBv5GD;EACE,SAAA;EACA,WAAA;CxBy5GD;AwBj5GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxBi5GH;AwBx5GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxBi5GH;AwB53GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB+8GC;EwB54GD;IA1DA,QAAA;IACA,YAAA;GxBy8GC;CACF;A2BzlHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3B2lHD;A2B/lHD;;EAMI,mBAAA;EACA,YAAA;C3B6lHH;A2B3lHG;;;;;;;;EAIE,WAAA;C3BimHL;A2B3lHD;;;;EAKI,kBAAA;C3B4lHH;A2BvlHD;EACE,kBAAA;C3BylHD;A2B1lHD;;;EAOI,YAAA;C3BwlHH;A2B/lHD;;;EAYI,iBAAA;C3BwlHH;A2BplHD;EACE,iBAAA;C3BslHD;A2BllHD;EACE,eAAA;C3BolHD;A2BnlHC;EClDA,8BAAA;EACG,2BAAA;C5BwoHJ;A2BllHD;;EC/CE,6BAAA;EACG,0BAAA;C5BqoHJ;A2BjlHD;EACE,YAAA;C3BmlHD;A2BjlHD;EACE,iBAAA;C3BmlHD;A2BjlHD;;ECnEE,8BAAA;EACG,2BAAA;C5BwpHJ;A2BhlHD;ECjEE,6BAAA;EACG,0BAAA;C5BopHJ;A2B/kHD;;EAEE,WAAA;C3BilHD;A2BhkHD;EACE,kBAAA;EACA,mBAAA;C3BkkHD;A2BhkHD;EACE,mBAAA;EACA,oBAAA;C3BkkHD;A2B7jHD;EtB/CE,yDAAA;EACQ,iDAAA;CL+mHT;A2B7jHC;EtBnDA,yBAAA;EACQ,iBAAA;CLmnHT;A2B1jHD;EACE,eAAA;C3B4jHD;A2BzjHD;EACE,wBAAA;EACA,uBAAA;C3B2jHD;A2BxjHD;EACE,wBAAA;C3B0jHD;A2BnjHD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3BojHH;A2B3jHD;EAcM,YAAA;C3BgjHL;A2B9jHD;;;;EAsBI,iBAAA;EACA,eAAA;C3B8iHH;A2BziHC;EACE,iBAAA;C3B2iHH;A2BziHC;EACE,6BAAA;ECpKF,8BAAA;EACC,6BAAA;C5BgtHF;A2B1iHC;EACE,+BAAA;EChLF,2BAAA;EACC,0BAAA;C5B6tHF;A2B1iHD;EACE,iBAAA;C3B4iHD;A2B1iHD;;EC/KE,8BAAA;EACC,6BAAA;C5B6tHF;A2BziHD;EC7LE,2BAAA;EACC,0BAAA;C5ByuHF;A2BriHD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3BuiHD;A2B3iHD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3BwiHH;A2BjjHD;EAYI,YAAA;C3BwiHH;A2BpjHD;EAgBI,WAAA;C3BuiHH;A2BthHD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3BuhHL;A6BjwHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BmwHD;A6BhwHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7BkwHH;A6B3wHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7B0vHH;A6BjvHD;;;EV8BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwtHD;AmBttHC;;;EACE,aAAA;EACA,kBAAA;CnB0tHH;AmBvtHC;;;;;;EAEE,aAAA;CnB6tHH;A6BnwHD;;;EVyBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+uHD;AmB7uHC;;;EACE,aAAA;EACA,kBAAA;CnBivHH;AmB9uHC;;;;;;EAEE,aAAA;CnBovHH;A6BjxHD;;;EAGE,oBAAA;C7BmxHD;A6BjxHC;;;EACE,iBAAA;C7BqxHH;A6BjxHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7BmxHD;A6B9wHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;C7BgxHD;A6B7wHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6B7wHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6BnyHD;;EA0BI,cAAA;C7B6wHH;A6BxwHD;;;;;;;EDhGE,8BAAA;EACG,2BAAA;C5Bi3HJ;A6BzwHD;EACE,gBAAA;C7B2wHD;A6BzwHD;;;;;;;EDpGE,6BAAA;EACG,0BAAA;C5Bs3HJ;A6B1wHD;EACE,eAAA;C7B4wHD;A6BvwHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BuwHD;A6B5wHD;EAUI,mBAAA;C7BqwHH;A6B/wHD;EAYM,kBAAA;C7BswHL;A6BnwHG;;;EAGE,WAAA;C7BqwHL;A6BhwHC;;EAGI,mBAAA;C7BiwHL;A6B9vHC;;EAGI,WAAA;EACA,kBAAA;C7B+vHL;A8B15HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B45HD;A8B/5HD;EAOI,mBAAA;EACA,eAAA;C9B25HH;A8Bn6HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B25HL;A8B15HK;;EAEE,sBAAA;EACA,0BAAA;C9B45HP;A8Bv5HG;EACE,eAAA;C9By5HL;A8Bv5HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By5HP;A8Bl5HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo5HL;A8B77HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm8HD;A8Bn8HD;EA0DI,gBAAA;C9B44HH;A8Bn4HD;EACE,iCAAA;C9Bq4HD;A8Bt4HD;EAGI,YAAA;EAEA,oBAAA;C9Bq4HH;A8B14HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo4HL;A8Bn4HK;EACE,sCAAA;C9Bq4HP;A8B/3HK;;;EAGE,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,iCAAA;EACA,gBAAA;C9Bi4HP;A8B53HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6yHD;A8Bh4HC;EAwDE,YAAA;C9B20HH;A8Bn4HC;EA0DI,mBAAA;EACA,mBAAA;C9B40HL;A8Bv4HC;EAgEE,UAAA;EACA,WAAA;C9B00HH;A8B9zHD;EAAA;IAPM,oBAAA;IACA,UAAA;G9By0HH;E8Bn0HH;IAJQ,iBAAA;G9B00HL;CACF;A8Bp5HC;EAuFE,gBAAA;EACA,mBAAA;C9Bg0HH;A8Bx5HC;;;EA8FE,0BAAA;C9B+zHH;A8BjzHD;EAAA;IATM,iCAAA;IACA,2BAAA;G9B8zHH;E8BtzHH;;;IAHM,6BAAA;G9B8zHH;CACF;A8B/5HD;EAEI,YAAA;C9Bg6HH;A8Bl6HD;EAMM,mBAAA;C9B+5HL;A8Br6HD;EASM,iBAAA;C9B+5HL;A8B15HK;;;EAGE,eAAA;EACA,0BAAA;C9B45HP;A8Bp5HD;EAEI,YAAA;C9Bq5HH;A8Bv5HD;EAIM,gBAAA;EACA,eAAA;C9Bs5HL;A8B14HD;EACE,YAAA;C9B44HD;A8B74HD;EAII,YAAA;C9B44HH;A8Bh5HD;EAMM,mBAAA;EACA,mBAAA;C9B64HL;A8Bp5HD;EAYI,UAAA;EACA,WAAA;C9B24HH;A8B/3HD;EAAA;IAPM,oBAAA;IACA,UAAA;G9B04HH;E8Bp4HH;IAJQ,iBAAA;G9B24HL;CACF;A8Bn4HD;EACE,iBAAA;C9Bq4HD;A8Bt4HD;EAKI,gBAAA;EACA,mBAAA;C9Bo4HH;A8B14HD;;;EAYI,0BAAA;C9Bm4HH;A8Br3HD;EAAA;IATM,iCAAA;IACA,2BAAA;G9Bk4HH;E8B13HH;;;IAHM,6BAAA;G9Bk4HH;CACF;A8Bz3HD;EAEI,cAAA;C9B03HH;A8B53HD;EAKI,eAAA;C9B03HH;A8Bj3HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8lIF;A+BxlID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0lID;A+BllID;EAAA;IAFI,mBAAA;G/BwlID;CACF;A+BzkID;EAAA;IAFI,YAAA;G/B+kID;CACF;A+BjkID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkkID;A+BhkIC;EACE,iBAAA;C/BkkIH;A+BtiID;EAAA;IAxBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkkID;E+BhkIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkkIH;E+B/jIC;IACE,oBAAA;G/BikIH;E+B5jIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8jIH;CACF;A+B1jID;;EAGI,kBAAA;C/B2jIH;A+BtjIC;EAAA;;IAFI,kBAAA;G/B6jIH;CACF;A+BpjID;;;;EAII,oBAAA;EACA,mBAAA;C/BsjIH;A+BhjIC;EAAA;;;;IAHI,gBAAA;IACA,eAAA;G/B0jIH;CACF;A+B9iID;EACE,cAAA;EACA,sBAAA;C/BgjID;A+B3iID;EAAA;IAFI,iBAAA;G/BijID;CACF;A+B7iID;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+iID;A+BziID;EAAA;;IAFI,iBAAA;G/BgjID;CACF;A+B9iID;EACE,OAAA;EACA,sBAAA;C/BgjID;A+B9iID;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BgjID;A+B1iID;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4iID;A+B1iIC;;EAEE,sBAAA;C/B4iIH;A+BrjID;EAaI,eAAA;C/B2iIH;A+BliID;EALI;;IAEE,mBAAA;G/B0iIH;CACF;A+BhiID;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/BmiID;A+B/hIC;EACE,WAAA;C/BiiIH;A+B/iID;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B+hIH;A+BrjID;EAyBI,gBAAA;C/B+hIH;A+BzhID;EAAA;IAFI,cAAA;G/B+hID;CACF;A+BthID;EACE,oBAAA;C/BwhID;A+BzhID;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/BwhIH;A+B5/HC;EAAA;IAtBI,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/BshIH;E+BtgID;;IAbM,2BAAA;G/BuhIL;E+B1gID;IAVM,kBAAA;G/BuhIL;E+BthIK;;IAEE,uBAAA;G/BwhIP;CACF;A+BtgID;EAAA;IAXI,YAAA;IACA,UAAA;G/BqhID;E+B3gIH;IAPM,YAAA;G/BqhIH;E+B9gIH;IALQ,kBAAA;IACA,qBAAA;G/BshIL;CACF;A+B3gID;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4yID;AkB5xHD;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB81HH;EkBlyHH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB41HH;EkBvyHH;IAhDM,sBAAA;GlB01HH;EkB1yHH;IA5CM,sBAAA;IACA,uBAAA;GlBy1HH;EkB9yHH;;;IAtCQ,YAAA;GlBy1HL;EkBnzHH;IAhCM,YAAA;GlBs1HH;EkBtzHH;IA5BM,iBAAA;IACA,uBAAA;GlBq1HH;EkB1zHH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBk1HH;EkBj0HH;;IAdQ,gBAAA;GlBm1HL;EkBr0HH;;IATM,mBAAA;IACA,eAAA;GlBk1HH;EkB10HH;IAHM,OAAA;GlBg1HH;CACF;A+BpjIC;EAAA;IANI,mBAAA;G/B8jIH;E+B5jIG;IACE,iBAAA;G/B8jIL;CACF;A+B7iID;EAAA;IARI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmzIP;CACF;A+BnjID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B03IF;A+BnjID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By3IF;A+B/iID;EChVE,gBAAA;EACA,mBAAA;ChCk4ID;A+BhjIC;ECnVA,iBAAA;EACA,oBAAA;ChCs4ID;A+BjjIC;ECtVA,iBAAA;EACA,oBAAA;ChC04ID;A+B3iID;EChWE,iBAAA;EACA,oBAAA;ChC84ID;A+BviID;EAAA;IAJI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+iID;CACF;A+BlhID;EAhBE;IExWA,uBAAA;GjC84IC;E+BriID;IE5WA,wBAAA;IF8WE,oBAAA;G/BuiID;E+BziID;IAKI,gBAAA;G/BuiIH;CACF;A+B9hID;EACE,0BAAA;EACA,sBAAA;C/BgiID;A+BliID;EAKI,eAAA;C/BgiIH;A+B/hIG;;EAEE,eAAA;EACA,8BAAA;C/BiiIL;A+B1iID;EAcI,eAAA;C/B+hIH;A+B7iID;EAmBM,eAAA;C/B6hIL;A+B3hIK;;EAEE,eAAA;EACA,8BAAA;C/B6hIP;A+BzhIK;;;EAGE,eAAA;EACA,0BAAA;C/B2hIP;A+BvhIK;;;EAGE,eAAA;EACA,8BAAA;C/ByhIP;A+BjkID;EA8CI,sBAAA;C/BshIH;A+BrhIG;;EAEE,0BAAA;C/BuhIL;A+BxkID;EAoDM,0BAAA;C/BuhIL;A+B3kID;;EA0DI,sBAAA;C/BqhIH;A+B9gIK;;;EAGE,0BAAA;EACA,eAAA;C/BghIP;A+B/+HC;EAAA;IAzBQ,eAAA;G/B4gIP;E+B3gIO;;IAEE,eAAA;IACA,8BAAA;G/B6gIT;E+BzgIO;;;IAGE,eAAA;IACA,0BAAA;G/B2gIT;E+BvgIO;;;IAGE,eAAA;IACA,8BAAA;G/BygIT;CACF;A+B3mID;EA8GI,eAAA;C/BggIH;A+B//HG;EACE,eAAA;C/BigIL;A+BjnID;EAqHI,eAAA;C/B+/HH;A+B9/HG;;EAEE,eAAA;C/BggIL;A+B5/HK;;;;EAEE,eAAA;C/BggIP;A+Bx/HD;EACE,0BAAA;EACA,sBAAA;C/B0/HD;A+B5/HD;EAKI,eAAA;C/B0/HH;A+Bz/HG;;EAEE,eAAA;EACA,8BAAA;C/B2/HL;A+BpgID;EAcI,eAAA;C/By/HH;A+BvgID;EAmBM,eAAA;C/Bu/HL;A+Br/HK;;EAEE,eAAA;EACA,8BAAA;C/Bu/HP;A+Bn/HK;;;EAGE,eAAA;EACA,0BAAA;C/Bq/HP;A+Bj/HK;;;EAGE,eAAA;EACA,8BAAA;C/Bm/HP;A+B3hID;EA+CI,sBAAA;C/B++HH;A+B9+HG;;EAEE,0BAAA;C/Bg/HL;A+BliID;EAqDM,0BAAA;C/Bg/HL;A+BriID;;EA2DI,sBAAA;C/B8+HH;A+Bx+HK;;;EAGE,0BAAA;EACA,eAAA;C/B0+HP;A+Bn8HC;EAAA;IA/BQ,sBAAA;G/Bs+HP;E+Bv8HD;IA5BQ,0BAAA;G/Bs+HP;E+B18HD;IAzBQ,eAAA;G/Bs+HP;E+Br+HO;;IAEE,eAAA;IACA,8BAAA;G/Bu+HT;E+Bn+HO;;;IAGE,eAAA;IACA,0BAAA;G/Bq+HT;E+Bj+HO;;;IAGE,eAAA;IACA,8BAAA;G/Bm+HT;CACF;A+B3kID;EA+GI,eAAA;C/B+9HH;A+B99HG;EACE,eAAA;C/Bg+HL;A+BjlID;EAsHI,eAAA;C/B89HH;A+B79HG;;EAEE,eAAA;C/B+9HL;A+B39HK;;;;EAEE,eAAA;C/B+9HP;AkCzmJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2mJD;AkChnJD;EAQI,sBAAA;ClC2mJH;AkCnnJD;EAWM,kBAAA;EACA,eAAA;EACA,eAAA;ClC2mJL;AkCxnJD;EAkBI,eAAA;ClCymJH;AmC7nJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+nJD;AmCnoJD;EAOI,gBAAA;CnC+nJH;AmCtoJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,kBAAA;CnCgoJL;AmC9nJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2oJJ;AmC7nJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwpJJ;AmCxnJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CnC4nJL;AmCtnJG;;;;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2nJL;AmClrJD;;;;;;EAkEM,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,oBAAA;CnCwnJL;AmC/mJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8rJL;AoC5rJG;;ERKF,+BAAA;EACG,4BAAA;C5B2rJJ;AoC3rJG;;ERTF,gCAAA;EACG,6BAAA;C5BwsJJ;AmC1nJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8sJL;AoC5sJG;;ERKF,+BAAA;EACG,4BAAA;C5B2sJJ;AoC3sJG;;ERTF,gCAAA;EACG,6BAAA;C5BwtJJ;AqC3tJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6tJD;AqCjuJD;EAOI,gBAAA;CrC6tJH;AqCpuJD;;EAUM,sBAAA;EACA,kBAAA;EACA,0BAAA;EACA,0BAAA;EACA,oBAAA;CrC8tJL;AqC5uJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6tJL;AqCjvJD;;EA2BM,aAAA;CrC0tJL;AqCrvJD;;EAkCM,YAAA;CrCutJL;AqCzvJD;;;;EA2CM,eAAA;EACA,0BAAA;EACA,oBAAA;CrCotJL;AsClwJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCowJD;AsChwJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CtCkwJL;AsC7vJC;EACE,cAAA;CtC+vJH;AsC3vJC;EACE,mBAAA;EACA,UAAA;CtC6vJH;AsCtvJD;ECtCE,0BAAA;CvC+xJD;AuC5xJG;;EAEE,0BAAA;CvC8xJL;AsCzvJD;EC1CE,0BAAA;CvCsyJD;AuCnyJG;;EAEE,0BAAA;CvCqyJL;AsC5vJD;EC9CE,0BAAA;CvC6yJD;AuC1yJG;;EAEE,0BAAA;CvC4yJL;AsC/vJD;EClDE,0BAAA;CvCozJD;AuCjzJG;;EAEE,0BAAA;CvCmzJL;AsClwJD;ECtDE,0BAAA;CvC2zJD;AuCxzJG;;EAEE,0BAAA;CvC0zJL;AsCrwJD;EC1DE,0BAAA;CvCk0JD;AuC/zJG;;EAEE,0BAAA;CvCi0JL;AwCn0JD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCq0JD;AwCl0JC;EACE,cAAA;CxCo0JH;AwCh0JC;EACE,mBAAA;EACA,UAAA;CxCk0JH;AwC/zJC;;EAEE,OAAA;EACA,iBAAA;CxCi0JH;AwC5zJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CxC8zJL;AwCzzJC;;EAEE,eAAA;EACA,0BAAA;CxC2zJH;AwCxzJC;EACE,aAAA;CxC0zJH;AwCvzJC;EACE,kBAAA;CxCyzJH;AwCtzJC;EACE,iBAAA;CxCwzJH;AyCl3JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo3JD;AyCz3JD;;EASI,eAAA;CzCo3JH;AyC73JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm3JH;AyCl4JD;EAmBI,0BAAA;CzCk3JH;AyC/2JC;;EAEE,mBAAA;CzCi3JH;AyCz4JD;EA4BI,gBAAA;CzCg3JH;AyC91JD;EAAA;IAdI,kBAAA;IACA,qBAAA;GzCg3JD;EyC92JC;;IAEE,mBAAA;IACA,oBAAA;GzCg3JH;EyCx2JH;;IAHM,gBAAA;GzC+2JH;CACF;A0C15JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL4uJT;A0Ct6JD;;EAaI,kBAAA;EACA,mBAAA;C1C65JH;A0Cz5JC;;;EAGE,sBAAA;C1C25JH;A0Ch7JD;EA0BI,aAAA;EACA,eAAA;C1Cy5JH;A2Cl7JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Co7JD;A2Cx7JD;EAQI,cAAA;EAEA,eAAA;C3Ck7JH;A2C57JD;EAeI,kBAAA;C3Cg7JH;A2C/7JD;;EAqBI,iBAAA;C3C86JH;A2Cn8JD;EAyBI,gBAAA;C3C66JH;A2Cr6JD;;EAEE,oBAAA;C3Cu6JD;A2Cz6JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cu6JH;A2C/5JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cy9JD;A2Cp6JD;EClDI,0BAAA;C5Cy9JH;A2Cv6JD;EC/CI,eAAA;C5Cy9JH;A2Ct6JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Co+JD;A2C36JD;ECtDI,0BAAA;C5Co+JH;A2C96JD;ECnDI,eAAA;C5Co+JH;A2C76JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C++JD;A2Cl7JD;EC1DI,0BAAA;C5C++JH;A2Cr7JD;ECvDI,eAAA;C5C++JH;A2Cp7JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C0/JD;A2Cz7JD;EC9DI,0BAAA;C5C0/JH;A2C57JD;EC3DI,eAAA;C5C0/JH;A6C5/JD;EACE;IAAQ,4BAAA;G7C+/JP;E6C9/JD;IAAQ,yBAAA;G7CigKP;CACF;A6C9/JD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6CtgKD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6C5/JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CLy9JT;A6C3/JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL62JT;A6Cx/JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C4/JD;A6Cr/JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLqiKT;A6Cl/JD;EErEE,0BAAA;C/C0jKD;A+CvjKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0gKH;A6Ct/JD;EEzEE,0BAAA;C/CkkKD;A+C/jKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkhKH;A6C1/JD;EE7EE,0BAAA;C/C0kKD;A+CvkKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0hKH;A6C9/JD;EEjFE,0BAAA;C/CklKD;A+C/kKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkiKH;AgD1lKD;EAEE,iBAAA;ChD2lKD;AgDzlKC;EACE,cAAA;ChD2lKH;AgDvlKD;;EAEE,QAAA;EACA,iBAAA;ChDylKD;AgDtlKD;EACE,eAAA;ChDwlKD;AgDrlKD;EACE,eAAA;ChDulKD;AgDplKC;EACE,gBAAA;ChDslKH;AgDllKD;;EAEE,mBAAA;ChDolKD;AgDjlKD;;EAEE,oBAAA;ChDmlKD;AgDhlKD;;;EAGE,oBAAA;EACA,oBAAA;ChDklKD;AgD/kKD;EACE,uBAAA;ChDilKD;AgD9kKD;EACE,uBAAA;ChDglKD;AgD5kKD;EACE,cAAA;EACA,mBAAA;ChD8kKD;AgDxkKD;EACE,gBAAA;EACA,iBAAA;ChD0kKD;AiDjoKD;EAEE,oBAAA;EACA,gBAAA;CjDkoKD;AiD1nKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,0BAAA;EACA,0BAAA;CjD2nKD;AiDxnKC;ErB3BA,6BAAA;EACC,4BAAA;C5BspKF;AiDznKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BmpKF;AiDlnKD;;EAEE,eAAA;CjDonKD;AiDtnKD;;EAKI,eAAA;CjDqnKH;AiDjnKC;;;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CjDqnKH;AiDjnKD;EACE,YAAA;EACA,iBAAA;CjDmnKD;AiD9mKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDgnKH;AiDrnKC;;;EASI,eAAA;CjDinKL;AiD1nKC;;;EAYI,eAAA;CjDmnKL;AiD9mKC;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CjDgnKH;AiDtnKC;;;;;;;;;EAYI,eAAA;CjDqnKL;AiDjoKC;;;EAeI,eAAA;CjDunKL;AkDztKC;EACE,eAAA;EACA,0BAAA;ClD2tKH;AkDztKG;;EAEE,eAAA;ClD2tKL;AkD7tKG;;EAKI,eAAA;ClD4tKP;AkDztKK;;;;EAEE,eAAA;EACA,0BAAA;ClD6tKP;AkD3tKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDguKP;AkDtvKC;EACE,eAAA;EACA,0BAAA;ClDwvKH;AkDtvKG;;EAEE,eAAA;ClDwvKL;AkD1vKG;;EAKI,eAAA;ClDyvKP;AkDtvKK;;;;EAEE,eAAA;EACA,0BAAA;ClD0vKP;AkDxvKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD6vKP;AkDnxKC;EACE,eAAA;EACA,0BAAA;ClDqxKH;AkDnxKG;;EAEE,eAAA;ClDqxKL;AkDvxKG;;EAKI,eAAA;ClDsxKP;AkDnxKK;;;;EAEE,eAAA;EACA,0BAAA;ClDuxKP;AkDrxKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD0xKP;AkDhzKC;EACE,eAAA;EACA,0BAAA;ClDkzKH;AkDhzKG;;EAEE,eAAA;ClDkzKL;AkDpzKG;;EAKI,eAAA;ClDmzKP;AkDhzKK;;;;EAEE,eAAA;EACA,0BAAA;ClDozKP;AkDlzKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDuzKP;AiDttKD;EACE,cAAA;EACA,mBAAA;CjDwtKD;AiDttKD;EACE,iBAAA;EACA,iBAAA;CjDwtKD;AmDl1KD;EACE,oBAAA;EACA,0BAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL2xKT;AmDj1KD;EACE,cAAA;CnDm1KD;AmD90KD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5Bq2KF;AmDp1KD;EAMI,eAAA;CnDi1KH;AmD50KD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnD80KD;AmDl1KD;;;;;EAWI,eAAA;CnD80KH;AmDz0KD;EACE,mBAAA;EACA,0BAAA;EACA,8BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bo3KF;AmDn0KD;;EAGI,iBAAA;CnDo0KH;AmDv0KD;;EAMM,oBAAA;EACA,iBAAA;CnDq0KL;AmDj0KG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B24KF;AmD/zKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5By4KF;AmDx1KD;EvB1DE,2BAAA;EACC,0BAAA;C5Bq5KF;AmD3zKD;EAEI,oBAAA;CnD4zKH;AmDzzKD;EACE,oBAAA;CnD2zKD;AmDnzKD;;;EAII,iBAAA;CnDozKH;AmDxzKD;;;EAOM,mBAAA;EACA,oBAAA;CnDszKL;AmD9zKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B26KF;AmDn0KD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDszKP;AmD10KD;;;;;;;;EAwBU,4BAAA;CnD4zKT;AmDp1KD;;;;;;;;EA4BU,6BAAA;CnDk0KT;AmD91KD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bm8KF;AmDn2KD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDg0KP;AmD12KD;;;;;;;;EA8CU,+BAAA;CnDs0KT;AmDp3KD;;;;;;;;EAkDU,gCAAA;CnD40KT;AmD93KD;;;;EA2DI,8BAAA;CnDy0KH;AmDp4KD;;EA+DI,cAAA;CnDy0KH;AmDx4KD;;EAmEI,UAAA;CnDy0KH;AmD54KD;;;;;;;;;;;;EA0EU,eAAA;CnDg1KT;AmD15KD;;;;;;;;;;;;EA8EU,gBAAA;CnD01KT;AmDx6KD;;;;;;;;EAuFU,iBAAA;CnD21KT;AmDl7KD;;;;;;;;EAgGU,iBAAA;CnD41KT;AmD57KD;EAsGI,UAAA;EACA,iBAAA;CnDy1KH;AmD/0KD;EACE,oBAAA;CnDi1KD;AmDl1KD;EAKI,iBAAA;EACA,mBAAA;CnDg1KH;AmDt1KD;EASM,gBAAA;CnDg1KL;AmDz1KD;EAcI,iBAAA;CnD80KH;AmD51KD;;EAkBM,8BAAA;CnD80KL;AmDh2KD;EAuBI,cAAA;CnD40KH;AmDn2KD;EAyBM,iCAAA;CnD60KL;AmDt0KD;EC1PE,sBAAA;CpDmkLD;AoDjkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDmkLH;AoDtkLC;EAMI,0BAAA;CpDmkLL;AoDzkLC;EASI,eAAA;EACA,0BAAA;CpDmkLL;AoDhkLC;EAEI,6BAAA;CpDikLL;AmDr1KD;EC7PE,sBAAA;CpDqlLD;AoDnlLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDqlLH;AoDxlLC;EAMI,0BAAA;CpDqlLL;AoD3lLC;EASI,eAAA;EACA,0BAAA;CpDqlLL;AoDllLC;EAEI,6BAAA;CpDmlLL;AmDp2KD;EChQE,sBAAA;CpDumLD;AoDrmLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDumLH;AoD1mLC;EAMI,0BAAA;CpDumLL;AoD7mLC;EASI,eAAA;EACA,0BAAA;CpDumLL;AoDpmLC;EAEI,6BAAA;CpDqmLL;AmDn3KD;ECnQE,sBAAA;CpDynLD;AoDvnLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDynLH;AoD5nLC;EAMI,0BAAA;CpDynLL;AoD/nLC;EASI,eAAA;EACA,0BAAA;CpDynLL;AoDtnLC;EAEI,6BAAA;CpDunLL;AmDl4KD;ECtQE,sBAAA;CpD2oLD;AoDzoLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2oLH;AoD9oLC;EAMI,0BAAA;CpD2oLL;AoDjpLC;EASI,eAAA;EACA,0BAAA;CpD2oLL;AoDxoLC;EAEI,6BAAA;CpDyoLL;AmDj5KD;ECzQE,sBAAA;CpD6pLD;AoD3pLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6pLH;AoDhqLC;EAMI,0BAAA;CpD6pLL;AoDnqLC;EASI,eAAA;EACA,0BAAA;CpD6pLL;AoD1pLC;EAEI,6BAAA;CpD2pLL;AqD3qLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD6qLD;AqDlrLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD6qLH;AqDxqLD;EACE,uBAAA;CrD0qLD;AqDtqLD;EACE,oBAAA;CrDwqLD;AsDnsLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CL8oLT;AsD7sLD;EASI,mBAAA;EACA,kCAAA;CtDusLH;AsDlsLD;EACE,cAAA;EACA,mBAAA;CtDosLD;AsDlsLD;EACE,aAAA;EACA,mBAAA;CtDosLD;AuD1tLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,6BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBmuLD;AuD3tLC;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB2uLD;AuDvtLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvDytLH;AwD9uLD;EACE,iBAAA;CxDgvLD;AwD5uLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD2uLD;AwDxuLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL2jLT;AwD9uLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLsoLT;AwDlvLD;EACE,mBAAA;EACA,iBAAA;CxDovLD;AwDhvLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDkvLD;AwD9uLD;EACE,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDgvLD;AwD5uLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,0BAAA;CxD8uLD;AwD5uLC;ElCrEA,WAAA;EAGA,yBAAA;CtBkzLD;AwD/uLC;ElCtEA,aAAA;EAGA,0BAAA;CtBszLD;AwD9uLD;EACE,cAAA;EACA,iCAAA;EACA,0BAAA;CxDgvLD;AwD7uLD;EACE,iBAAA;CxD+uLD;AwD3uLD;EACE,UAAA;EACA,wBAAA;CxD6uLD;AwDxuLD;EACE,mBAAA;EACA,cAAA;CxD0uLD;AwDtuLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDwuLD;AwD3uLD;EAQI,iBAAA;EACA,iBAAA;CxDsuLH;AwD/uLD;EAaI,kBAAA;CxDquLH;AwDlvLD;EAiBI,eAAA;CxDouLH;AwD/tLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDiuLD;AwD/sLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD8tLD;EwD5tLD;InDvEA,kDAAA;IACQ,0CAAA;GLsyLP;EwD3tLD;IAAY,aAAA;GxD8tLX;CACF;AwDztLD;EAFE;IAAY,aAAA;GxD+tLX;CACF;AyD92LD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBq4LD;AyD13LC;EnCdA,aAAA;EAGA,0BAAA;CtBy4LD;AyD73LC;EAAW,iBAAA;EAAmB,eAAA;CzDi4L/B;AyDh4LC;EAAW,iBAAA;EAAmB,eAAA;CzDo4L/B;AyDn4LC;EAAW,gBAAA;EAAmB,eAAA;CzDu4L/B;AyDt4LC;EAAW,kBAAA;EAAmB,eAAA;CzD04L/B;AyDt4LD;EACE,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,mBAAA;CzDw4LD;AyDp4LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDs4LD;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,4BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,2BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;A2Dj+LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,0BAAA;EACA,qCAAA;UAAA,6BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLi8LT;A2D5+LC;EAAY,kBAAA;C3D++Lb;A2D9+LC;EAAY,kBAAA;C3Di/Lb;A2Dh/LC;EAAY,iBAAA;C3Dm/Lb;A2Dl/LC;EAAY,mBAAA;C3Dq/Lb;A2Dl/LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Do/LD;A2Dj/LD;EACE,kBAAA;C3Dm/LD;A2D3+LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D6+LH;A2D1+LD;EACE,mBAAA;C3D4+LD;A2D1+LD;EACE,mBAAA;EACA,YAAA;C3D4+LD;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;C3D2+LL;A2Dx+LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,4BAAA;C3D2+LL;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;C3D2+LL;A2Dv+LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3Dy+LH;A2Dx+LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,2BAAA;EACA,cAAA;C3D0+LL;A4DnmMD;EACE,mBAAA;C5DqmMD;A4DlmMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DomMD;A4DvmMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLw7LT;A4D9mMD;;EAcM,eAAA;C5DomML;A4D1kMC;EAAA;IvDiKA,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL69LP;E4DxmMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D2mML;E4DzmMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D4mML;E4D1mMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D6mML;CACF;A4DnpMD;;;EA6CI,eAAA;C5D2mMH;A4DxpMD;EAiDI,QAAA;C5D0mMH;A4D3pMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5DymMH;A4DjqMD;EA4DI,WAAA;C5DwmMH;A4DpqMD;EA+DI,YAAA;C5DwmMH;A4DvqMD;;EAmEI,QAAA;C5DwmMH;A4D3qMD;EAuEI,YAAA;C5DumMH;A4D9qMD;EA0EI,WAAA;C5DumMH;A4D/lMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DkmMD;A4D7lMC;EdlGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CksMH;A4DjmMC;EACE,WAAA;EACA,SAAA;EdvGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C2sMH;A4DnmMC;;EAEE,WAAA;EACA,eAAA;EACA,sBAAA;EtCtHF,aAAA;EAGA,0BAAA;CtB0tMD;A4DpoMD;;;;EAsCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DomMH;A4D9oMD;;EA8CI,UAAA;EACA,mBAAA;C5DomMH;A4DnpMD;;EAmDI,WAAA;EACA,oBAAA;C5DomMH;A4DxpMD;;EAwDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DomMH;A4D/lMG;EACE,iBAAA;C5DimML;A4D7lMG;EACE,iBAAA;C5D+lML;A4DrlMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DulMD;A4DhmMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D6kMH;A4D5mMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,0BAAA;C5D6kMH;A4DtkMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DwkMD;A4DvkMC;EACE,kBAAA;C5DykMH;A4DhiMD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DkkMH;E4D1kMD;;IAYI,mBAAA;G5DkkMH;E4D9kMD;;IAgBI,oBAAA;G5DkkMH;E4D7jMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5D+jMD;E4D3jMD;IACE,aAAA;G5D6jMD;CACF;A6D3zMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7Dy1MH;A6Dv1MC;;;;;;;;;;;;;;;EACE,YAAA;C7Du2MH;AiC/2MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D03MD;AiCj3MD;EACE,wBAAA;CjCm3MD;AiCj3MD;EACE,uBAAA;CjCm3MD;AiC32MD;EACE,yBAAA;CjC62MD;AiC32MD;EACE,0BAAA;CjC62MD;AiC32MD;EACE,mBAAA;CjC62MD;AiC32MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/Du4MD;AiCz2MD;EACE,yBAAA;CjC22MD;AiCp2MD;EACE,gBAAA;CjCs2MD;AgEv4MD;EACE,oBAAA;ChEy4MD;AgEn4MD;;;;ECdE,yBAAA;CjEu5MD;AgEl4MD;;;;;;;;;;;;EAYE,yBAAA;ChEo4MD;AgE73MD;EAAA;IChDE,0BAAA;GjEi7MC;EiEh7MD;IAAU,0BAAA;GjEm7MT;EiEl7MD;IAAU,8BAAA;GjEq7MT;EiEp7MD;;IACU,+BAAA;GjEu7MT;CACF;AgEv4MD;EAAA;IAFI,0BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,2BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,iCAAA;GhE64MD;CACF;AgEt4MD;EAAA;ICrEE,0BAAA;GjE+8MC;EiE98MD;IAAU,0BAAA;GjEi9MT;EiEh9MD;IAAU,8BAAA;GjEm9MT;EiEl9MD;;IACU,+BAAA;GjEq9MT;CACF;AgEh5MD;EAAA;IAFI,0BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,2BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,iCAAA;GhEs5MD;CACF;AgE/4MD;EAAA;IC1FE,0BAAA;GjE6+MC;EiE5+MD;IAAU,0BAAA;GjE++MT;EiE9+MD;IAAU,8BAAA;GjEi/MT;EiEh/MD;;IACU,+BAAA;GjEm/MT;CACF;AgEz5MD;EAAA;IAFI,0BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,2BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,iCAAA;GhE+5MD;CACF;AgEx5MD;EAAA;IC/GE,0BAAA;GjE2gNC;EiE1gND;IAAU,0BAAA;GjE6gNT;EiE5gND;IAAU,8BAAA;GjE+gNT;EiE9gND;;IACU,+BAAA;GjEihNT;CACF;AgEl6MD;EAAA;IAFI,0BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,2BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,iCAAA;GhEw6MD;CACF;AgEj6MD;EAAA;IC5HE,yBAAA;GjEiiNC;CACF;AgEj6MD;EAAA;ICjIE,yBAAA;GjEsiNC;CACF;AgEj6MD;EAAA;ICtIE,yBAAA;GjE2iNC;CACF;AgEj6MD;EAAA;IC3IE,yBAAA;GjEgjNC;CACF;AgE95MD;ECnJE,yBAAA;CjEojND;AgE35MD;EAAA;ICjKE,0BAAA;GjEgkNC;EiE/jND;IAAU,0BAAA;GjEkkNT;EiEjkND;IAAU,8BAAA;GjEokNT;EiEnkND;;IACU,+BAAA;GjEskNT;CACF;AgEz6MD;EACE,yBAAA;ChE26MD;AgEt6MD;EAAA;IAFI,0BAAA;GhE46MD;CACF;AgE16MD;EACE,yBAAA;ChE46MD;AgEv6MD;EAAA;IAFI,2BAAA;GhE66MD;CACF;AgE36MD;EACE,yBAAA;ChE66MD;AgEx6MD;EAAA;IAFI,iCAAA;GhE86MD;CACF;AgEv6MD;EAAA;ICpLE,yBAAA;GjE+lNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #ffffff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #ffffff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #ffffff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #ffffff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #ffffff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #ffffff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #ffffff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 3;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 8.3, iOS doesn't support `datetime` or `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because