From 5673d107e7b5356fde9c64a9ed4cfaa4f0da4157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=87=E5=A4=A9?= Date: Thu, 31 Dec 2020 12:19:49 +0800 Subject: [PATCH] init --- .gitignore | 16 + .vscode/launch.json | 16 + LICENSE | 21 ++ README.md | 4 + icons/128x128.png | Bin 0 -> 7087 bytes icons/256x256.png | Bin 0 -> 16575 bytes icons/512x512.png | Bin 0 -> 23931 bytes icons/app.icns | Bin 0 -> 88562 bytes icons/epub.psd | Bin 0 -> 278293 bytes package.json | 44 +++ src/css/app.css | 1 + src/css/app.scss | 319 ++++++++++++++++++ src/css/float.css | 1 + src/css/float.scss | 97 ++++++ src/images/app.png | Bin 0 -> 16575 bytes src/images/tray@1x.png | Bin 0 -> 257 bytes src/images/tray@2x.png | Bin 0 -> 229 bytes src/index.html | 120 +++++++ src/js/app.js | 311 +++++++++++++++++ src/js/float.js | 94 ++++++ src/lib/anot.js | 8 + src/lib/chart/line.js | 253 ++++++++++++++ src/lib/chart/rank.js | 141 ++++++++ src/lib/css/reset-basic.css | 78 +++++ src/lib/drag/core.js | 1 + src/lib/drag/index.js | 1 + src/lib/form/button.js | 484 ++++++++++++++++++++++++++ src/lib/form/checkbox-item.js | 311 +++++++++++++++++ src/lib/form/checkbox.js | 142 ++++++++ src/lib/form/input.js | 617 ++++++++++++++++++++++++++++++++++ src/lib/form/number.js | 413 +++++++++++++++++++++++ src/lib/form/progress.js | 163 +++++++++ src/lib/form/radio-item.js | 308 +++++++++++++++++ src/lib/form/radio.js | 130 +++++++ src/lib/form/select.js | 559 ++++++++++++++++++++++++++++++ src/lib/form/star.js | 301 +++++++++++++++++ src/lib/form/switch.js | 241 +++++++++++++ src/lib/icon/index.js | 15 + src/lib/icon/svg.js | 1 + src/lib/layer/index.js | 15 + src/lib/scroll/index.js | 15 + src/lib/socket.js | 25 ++ src/lib/utils.js | 1 + src/main.js | 153 +++++++++ src/tools/menu.js | 36 ++ src/tools/tray.js | 42 +++ src/tools/window.js | 76 +++++ src/view.html | 37 ++ 48 files changed, 5611 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 icons/128x128.png create mode 100644 icons/256x256.png create mode 100644 icons/512x512.png create mode 100644 icons/app.icns create mode 100644 icons/epub.psd create mode 100644 package.json create mode 100644 src/css/app.css create mode 100644 src/css/app.scss create mode 100644 src/css/float.css create mode 100644 src/css/float.scss create mode 100644 src/images/app.png create mode 100644 src/images/tray@1x.png create mode 100644 src/images/tray@2x.png create mode 100644 src/index.html create mode 100644 src/js/app.js create mode 100644 src/js/float.js create mode 100644 src/lib/anot.js create mode 100644 src/lib/chart/line.js create mode 100644 src/lib/chart/rank.js create mode 100644 src/lib/css/reset-basic.css create mode 100644 src/lib/drag/core.js create mode 100644 src/lib/drag/index.js create mode 100644 src/lib/form/button.js create mode 100644 src/lib/form/checkbox-item.js create mode 100644 src/lib/form/checkbox.js create mode 100644 src/lib/form/input.js create mode 100644 src/lib/form/number.js create mode 100644 src/lib/form/progress.js create mode 100644 src/lib/form/radio-item.js create mode 100644 src/lib/form/radio.js create mode 100644 src/lib/form/select.js create mode 100644 src/lib/form/star.js create mode 100644 src/lib/form/switch.js create mode 100644 src/lib/icon/index.js create mode 100644 src/lib/icon/svg.js create mode 100644 src/lib/layer/index.js create mode 100644 src/lib/scroll/index.js create mode 100644 src/lib/socket.js create mode 100644 src/lib/utils.js create mode 100644 src/main.js create mode 100644 src/tools/menu.js create mode 100644 src/tools/tray.js create mode 100644 src/tools/window.js create mode 100644 src/view.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f66ccf --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +.AppleDouble +.LSOverride +.idea +._* +.Spotlight-V100 +.Trashes + + +build +build/** + +node_modules +node_modules/** + +package-lock.json \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..473f63e --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Main Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceRoot}", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron", + "windows": { + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd" + }, + "args": ["."] + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ab60297 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f9e69f --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +## E-pub Reader +> E-pub Reader, 它不是功能最强的, 但可能是UI最耐看的, 最适合看技术类电子书的。 + + diff --git a/icons/128x128.png b/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..96bbb49247996b5dbaa58868274b6f354db3a10f GIT binary patch literal 7087 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 literal 0 HcmV?d00001 diff --git a/icons/256x256.png b/icons/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7aafed7d02e1d0218550f604ca24fae8ad919f GIT binary patch literal 16575 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

;sMvJKnl&f^iIq+Zq+M|ZGt1B zk8J*vB{T{!P3eC8d_6DV9IeMLAdKREbh}TX4x5Y#5o_JlyIhA_H3kG47$u&hi|_7@ zpBPV2{TusmC`CDdoM-dk3;k=_!c;XF1~6 z-O~nrhB8Xum0BKbH^ImgPD$Dnb_KiUy^ANRO0P33-QBMzz!BnY`vQH@iTv`&!$M~4 zze(Ocg_)(6GxOrJYIoS?bF4t+qd4uOg~*cmP||+vPUD96Alq5?*@TxXF)#0rSeUK3 zmI(rT4r=}&F7e0@$;DY*g(5LKqO>+E>uk-5&*w|TYb`F?Qu~%0a zwsp{iq@-cBRaFlH7KQpo)E4;4;(VXou;jd@01_S*s@+di9#dwgr@e9`$TKV20RRoD ze@4F5ncWfT2dxlvMmB;Y!5ENMA|sE{I93+e?WU-o-yk%G6JK zN4W)4Wko;p;|^zGMJL0WSI)BEI9jNO`IB&Jw4%k7MeJFzi62z6M_?WXPbn*{eNzk+ z-a+a&n=D8*JU0Ii~TjSJiWln8pzyI`E_>r~39*@EMTh*OZ5zOZ^qapCK<|0q()A zw~jh=7eNQT1j35Fy8qs)d6M?=E-Qjc%$V$vPBEe=PImS>F0rmXnYZgn*D&sD7&L7T zl^o~fOukVL5Q!}Zw(@garAsNVnMOrSx4zs^$x-#1`R?fv>ftJ{`C{L}-@(oWsyrwu zE5>4f^;7&MP#(1HVTMfc{R)fEq`&w7KCZ6yc^vGvzB^g7GN&25H&M+ja^$^pK`SuX zJRohs#&j$r`dOd%U-eusk6xn`sZcwSfe;O^I%x>80U*B8A2KTgG7^L0 zSN3!IWp{E8aoBf}U0i{FZ3*2va18x9~6y8H>Ovaq9?-Rg^SnEsRe z&1jPw4HIYhSyl|*WK1bvCVNFY@4FimxI&_gWP6RbvM!S=Tm?N^&CVPB`rmo#uo+`N zk^R$kT?Y-&e@W`x;e^BZ!mq-GTmuirqAhIiPBy^n}jwsZ~gc303(CD`W3nk5&sLaWp`2l literal 0 HcmV?d00001 diff --git a/icons/512x512.png b/icons/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..a9917a9d0c27554b33e579867f417982afd17c78 GIT binary patch literal 23931 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 V?)i*DQR0E1qlfJ*N)NeT|1bR}c5?s# literal 0 HcmV?d00001 diff --git a/icons/app.icns b/icons/app.icns new file mode 100644 index 0000000000000000000000000000000000000000..b6b48e9b0e10316f3a257ad67a7db308255ca51b GIT binary patch literal 88562 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 CS$_fm literal 0 HcmV?d00001 diff --git a/package.json b/package.json new file mode 100644 index 0000000..d5bc8f2 --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "org.bytedo.epub", + "version": "2.1.2", + "description": "E-pub Reader", + "main": "src/main.js", + "scripts": { + "start": "electron .", + "pack": "electron-builder", + "pack:mac": "electron-builder --mac" + }, + "author": { + "name": "yutent", + "email": "yutent.io@gmail.com" + }, + "homepage": "https://yutent.top", + "license": "MIT", + "build": { + "appId": "org.bytedo.epub", + "productName": "E-pub Reader", + "copyright": "Copyright © 2019 ${author}", + "directories": { + "buildResources": "icons", + "output": "build" + }, + "electronDownload": { + "version": "11.0.4", + "mirror": "https://npm.taobao.org/mirrors/electron/" + }, + "files": ["src/**/*", "node_modules/iofs/*"], + "mac": { + "category": "public.app-category.developer-tools", + "target": "dmg", + "icon": "icons/app.icns", + "darkModeSupport": false + } + }, + "devDependencies": { + "electron": "11.0.4", + "electron-builder": "^22.1.0" + }, + "dependencies": { + "iofs": "^1.3.2" + } +} diff --git a/src/css/app.css b/src/css/app.css new file mode 100644 index 0000000..4811d2a --- /dev/null +++ b/src/css/app.css @@ -0,0 +1 @@ +html{font-size:12.8px;width:100%;height:100vh}body{overflow:hidden;display:flex;flex-direction:column;width:100%;height:100%;line-height:1.25;font-size:14px;color:var(--color-dark-1);background:rgba(255,255,255,0.3)}.app-drag{-webkit-app-region:drag;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.app-nodrag{-webkit-app-region:no-drag}.app{position:relative;display:flex;height:100%}.app .sidebar{display:flex;flex-direction:column;justify-content:space-between;width:76px;height:100%;padding:48px 22px 24px;background:var(--color-dark-1);color:var(--color-plain-1)}.app .sidebar .item{cursor:pointer}.app .sidebar .item:hover,.app .sidebar .item.active{color:var(--color-orange-1)}.app .sidebar .item:active{color:var(--color-orange-2)}.app .select-box{display:flex;flex-direction:column;width:200px;height:100%;background:rgba(255,255,255,0.5)}.app .select-box .form{display:flex;align-items:center;width:100%;height:35px;padding:0 6px;background:#fff;border-bottom:1px solid var(--color-plain-2)}.app .select-box .form wc-input{flex:1}.app .select-box .list{flex:1}.app .select-box .list .item{display:flex;flex-direction:column;justify-content:center;height:48px;padding:6px;border-bottom:1px solid rgba(200,200,200,0.3);transition:color 0.15s ease-in-out, background 0.15s ease-in-out;cursor:pointer}.app .select-box .list .item section{display:flex;justify-content:space-between;align-items:center}.app .select-box .list .item cite{color:var(--color-grey-2)}.app .select-box .list .item .percent{padding:0 4px;border-radius:2px;font-size:12px;font-weight:bold;color:var(--color-grey-1)}.app .select-box .list .item .percent.red{color:var(--color-red-1)}.app .select-box .list .item .percent.green{color:var(--color-green-3)}.app .select-box .list .item:last-child{border-bottom:0}.app .select-box .list .item:hover{color:var(--color-blue-1);background:rgba(255,255,255,0.7)}.app .select-box .list .item.active{color:var(--color-plain-1);background:var(--color-blue-1)}.app .select-box .list .item.active cite{color:inherit}.app .select-box .list .item.active .percent{color:#fff}.app .detail{position:relative;flex:1;height:100%;border-left:1px solid var(--color-plain-2);background:#fff}.app .detail .title{display:flex;justify-content:space-between;align-items:center;width:100%;height:35px;padding:0 16px;font-size:16px;font-weight:bold}.app .detail .title span{display:inline-flex}.app .detail .title wc-button{margin:0 6px}.app .detail .card{width:96%;padding:12px 12px 16px;margin:12px 2% 24px;border:0;background:#fff;box-shadow:0 0 8px rgba(0,0,0,0.075)}.app .detail .card legend{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#64b5f6}.app .detail.blur::after{display:flex;justify-content:center;align-items:center;position:absolute;left:0;top:0;z-index:999;width:100%;height:100%;content:'搞基数据';background:#fff;color:#f7f8fb;font-size:100px}.app .preferences{width:640px;height:360px;border-radius:10px}.app .preferences .titlebar{width:100%;height:72px;border-bottom:1px solid var(--color-plain-3);background:var(--color-plain-1)}.app .preferences .titlebar .title{width:100%;height:24px;line-height:24px;text-align:center}.app .preferences .titlebar nav{display:flex;width:100%;height:40px;padding:0 16px;--size: 18px}.app .preferences .titlebar nav span{display:flex;flex-direction:column;align-items:center;justify-content:center;width:52px;height:40px;margin:0 6px;border-radius:6px;font-size:12px}.app .preferences .titlebar nav span.active{background:var(--color-plain-2);color:var(--color-blue-1)}.app .preferences .titlebar nav span:hover{background:var(--color-plain-2)}.app .preferences .tab-panel{padding:64px}.app .preferences .tab-panel p{margin-bottom:16px}.app .preferences .tab-panel .field{display:flex;align-items:center;height:64px}.app .preferences .tab-panel .field .label{width:200px;color:var(--color-grey-1)}.app.loading::after{display:flex;justify-content:center;align-items:center;position:absolute;left:0;top:0;z-index:999;width:100%;height:100%;content:'🌑';background:rgba(255,255,255,0.01);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);color:var(--color-orange-1);font-size:50px;-webkit-animation:loading 1s infinite;animation:loading 1s infinite}@-webkit-keyframes loading{1%,100%{content:'🌑'}12.5%{content:'🌒'}25%{content:'🌓'}37.5%{content:'🌔'}50%{content:'🌕'}62.5%{content:'🌖'}75%{content:'🌗'}87.5%{content:'🌘'}}@keyframes loading{1%,100%{content:'🌑'}12.5%{content:'🌒'}25%{content:'🌓'}37.5%{content:'🌔'}50%{content:'🌕'}62.5%{content:'🌖'}75%{content:'🌗'}87.5%{content:'🌘'}} diff --git a/src/css/app.scss b/src/css/app.scss new file mode 100644 index 0000000..4b3039e --- /dev/null +++ b/src/css/app.scss @@ -0,0 +1,319 @@ +@charset "UTF-8"; +/** + * 主窗口样式 + * @authors yutent + * @date 2018/12/16 17:15:07 + */ + +html { + font-size: 12.8px; + width: 100%; + height: 100vh; +} + +body { + overflow: hidden; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + line-height: 1.25; + font-size: 14px; + color: var(--color-dark-1); + background: rgba(255, 255, 255, 0.3); +} + +.app-drag { + -webkit-app-region: drag; + user-select: none; +} +.app-nodrag { + -webkit-app-region: no-drag; +} + +.app { + position: relative; + display: flex; + height: 100%; + + .sidebar { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 76px; + height: 100%; + padding: 48px 22px 24px; + background: var(--color-dark-1); + color: var(--color-plain-1); + + .item { + cursor: pointer; + + &:hover, + &.active { + color: var(--color-orange-1); + } + &:active { + color: var(--color-orange-2); + } + } + } + + .select-box { + display: flex; + flex-direction: column; + width: 200px; + height: 100%; + background: rgba(255, 255, 255, 0.5); + + .form { + display: flex; + align-items: center; + width: 100%; + height: 35px; + padding: 0 6px; + background: #fff; + border-bottom: 1px solid var(--color-plain-2); + + wc-input { + flex: 1; + } + } + + .list { + flex: 1; + + .item { + display: flex; + flex-direction: column; + justify-content: center; + height: 48px; + padding: 6px; + border-bottom: 1px solid rgba(200, 200, 200, 0.3); + transition: color 0.15s ease-in-out, background 0.15s ease-in-out; + cursor: pointer; + + section { + display: flex; + justify-content: space-between; + align-items: center; + } + + cite { + color: var(--color-grey-2); + } + + .percent { + padding: 0 4px; + border-radius: 2px; + font-size: 12px; + font-weight: bold; + color: var(--color-grey-1); + + &.red { + color: var(--color-red-1); + } + &.green { + color: var(--color-green-3); + } + } + + &:last-child { + border-bottom: 0; + } + + &:hover { + color: var(--color-blue-1); + background: rgba(255, 255, 255, 0.7); + } + + &.active { + color: var(--color-plain-1); + background: var(--color-blue-1); + + cite { + color: inherit; + } + + .percent { + color: #fff; + } + } + } + } + } + + .detail { + position: relative; + flex: 1; + height: 100%; + border-left: 1px solid var(--color-plain-2); + background: #fff; + + .title { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + height: 35px; + padding: 0 16px; + font-size: 16px; + font-weight: bold; + + span { + display: inline-flex; + } + wc-button { + margin: 0 6px; + } + } + + .card { + width: 96%; + padding: 12px 12px 16px; + margin: 12px 2% 24px; + border: 0; + background: #fff; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.075); + + legend { + -webkit-touch-callout: none; + user-select: none; + color: #64b5f6; + } + } + + &.blur { + &::after { + display: flex; + justify-content: center; + align-items: center; + position: absolute; + left: 0; + top: 0; + z-index: 999; + width: 100%; + height: 100%; + content: '搞基数据'; + background: #fff; + color: #f7f8fb; + font-size: 100px; + } + } + } + + .preferences { + width: 640px; + height: 360px; + border-radius: 10px; + + .titlebar { + width: 100%; + height: 72px; + border-bottom: 1px solid var(--color-plain-3); + background: var(--color-plain-1); + + .title { + width: 100%; + height: 24px; + line-height: 24px; + text-align: center; + } + + nav { + display: flex; + width: 100%; + height: 40px; + padding: 0 16px; + + span { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 52px; + height: 40px; + margin: 0 6px; + border-radius: 6px; + font-size: 12px; + + &.active { + background: var(--color-plain-2); + color: var(--color-blue-1); + } + &:hover { + background: var(--color-plain-2); + } + } + --size: 18px; + } + } + + .tab-panel { + padding: 64px; + + p { + margin-bottom: 16px; + } + + .field { + display: flex; + align-items: center; + height: 64px; + + .label { + width: 200px; + color: var(--color-grey-1); + } + } + } + } + + &.loading { + &::after { + display: flex; + justify-content: center; + align-items: center; + position: absolute; + left: 0; + top: 0; + z-index: 999; + width: 100%; + height: 100%; + content: '🌑'; + background: rgba(255, 255, 255, 0.01); + backdrop-filter: blur(2px); + color: var(--color-orange-1); + font-size: 50px; + animation: loading 1s infinite; + } + } +} + +@keyframes loading { + 1%, + 100% { + content: '🌑'; + } + 12.5% { + content: '🌒'; + } + 25% { + content: '🌓'; + } + 37.5% { + content: '🌔'; + } + 50% { + content: '🌕'; + } + 62.5% { + content: '🌖'; + } + 75% { + content: '🌗'; + } + 87.5% { + content: '🌘'; + } +} diff --git a/src/css/float.css b/src/css/float.css new file mode 100644 index 0000000..49cecd4 --- /dev/null +++ b/src/css/float.css @@ -0,0 +1 @@ +html{font-size:12.8px;width:100%;height:100vh}body{display:flex;flex-direction:column;width:100%;height:100%;line-height:1.25;font-size:14px;color:var(--color-dark-1);background:rgba(255,255,255,0.3)}.app-drag{-webkit-app-region:drag;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.app-nodrag{-webkit-app-region:no-drag}.app{position:relative;display:flex;flex-direction:column;height:100%;padding:6px 0}.app .list{flex:1}.app .list .item{display:flex;align-items:center;height:54px;padding:10px 12px;line-height:15px;border-bottom:1px solid rgba(155,155,155,0.3)}.app .list .item:last-child{border-bottom:0}.app .list .item .info{overflow:hidden;flex:1}.app .list .item .info h3{font-size:14px}.app .list .item .info cite{color:var(--color-grey-2)}.app .list .item .last-days{display:flex;width:64px;height:30px;margin:0 6px}.app .list .item .today{width:52px;font-size:12px;text-align:right}.app .list .item .today span{display:block;padding:0 4px}.app .list .item .today .percent{border-radius:2px;color:#fff}.app .list .item .today .percent.red{background:var(--color-red-1)}.app .list .item .today .percent.green{background:var(--color-green-3)} diff --git a/src/css/float.scss b/src/css/float.scss new file mode 100644 index 0000000..fee5379 --- /dev/null +++ b/src/css/float.scss @@ -0,0 +1,97 @@ +@charset "UTF-8"; +/** + * 浮窗样式 + * @authors yutent + * @date 2018/12/16 17:15:07 + */ + +html { + font-size: 12.8px; + width: 100%; + height: 100vh; +} + +body { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + line-height: 1.25; + font-size: 14px; + color: var(--color-dark-1); + background: rgba(255, 255, 255, 0.3); +} + +.app-drag { + -webkit-app-region: drag; + user-select: none; +} +.app-nodrag { + -webkit-app-region: no-drag; +} + +.app { + position: relative; + display: flex; + flex-direction: column; + height: 100%; + padding: 6px 0; + + .list { + flex: 1; + + .item { + display: flex; + align-items: center; + height: 54px; + padding: 10px 12px; + line-height: 15px; + border-bottom: 1px solid rgba(155, 155, 155, 0.3); + + &:last-child { + border-bottom: 0; + } + + .info { + overflow: hidden; + flex: 1; + + h3 { + font-size: 14px; + } + cite { + color: var(--color-grey-2); + } + } + + .last-days { + display: flex; + width: 64px; + height: 30px; + margin: 0 6px; + } + + .today { + width: 52px; + font-size: 12px; + text-align: right; + + span { + display: block; + padding: 0 4px; + } + .percent { + border-radius: 2px; + color: #fff; + + &.red { + background: var(--color-red-1); + } + &.green { + background: var(--color-green-3); + } + } + } + } + } +} diff --git a/src/images/app.png b/src/images/app.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7aafed7d02e1d0218550f604ca24fae8ad919f GIT binary patch literal 16575 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

;sMvJKnl&f^iIq+Zq+M|ZGt1B zk8J*vB{T{!P3eC8d_6DV9IeMLAdKREbh}TX4x5Y#5o_JlyIhA_H3kG47$u&hi|_7@ zpBPV2{TusmC`CDdoM-dk3;k=_!c;XF1~6 z-O~nrhB8Xum0BKbH^ImgPD$Dnb_KiUy^ANRO0P33-QBMzz!BnY`vQH@iTv`&!$M~4 zze(Ocg_)(6GxOrJYIoS?bF4t+qd4uOg~*cmP||+vPUD96Alq5?*@TxXF)#0rSeUK3 zmI(rT4r=}&F7e0@$;DY*g(5LKqO>+E>uk-5&*w|TYb`F?Qu~%0a zwsp{iq@-cBRaFlH7KQpo)E4;4;(VXou;jd@01_S*s@+di9#dwgr@e9`$TKV20RRoD ze@4F5ncWfT2dxlvMmB;Y!5ENMA|sE{I93+e?WU-o-yk%G6JK zN4W)4Wko;p;|^zGMJL0WSI)BEI9jNO`IB&Jw4%k7MeJFzi62z6M_?WXPbn*{eNzk+ z-a+a&n=D8*JU0Ii~TjSJiWln8pzyI`E_>r~39*@EMTh*OZ5zOZ^qapCK<|0q()A zw~jh=7eNQT1j35Fy8qs)d6M?=E-Qjc%$V$vPBEe=PImS>F0rmXnYZgn*D&sD7&L7T zl^o~fOukVL5Q!}Zw(@garAsNVnMOrSx4zs^$x-#1`R?fv>ftJ{`C{L}-@(oWsyrwu zE5>4f^;7&MP#(1HVTMfc{R)fEq`&w7KCZ6yc^vGvzB^g7GN&25H&M+ja^$^pK`SuX zJRohs#&j$r`dOd%U-eusk6xn`sZcwSfe;O^I%x>80U*B8A2KTgG7^L0 zSN3!IWp{E8aoBf}U0i{FZ3*2va18x9~6y8H>Ovaq9?-Rg^SnEsRe z&1jPw4HIYhSyl|*WK1bvCVNFY@4FimxI&_gWP6RbvM!S=Tm?N^&CVPB`rmo#uo+`N zk^R$kT?Y-&e@W`x;e^BZ!mq-GTmuirqAhIiPBy^n}jwsZ~gc303(CD`W3nk5&sLaWp`2l literal 0 HcmV?d00001 diff --git a/src/images/tray@1x.png b/src/images/tray@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2a31671922bad898223f0c96dc884b112b022c GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Cp=voLoEE)PFCbQA7vUCz&ts|E)b6)OJKtMH~zD7r;AKe^DS4azxVIvIk6Nw*ECzUHH}C0 z4VcXi>|uQ%VWOPPdxL2+#|EB_`?=x|aIRo1J7B`(vF1^z>U@?rjh;*i(>JZZD=jP2 zP{_1k%N!ni#&ZW0IAR}&MKS6*$WQQnt8zP@ah-!cdjaz<%LeNUoD5&r{C^W1zGhp= zgn6B}WLDfa+S7k3YNtinyOokZZ>MGz^3GDtUmEEs_^JK52hdLpp00i_>zopr0LkuO ARsaA1 literal 0 HcmV?d00001 diff --git a/src/images/tray@2x.png b/src/images/tray@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..af553c1ae9fade3f0174f97146e1f2a7b0be8250 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJHJ&bxArbCxryt~PHsEoU|6IZu zu_(EO^#)Jcid*ZLjhIeyEo*A-y>cr^@7%%r`kh~c3kyTUudB0WF!?`VPi~O`iTHk})+rDB=CN9h@)vOW2k){8vgSmG)9#-61ex;bpP>xT0$^ z1;PuuPhRn1^i<$%5x&5-BzoS$bDfeCRjadWPUrqv_q1b?&&M}Qwls(raIgBu_U?ds dy_;tOlT_e5#g*OP?SSrP@O1TaS?83{1OTYLS;PPU literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..e387237 --- /dev/null +++ b/src/index.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + +

+ + + + \ No newline at end of file diff --git a/src/js/app.js b/src/js/app.js new file mode 100644 index 0000000..9eff464 --- /dev/null +++ b/src/js/app.js @@ -0,0 +1,311 @@ +/** + * {sonist app} + * + * @format + * @author yutent + * @date 2018/12/16 17:15:57 + */ + +import '/lib/anot.js' +import '/lib/form/button.js' +import '/lib/form/switch.js' +import '/lib/scroll/index.js' +import '/lib/chart/rank.js' +import '/lib/chart/line.js' + +import layer from '/lib/layer/index.js' +import Utils from '/lib/utils.js' + +import app from '/lib/socket.js' + +const log = console.log + +function getJsonp(str) { + if (~str.indexOf('jsonpgz')) { + return new Function(`function jsonpgz(d){return d}; return ${str}`)() + } + return false +} + +function getLineStat(str) { + return new Function(`${str}; return {line: Data_netWorthTrend.map(it => ({ + x: ~~(it.x/1000), + y: +(it.y * 10000).toFixed(0), + p: it.equityReturn + })), e1: +syl_1y, e3: +syl_3y, e6: +syl_6y, e12: +syl_1n}`)() +} + +function sleep(ms) { + return new Promise(_ => setTimeout(_, ms)) +} + +window.app = app + +Anot({ + $id: 'app', + state: { + input: '', + curr: { + code: '', + name: '', + stat: '', + line: '' + }, + list: [], + $dict: {}, + loading: false, + preferences: { + tab: 1, + notify: Anot.ls('notify') === '1' + } + }, + + watch: { + 'preferences.notify'(v) { + Anot.ls('notify', v ^ 0) + if (v) { + app.dispatch('notify') + } + } + }, + + mounted() { + var old = this.syncOldStat() + + if (old === false) { + this.reloadGays() + } + + if (this.preferences.notify) { + app.dispatch('notify') + } + + app.on('data-reload', data => { + this.reloadGays() + }) + }, + methods: { + reloadGays() { + var gays = Anot.ls('gays') || '{}' + var list = [] + gays = JSON.parse(gays) + + for (let code in gays) { + let { name, cm, cp, t } = gays[code] + list.push({ code, name, cm, cp, t: t || 0 }) + this.$dict[code] = 1 + } + list.sort((a, b) => b.cp - a.cp) + + this.list = list + }, + + syncOldStat() { + var old = Anot.ls('watch_list') + var list = [] + var dict = {} + + if (old) { + old = JSON.parse(old) + for (let it of old) { + dict[it.code] = { + name: it.name, + cm: +it.curr, + cp: it.percent, + t: Date.now() + } + list.push({ code: it.code, ...dict[it.code] }) + } + + list.sort((a, b) => b.cp - a.cp) + this.list = list + + Anot.ls('gays', dict) + Anot.ls('watch_list', null) + return true + } + return false + }, + + showPreferencesPanel() { + this.$refs.pre.show() + }, + + switchTab(n) { + this.preferences.tab = n + }, + + getGayStat(id) { + var res = app.dispatch( + 'fetch', + `https://fundgz.1234567.com.cn/js/${id}.js` + ) + return getJsonp(res) + }, + + addGay() { + var code = this.input + var gay + + if (this.$dict[code]) { + layer.toast('这个鸡精在列表呢~~~', 'warn') + this.input = '' + return + } + + if (code === 'debug') { + this.input = '' + return app.dispatch('devtools') + } + + if (code.length < 6) { + return + } + + if (/[^\d]/.test(code)) { + layer.toast('只能通过鸡精编号添加', 'error') + this.input = '' + return + } + + gay = this.getGayStat(code) + + if (gay) { + let tmp = { + code: gay.fundcode, + name: gay.name, + cm: +gay.gsz, + cp: +gay.gszzl, + t: Date.now() + } + this.input = '' + this.list.push(tmp) + this.$dict[tmp.code] = 1 + this.list.sort((a, b) => b.cp - a.cp) + this.saveCache() + } else { + layer.toast('鸡精不存在', 'error') + } + }, + + async updateGays() { + var { code, stat } = this.curr + + this.loading = true + for (let it of this.list) { + // + let info = this.getGayStat(it.code) + let time, needUpdate + + it.cm = +info.gsz + it.cp = +info.gszzl + + time = new Date(info.gztime.slice(0, 10) + ' 00:00:00') + time = ~~(time.getTime() / 1000) - 24 * 3600 + + // 如果走势最后的日期比当前最新的小, 则全量更新 + if (it.t < time) { + it.t = time + needUpdate = this.updateLine(it.code) + } + + if (it.code === code) { + stat = JSON.parse(stat) + stat.cm = it.cm + stat.cp = it.cp + if (needUpdate) { + stat.rank = needUpdate.line.slice(-60).map(_ => _.p) + stat.e1 = needUpdate.e1 + stat.e3 = needUpdate.e3 + stat.e6 = needUpdate.e6 + stat.e12 = needUpdate.e12 + this.curr.line = JSON.stringify(needUpdate.line) + } + this.curr.stat = JSON.stringify(stat) + } + await sleep(500) + } + // + this.loading = false + Anot.ss('last_update', Date.now()) + layer.toast('数据更新成功', 'success') + this.list.sort((a, b) => b.cp - a.cp) + this.saveCache() + }, + + removeGay() { + var { code, name } = this.curr + layer + .confirm(`是否移除「${name}」?`) + .then(_ => { + for (let it of this.list) { + if (it.code === code) { + this.list.remove(it) + delete this.$dict[code] + Anot.ls(code, null) + this.saveCache() + break + } + } + this.viewGay(this.list[0]) + }) + .catch(Anot.noop) + }, + + saveCache() { + var dict = {} + for (let it of this.list) { + var { code, name, cm, cp, t } = it + dict[code] = { name, cm, cp, t } + } + Anot.ls('gays', dict) + }, + + updateLine(code) { + var gay = app.dispatch( + 'fetch', + `http://fund.eastmoney.com/pingzhongdata/${code}.js?v=${Date.now()}` + ) + gay = getLineStat(gay) + Anot.ls(code, JSON.stringify(gay)) + return gay + }, + + viewGay(item) { + var gay = Anot.ls(item.code) + var rank, line + var { cm, cp, t } = item + + this.curr.code = item.code + this.curr.name = item.name + + if (gay) { + gay = JSON.parse(gay) + var last = gay.line[gay.line.length - 1].x + if (last < t) { + gay = null + } + } + + if (!gay) { + gay = this.updateLine(item.code) + item.t = gay.line[gay.line.length - 1].x + this.saveCache() + } + + rank = gay.line.slice(-60).map(_ => _.p) + line = JSON.stringify(gay.line) + + this.curr.stat = JSON.stringify({ + rank, + e1: gay.e1, + e3: gay.e3, + e6: gay.e6, + e12: gay.e12, + cm, + cp + }) + this.curr.line = line + } + } +}) diff --git a/src/js/float.js b/src/js/float.js new file mode 100644 index 0000000..0b70692 --- /dev/null +++ b/src/js/float.js @@ -0,0 +1,94 @@ +/** + * + * @author yutent + * @date 2020/12/10 19:53:05 + */ + +import '/lib/anot.js' + +import '/lib/scroll/index.js' +import layer from '/lib/layer/index.js' +import app from '/lib/socket.js' + +function getJsonp(str) { + if (~str.indexOf('jsonpgz')) { + return new Function(`function jsonpgz(d){return d}; return ${str}`)() + } + return false +} + +Anot({ + $id: 'app', + state: { + list: [] + }, + mounted() { + this.reloadGays() + + app.on('float-visible', data => { + var time = +Anot.ss('last_update') || 0 + var now = Date.now() + + // 有触发小窗口显示时, 更新通知提醒 + if (Anot.ls('notify') === '1') { + app.dispatch('notify') + } + + this.reloadGays() + setTimeout(() => { + // 如果离上次更新超过15分钟, 则自动更新 + if (now - time > 15 * 60 * 1000) { + this.updateGays() + Anot.ss('last_update', now) + } + }, 500) + }) + }, + methods: { + reloadGays() { + var gays = Anot.ls('gays') || '{}' + var list = [] + + gays = JSON.parse(gays) + + for (let code in gays) { + let { name, cm, cp, t } = gays[code] + list.push({ code, name, cm, cp, t }) + } + list.sort((a, b) => b.cp - a.cp) + + this.list = list + }, + + getGayStat(id) { + var res = app.dispatch( + 'fetch', + `https://fundgz.1234567.com.cn/js/${id}.js` + ) + return getJsonp(res) + }, + + updateGay(item) { + var info = this.getGayStat(item.code) + item.cm = +info.gsz + item.cp = +info.gszzl + }, + + updateGays() { + for (let it of this.list) { + this.updateGay(it) + } + this.list.sort((a, b) => b.cp - a.cp) + this.saveCache() + app.dispatch('data-reload') + }, + saveCache() { + var dict = {} + for (let it of this.list) { + var { code, name, cm, cp, t } = it + dict[code] = { name, cm, cp, t } + } + Anot.ls('gays', dict) + } + } +}) diff --git a/src/lib/anot.js b/src/lib/anot.js new file mode 100644 index 0000000..2f010fd --- /dev/null +++ b/src/lib/anot.js @@ -0,0 +1,8 @@ +/*================================================== + * Anot normal version for future browsers + * @authors yutent (yutent@doui.cc) + * @date 2017-03-21 21:05:57 + * V2.0.0 + * + ==================================================*/ + const _Anot=function(){var e=1024,t=A(),n=window.document,r=n.head;r.insertAdjacentHTML("afterbegin",'');var i=r.firstChild;function a(){console.log.apply(console,arguments)}function o(){return Object.create(null)}var s=encodeURIComponent,c=decodeURIComponent,l="$"+t,u={},f=/[^, ]+/g,p=/\w+/g,d=/^\[object SVG\w*Element\]$/,h=Object.prototype,v=h.hasOwnProperty,m=h.toString,y=Array.prototype,g=y.slice,b=n.documentElement,$=n.createDocumentFragment(),x=(n.createElement("div"),{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object Error]":"error","[object AsyncFunction]":"asyncfunction","[object Promise]":"promise","[object Generator]":"generator","[object GeneratorFunction]":"generatorfunction"});function w(){}function k(e){return Function.apply(w,e)}function C(e,t){"string"==typeof e&&(e=e.match(f)||[]);for(var n={},r=void 0!==t?t:1,i=0,a=e.length;i{e.resolve=t,e.reject=n}),e}),String.prototype.splice||Object.defineProperty(String.prototype,"splice",{value:function(e,t,n){let r=this.length,i=arguments.length;if(n=void 0===n?"":n,i<1)return this;if(e<0&&(e=Math.abs(e)>=r?0:r+e),1===i)return this.slice(0,e);return t-=0,this.slice(0,e)+n+this.slice(e+t)},enumerable:!1}),Date.prototype.getFullWeek||(Object.defineProperty(Date.prototype,"getFullWeek",{value:function(){let e=this.getFullYear(),t=new Date(e,0,1),n=t.getDay()||1,r=(this-t)/864e5;return Math.ceil((r+n)/7)},enumerable:!1}),Object.defineProperty(Date.prototype,"getWeek",{value:function(){let e=this.getDate(),t=this.getMonth(),n=this.getFullYear(),r=new Date(n,t,1).getDay();return Math.ceil((e+r)/7)},enumerable:!1})),Date.isDate||Object.defineProperty(Date,"isDate",{value:function(e){return!("object"!=typeof e||!e.getTime)},enumerable:!1}),Date.prototype.format||Object.defineProperty(Date.prototype,"format",{value:function(e){e=e||"Y-m-d H:i:s";let t,n={fullyear:this.getFullYear(),year:this.getYear(),fullweek:this.getFullWeek(),week:this.getWeek(),month:this.getMonth()+1,date:this.getDate(),day:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][this.getDay()],hours:this.getHours(),minutes:this.getMinutes(),seconds:this.getSeconds()};n.g=n.hours>12?n.hours-12:n.hours,t={Y:n.fullyear,y:n.year,m:n.month<10?"0"+n.month:n.month,n:n.month,d:n.date<10?"0"+n.date:n.date,j:n.date,H:n.hours<10?"0"+n.hours:n.hours,h:n.g<10?"0"+n.g:n.g,G:n.hours,g:n.g,i:n.minutes<10?"0"+n.minutes:n.minutes,s:n.seconds<10?"0"+n.seconds:n.seconds,W:n.fullweek,w:n.week,D:n.day};for(let n in t)e=e.replace(new RegExp(n,"g"),t[n]);return e},enumerable:!1});let N=function(e){return new N.init(e)};N.nextTick=new function(){let e=window.setImmediate,t=window.MutationObserver;if(e)return e.bind(window);let n=[];if(t){let e=document.createTextNode("anot");new t(function(){let e=n.length;for(let t=0;t>>0)return!0}return!1}(e))for(let n=0,r=e.length;n1){if(!e)return;if(n=n||{},n=Object.assign({expires:"",path:"/",domain:document.domain,secure:""},n),"string"==this.type(t)&&""===t.trim()||null===t)return document.cookie=s(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain="+n.domain+"; path="+n.path,!0;if(n.expires)switch(n.expires.constructor){case Number:n.expires=n.expires===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n.expires;break;case String:n.expires="; expires="+n.expires;break;case Date:n.expires="; expires="+n.expires.toUTCString()}return document.cookie=s(e)+"="+s(t)+n.expires+"; domain="+n.domain+"; path="+n.path+"; "+n.secure,!0}return e?c(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+s(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null:document.cookie},search:function(e){e+="";let t=location.search;if(!e||!t)return null;t=(t=(t=c(t)).slice(1)).split("&");let n={};for(let e,r=0;e=t[r++];){let t=e.split("=");t[1]=t.length<2?null:t[1],t[1]=t[1],n.hasOwnProperty(t[0])?"object"==typeof n[t[0]]?n[t[0]].push(t[1]):(n[t[0]]=[n[t[0]]],n[t[0]].push(t[1])):n[t[0]]=t[1]}return n.hasOwnProperty(e)?n[e]:null},copy:function(e){try{navigator.clipboard.writeText(e)}catch(e){a("复制到粘贴板失败",e)}}});let O=N.bindingHandlers={},E=N.bindingExecutors={},S=N.directives={};N.directive=function(e,t){return O[e]=t.init=t.init||w,E[e]=t.update=t.update||w,S[e]=t};let D=new function(){function e(e){this.size=0,this.limit=e,this.head=this.tail=void 0,this._keymap={}}let t=e.prototype;return t.put=function(e,t){let n={key:e,value:t};return this._keymap[e]=n,this.tail?(this.tail.newer=n,n.older=this.tail):this.head=n,this.tail=n,this.size===this.limit?this.shift():this.size++,t},t.shift=function(){let e=this.head;e&&(this.head=this.head.newer,this.head.older=e.newer=e.older=this._keymap[e.key]=void 0,delete this._keymap[e.key])},t.get=function(e){let t=this._keymap[e];if(void 0!==t)return t===this.tail?t.value:(t.newer&&(t===this.head&&(this.head=t.newer),t.newer.older=t.older),t.older&&(t.older.newer=t.newer),t.newer=void 0,t.older=this.tail,this.tail&&(this.tail.newer=t),this.tail=t,t.value)},e};n.contains||(Node.prototype.contains=function(e){return!!(16&this.compareDocumentPosition(e))}),N.contains=function(e,t){try{for(;t=t.parentNode;)if(t===e)return!0;return!1}catch(e){return!1}};let _=N.eventHooks;function P(e){for(var t in e)if(v.call(e,t)){var n=e[t];"function"==typeof P.plugins[t]?P.plugins[t](n):"object"==typeof P[t]?N.mix(P[t],n):P[t]=n}return this}void 0===n.onmousewheel&&(_.mousewheel={type:"wheel",fix:function(e,t){return function(n){n.wheelDeltaY=n.wheelDelta=n.deltaY>0?-120:120,n.wheelDeltaX=0,Object.defineProperty(n,"type",{value:"mousewheel"}),t.call(e,n)}}}),N.config=P;var L,M,H,F,B=/[-.*+?^${}()|[\]\/\\]/g;function I(e){return(e+"").replace(B,"\\$&")}var R={interpolate:function(e){if(L=e[0],M=e[1],L===M)throw new SyntaxError("openTag!==closeTag");P.openTag=L,P.closeTag=M;var t=I(L),n=I(M);H=new RegExp(t+"([\\s\\S]*)"+n),F=new RegExp(t+"([\\s\\S]*)"+n,"g"),new RegExp(t+"[\\s\\S]*"+n+"|\\s:")}};function q(t,r){var i=this.$events||(this.$events={}),a=i[t]||(i[t]=[]);if("function"==typeof r){var o=r;o.uuid="_"+ ++e,(r={element:b,type:"user-watcher",handler:w,vmodels:[this],expr:t,uuid:o.uuid}).wildcard=/\*/.test(t)}if(r.update)r.oneTime||N.Array.ensure(a,r);else{if(/\w\.*\B/.test(t)||"*"===t){r.getter=w;var s=this;r.update=function(){var e=this.fireArgs||[];e[2]&&r.handler.apply(s,e),delete this.fireArgs},a.sync=!0,N.Array.ensure(a,r)}else N.injectBinding(r);o&&(r.handler=o)}return function(){r.update=r.getter=r.handler=w,r.element=n.createElement("a")}}function V(t,n){var r=this.$events,i=null;if(r&&r[t]){n&&(n[2]=t);var a=r[t];if(function(t,n){if(!t)return;new Date-se>444&&"object"==typeof t[0]&&le();for(var r,i=[],a=[],o=0;r=t[o++];)"user-watcher"===r.type?i.push(r):a.push(r);if(P.async){for(dt.render(),o=0;r=a[o++];)if(r.update){r.uuid=r.uuid||"_"+ ++e;var s=r.uuid;dt.queue[s]||(dt.queue[s]="__",dt.queue.push(r))}}else for(o=0;r=a[o++];)r.update&&r.update();for(o=0;r=i[o++];)(n&&n[2]===r.expr||r.wildcard)&&(r.fireArgs=n),r.update()}(a,n),n&&r["*"]&&!/\./.test(t))for(var o,s=0;o=r["*"][s++];)try{o.handler.apply(this,n)}catch(e){}(i=this.$up)&&(this.$pathname&&V.call(i,this.$pathname+"."+t,n),V.call(i,"*."+t,n))}else{if(i=this.$up,this.$ups){for(var c in this.$ups)V.call(this.$ups[c],c+"."+t,n);return}if(i){var l=this.$pathname;""===l&&(l="*");var u=l+"."+t;a=u.split("."),n=n&&n.concat([u,t])||[u,t],-1===a.indexOf("*")?(V.call(i,u,n),a[1]="*",V.call(i,a.join("."),n)):V.call(i,u,n)}}}P.plugins=R,P.plugins.interpolate(["{{","}}"]),P.async=!0,P.paths={},P.shim={},P.maxRepeatSize=100;var W=C("$id,$watch,$fire,$events,$model,$active,$pathname,$up,$ups,$track,$accessors");function z(e,t){return(t=t||{}).watch=!0,U(e,t)}function U(e,t){if(!e||e.$id&&e.$accessors||e.nodeName&&e.nodeType>0)return e;var n,r=(t=t||u).force||u,i=t.old,o=i&&i.$accessors||u,s=new function(){},c={},l={},f=[],p=[],d={},h=e.state,v=e.computed,m=e.methods,y=e.props,g=e.watch,b=e.mounted;if(delete e.state,delete e.computed,delete e.methods,delete e.props,delete e.watch,e.skip&&(d=C(e.skip),delete e.skip),h)for(x in e.$id&&delete h.props,h){var $=h[x];W[x]||(l[x]=!0),"function"==typeof $||$&&$.nodeName&&$.nodeType>0||!r[x]&&("$"===(n=x).charAt(0)||"__"===n.slice(0,2)||W[n]||d[x])?f.push(x):Y($)?(a("warning:计算属性建议放在[computed]对象中统一定义"),v[x]=$):(p.push(x),o[x]?c[x]=o[x]:c[x]=G(x,$))}if(v)for(var x in delete v.props,v)l[x]=!0,function(e,t){var n;"function"==typeof t&&(t={get:t,set:w}),"function"!=typeof t.set&&(t.set=w),c[e]={get:function(){return n=t.get.call(this)},set:function(r){var i,a=n;t.set.call(this,r),i=this[e],this.$fire&&i!==a&&this.$fire(e,i,a)},enumerable:!0,configurable:!0}}(x,v[x]);if(m)for(var x in delete m.props,m)l[x]=!0,f.push(x);if(y)for(var x in X(s,"props",{}),l.props=!!e.$id,y)s.props[x]=y[x];if(Object.assign(e,h,m),c.$model=Z,s=Object.defineProperties(s,c,e),f.forEach(function(t){s[t]=e[t]}),X(s,"$id","anonymous"),X(s,"$up",i?i.$up:null),X(s,"$track",Object.keys(l)),X(s,"$active",!1),X(s,"$pathname",i?i.$pathname:""),X(s,"$accessors",c),X(s,"$events",{}),X(s,"$refs",{}),X(s,"$children",[]),X(s,"hasOwnProperty",function(e){return!0===l[e]}),X(s,"$mounted",b),t.watch&&(X(s,"$watch",function(){return q.apply(s,arguments)}),X(s,"$fire",function(e,t){if(0===e.indexOf("all!")){var n=e.slice(4);for(var r in N.vmodels){(i=N.vmodels[r]).$fire&&i.$fire.apply(i,[n,t])}}else if(0===e.indexOf("child!")){n="props."+e.slice(6);for(var r in s.$children){var i;(i=s.$children[r]).$fire&&i.$fire.apply(i,[n,t])}}else V.call(s,e,[t])})),p.forEach(function(e){var t=i&&i[e],n=s[e]=h[e];n&&"object"==typeof n&&!Date.isDate(n)&&(n.$up=s,n.$pathname=e),V.call(s,e,[n,t])}),g)for(var k in delete g.props,g)if(Array.isArray(g[k]))for(var A;A=g[k].pop();)q.call(s,k,A);else q.call(s,k,g[k]);return s.$active=!0,"anonymous"!==s.$id&&i&&i.$up&&i.$up.$children&&i.$up.$children.push(s),s}function Y(e){if(e&&"object"==typeof e){for(var t in e)if("get"!==t&&"set"!==t)return!1;return"function"==typeof e.get}}function G(e,t){var n;t=NaN;return{get:function(){return this.$active&&function(e,t){for(;;){if(e.$watch){var n=e.$events||(e.$events={}),r=n[t]||(n[t]=[]);return void ae.collectDependency(r)}if(!(e=e.$up))break;t=e.$pathname+"."+t}}(this,e),t},set:function(r){if(t!==r){var i=t;(n=J(r,t))?t=n:(n=void 0,t=r),Object(n)===n&&(n.$pathname=e,n.$up=this),this.$active&&V.call(this,e,[t,i])}},enumerable:!0,configurable:!0}}function J(e,t,n,r){if(Array.isArray(e))return function(e,t,n){if(t&&t.splice){var r=[0,t.length].concat(e);return t.splice.apply(t,r),t}for(var i in ee)e[i]=ee[i];X(e,"$up",null),X(e,"$pathname",""),X(e,"$track",ne(e.length)),e._=U({state:{length:NaN}},{watch:!0}),e._.length=e.length,e._.$watch("length",function(t,n){V.call(e.$up,e.$pathname+".length",[t,n])}),n&&X(e,"$watch",function(){return q.apply(e,arguments)}),Object.defineProperty(e,"$model",Z);for(var a=0,o=e.length;a>>=0)>this.length)throw Error(e+"set方法的第一个参数不能大于原数组长度");if(this[e]!==t){var n=this[e];this.splice(e,1,t),V.call(this.$up,this.$pathname+".*",[t,n,null,e])}},contains:function(e){return this.indexOf(e)>-1},ensure:function(e){return this.contains(e)||this.push(e),this},pushArray:function(e){return this.push.apply(this,K(e))},remove:function(e){return this.removeAt(this.indexOf(e))},removeAt:function(e){return e>>>=0,this.splice(e,1)},size:function(){return this._.length},removeAll:function(e){if(Array.isArray(e))for(var t=this.length-1;t>=0;t--)-1!==e.indexOf(this[t])&&(te.call(this.$track,t,1),te.call(this,t,1));else if("function"==typeof e)for(t=this.length-1;t>=0;t--){e(this[t],t)&&(te.call(this.$track,t,1),te.call(this,t,1))}else te.call(this.$track,0,this.length),te.call(this,0,this.length);this.notify(),this._.length=this.length},clear:function(){this.removeAll()}},te=Q.splice;function ne(e){for(var t=[],n=0;n2){n[1],n.length;n=[n[0],n[1]].concat(ne(n.length-2))}}Array.prototype[t].apply(e,n)}(this.$track,e,n),this.notify(),this._.length=this.length,a}}),"sort,reverse".replace(f,function(e){ee[e]=function(){var t=this.concat(),n=Math.random(),r=[],i=!1;Q[e].apply(this,arguments);for(var a=0,o=t.length;a444&&le())}(n,t)}}),t.getter=He(t.expr,t.vmodels,t),t.observers.forEach(function(e){e.v.$watch(e.p,t)}),delete t.observers);try{var r,i,o=t.fireArgs;if(delete t.fireArgs,o)r=o[0],i=o[1];else if("on"===t.type)r=t.getter+"";else try{r=t.getter.apply(0,t.args)}catch(e){r=null}if(i=void 0===i?t.oldValue:i,t._filters&&(r=cn.$filter.apply(0,[r].concat(t._filters))),t.signature){var s=N.type(r);if("array"!==s&&"object"!==s)throw Error("warning:"+t.expr+"只能是对象或数组");t.xtype=s;var c=function(e,t){for(var n,r=[],i=0;n=e[i++];)r.push(t?n.$id:n.$key);return r.join(";")}(t.proxies||[],s),l=r.$track||("array"===s?ne(r.length):Object.keys(r));t.track=l,c!==l.join(";")&&(t.handler(r,i),t.oldValue=1)}else Array.isArray(r)&&r.length!==(i&&i.length)?(t.handler(r,i),t.oldValue=r.concat()):"oldValue"in t&&r===i||(t.handler(r,i),t.oldValue=Array.isArray(r)?r.concat():r)}catch(e){delete t.getter,a("warning:exception throwed in [Anot.injectBinding] ",e);var u=t.element;u&&3===u.nodeType&&(u.nodeValue=L+(t.oneTime?"::":"")+t.expr+M)}finally{n&&ae.end()}},t.update()};var oe=N.$$subscribers=[],se=new Date;var ce=0;function le(e){for(var t=ce||oe.length,n=0;e=oe[--t];)if(e.i<7){if(null===e.element){oe.splice(t,1),e.list&&(N.Array.remove(e.list,e),delete oe[e.uuid]);continue}if(fe(e.element)){if(oe.splice(t,1),N.Array.remove(e.list,e),ue(e),n++>500){ce=t;break}continue}e.i++,7===e.i&&(e.i=14)}else e.i--;se=new Date}function ue(e){for(var t in delete oe[e.uuid],e.element=null,e.rollback&&e.rollback(),e)e[t]=null}function fe(e){try{e.parentNode.nodeType}catch(e){return!0}return e.ifRemove&&!b.contains(e.ifRemove)&&i===e.parentNode?(e.parentNode&&e.parentNode.removeChild(e),!0):e.msRetain?0:1===e.nodeType?!b.contains(e):!N.contains(b,e)}var pe=new function(){N.mix(this,{option:n.createElement("select"),thead:n.createElement("table"),td:n.createElement("tr"),area:n.createElement("map"),tr:n.createElement("tbody"),col:n.createElement("colgroup"),legend:n.createElement("fieldset"),_default:n.createElement("div"),g:n.createElementNS("http://www.w3.org/2000/svg","svg")}),this.optgroup=this.option,this.tbody=this.tfoot=this.colgroup=this.caption=this.thead,this.th=this.td};String("circle,defs,ellipse,image,line,path,polygon,polyline,rect,symbol,text,use").replace(f,function(e){pe[e]=pe.g});var de=/<([\w:]+)/,he=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ve=C(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),me=n.createElement("script"),ye=/<|&#?\w+;/;function ge(e){return e.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function be(e){return e.indexOf("-")<0&&e.indexOf("_")<0?e:e.replace(/[-_][^-_]/g,function(e){return e.charAt(1).toUpperCase()})}N.parseHTML=function(e){var t=$.cloneNode(!1);if("string"!=typeof e)return t;if(!ye.test(e))return t.appendChild(n.createTextNode(e)),t;e=e.replace(he,"<$1>").trim();var r,i=(de.exec(e)||["",""])[1].toLowerCase(),a=pe[i]||pe._default;a.innerHTML=e;var o=a.getElementsByTagName("script");if(o.length)for(var s,c=0;s=o[c++];)if(ve[s.type]){var l=me.cloneNode(!1);y.forEach.call(s.attributes,function(e){l.setAttribute(e.name,e.value)}),l.text=s.text,s.parentNode.replaceChild(l,s)}for(;r=a.firstChild;)t.appendChild(r);return t},N.innerHTML=function(e,t){var n=this.parseHTML(t);this.clearHTML(e).appendChild(n)},N.clearHTML=function(e){for(e.textContent="";e.firstChild;)e.removeChild(e.firstChild);return e},"add,remove".replace(f,function(e){N.fn[e+"Class"]=function(t){var n=this[0];return t&&"string"==typeof t&&n&&1===n.nodeType&&t.replace(/\S+/g,function(t){n.classList[e](t)}),this}}),N.fn.mix({attr:function(e,t){return 2===arguments.length?(this[0].setAttribute(e,t),this):this[0].getAttribute(e)},data:function(e,t){var n=arguments.length,r=this[0].dataset;switch((e=ge(e||""))||(n=0),n){case 2:return r[e]=t,this;case 1:return xe(r[e]);case 0:var i=o();for(var a in r)i[a]=xe(r[a]);return i}},removeData:function(e){return e="data-"+ge(e),this[0].removeAttribute(e),this},css:function(e,t){if(N.isPlainObject(e))for(var n in e)N.css(this,n,e[n]);else var r=N.css(this,e,t);return void 0!==r?r:this},position:function(){var e,t,n=this[0],r={top:0,left:0};if(n)return"fixed"===this.css("position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),"HTML"!==e[0].tagName&&(r=e.offset()),r.top+=N.css(e[0],"borderTopWidth",!0),r.left+=N.css(e[0],"borderLeftWidth",!0),r.top-=e.scrollTop(),r.left-=e.scrollLeft()),{top:t.top-r.top-N.css(n,"marginTop",!0),left:t.left-r.left-N.css(n,"marginLeft",!0)}},offsetParent:function(){for(var e=this[0].offsetParent;e&&"static"===N.css(e,"position");)e=e.offsetParent;return N(e||b)},bind:function(e,t,n){if(this[0])return N.bind(this[0],e,t,n)},unbind:function(e,t,n){return this[0]&&N.unbind(this[0],e,t,n),this},val:function(e){var t,n,r=this[0];if(r&&1===r.nodeType){var i=0===arguments.length,a=i?":get":":set",o=je[(t=r,n=t.tagName.toLowerCase(),("input"===n&&/checkbox|radio/.test(t.type)?"checked":n)+a)];if(o)var s=o(r,e);else{if(i)return(r.value||"").replace(/\r/g,"");r.value=e}}return i?s:this}}),N.parseJSON=JSON.parse;var $e=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/;function xe(e){try{if("object"==typeof e)return e;e="true"===e||"false"!==e&&("null"===e?null:+e+""===e?+e:$e.test(e)?JSON.parse(e):e)}catch(e){}return e}N.fireDom=function(e,t,r){var i=n.createEvent("Events");i.initEvent(t,!0,!0),N.mix(i,r),e.dispatchEvent(i)},N.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){N.fn[e]=function(n){var r=this[0]||{},i=function(e){return e.window&&e.document?e:9===e.nodeType&&e.defaultView}(r),a="scrollTop"===e;if(!arguments.length)return i?i[t]:r[e];i?i.scrollTo(a?i[t]:n,a?n:i[t]):r[e]=n}});var we=N.cssHooks=o(),ke=["","-webkit-","-moz-","-ms-"],Ce={float:"cssFloat"};N.cssNumber=C("animationIterationCount,animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom"),N.cssName=function(e,t,n){if(Ce[e])return Ce[e];t=t||b.style;for(var r=0,i=ke.length;r-1)&&(n=!0);n||(e.selectedIndex=-1)}},Te={};["break,case,catch,continue,debugger,default,delete,do,else,false","finally,for,function,if,in,instanceof,new,null,return,switch,this","throw,true,try,typeof,var,void,while,with","abstract,boolean,byte,char,class,const,double,enum,export,extends","final,float,goto,implements,import,int,interface,long,native","package,private,protected,public,short,static,super,synchronized","throws,transient,volatile","arguments,let,yield,async,await,undefined"].join(",").replace(/\w+/g,function(e){Te[e]=!0});var Oe=/[a-z_$]/i,Ee=/[\s\uFEFF\xA0]/;function Se(e,t){if(t&&!Te[t])return e.push(t),!0}function De(e,t,n,r){for(var i,a=[],o=" = "+n+".",s=e.length;i=e[--s];){var c=i.split(".")[0];t.hasOwnProperty(c)&&(a.push(c+o+c),r.observers.push({v:t,p:i,type:N.type(t[c])}),e.splice(s,1))}return a}var _e=/(proxy\-[a-z]+)\-[\-0-9a-f]+$/,Pe=new D(218),Le=new D(128);function Me(e){e=e.trim();var t=Pe.get(e);if(t)return t.concat();for(var n,r=function e(t,n){var r=[],i=!!n;n=n||0;for(var a="unknown",o="",s=0;s0){var t=e.replace(st,function(e){return Array(e.length+1).join("1")}).replace(ot,"ᄢ㍄").indexOf("|");if(t>-1)return{type:"text",filters:e.slice(t).trim(),expr:e.slice(0,t)}}return{type:"text",expr:e,filters:""}}function ut(e){for(var t,n,r=[],i=0;;){if(-1===(n=e.indexOf(L,i)))break;if((t=e.slice(i,n))&&r.push({expr:t}),i=n+L.length,-1===(n=e.indexOf(M,i)))break;(t=e.slice(i,n))&&r.push(lt(t.replace(ct,""))),i=n+M.length}return(t=e.slice(i))&&r.push({expr:t}),r}function ft(e,t,r){var i=[],a=ut(e.data);if(a.length){for(var o,s=0;o=a[s++];){var c=n.createTextNode(o.expr);o.type&&(o.expr=o.expr.replace(Ge,function(){return o.oneTime=!0,""}),o.element=c,o.filters=o.filters.replace(at,function(){return o.type="html",""}),o.pos=1e3*r+s,i.push(o)),$.appendChild(c)}e.parentNode.replaceChild($,e),i.length&&Ye(i,t)}}var pt=function(){this.queue=[]};pt.prototype={render:function(e){if(!this.locked){this.locked=e?b.offsetHeight+10:1;var t=this;N.nextTick(function(){t.flush()})}},flush:function(){for(var e,t=0;e=this.queue[t++];)e.update&&e.update();this.locked=0,this.queue=[]}};var dt=new pt,ht={};["autofocus,autoplay,async,allowTransparency,checked,controls","declare,disabled,defer,defaultChecked,defaultSelected","contentEditable,isMap,loop,multiple,noHref,noResize,noShade","open,readOnly,selected"].join(",").replace(f,function(e){ht[e.toLowerCase()]=e});N.directive("attr",{init:function(e){if(e.expr=Fe(e.expr.trim()),"include"===e.type){var t=e.element;St(t,e),e.includeRendered=Ue(t,"data-rendered",e.vmodels),e.includeLoaded=Ue(t,"data-loaded",e.vmodels);var r=e.includeReplace=t.hasAttribute("replace");t.hasAttribute("cache")&&(e.templateCache={}),e.start=n.createComment(":include"),e.end=n.createComment(":include-end"),r?(e.element=e.end,e._element=t,t.parentNode.insertBefore(e.start,t),t.parentNode.insertBefore(e.end,t.nextSibling)):(t.insertBefore(e.start,t.firstChild),t.appendChild(e.end))}},update:function(e){var t=this.element,n=Object.create(null),r=d.test(t);if(e=K(e),this.param)e&&"object"==typeof e?Array.isArray(e)?n[this.param]=e:Date.isDate(e)?n[this.param]=e.toISOString():n[this.param]=e:n[this.param]=e;else{if(!e||"object"!=typeof e||Array.isArray(e)||Date.isDate(e))return;n=e}for(var i in n)if("style"!==i){if("xlink:"===i.slice(0,6)){var a=i;n[i=i.slice(6)]=n[a],delete n[a]}if(!1!==n[i]&&null!==n[i]&&void 0!==n[i]||(n[i]=""),"boolean"==typeof t[i]||"boolean"==typeof t[ht[i]]){a=i;if(ht[i]&&a!==ht[i]&&(a=ht[i]),n[i]=!!n[i],t[a]=n[i],!n[i]){t.removeAttribute(a);continue}}!r&&i in t.cloneNode(!1)?t[i]=n[i]:("object"==typeof n[i]&&(n[i]=Date.isDate(n[i])?n[i].toISOString():JSON.stringify(n[i])),t.setAttribute(i,n[i]))}else t.style.cssText=n[i]}});N.directive("class",{init:function(e){if(e.expr=e.expr.replace(/\n/g," ").replace(/\s+/g," "),"hover"===e.type||"active"===e.type){var t=new Function("return "+e.expr)();if(!e.hasBindEvent){var n=e.element,r=N(n),i="mouseenter",a="mouseleave";if("active"===e.type){n.tabIndex=n.tabIndex||-1,i="mousedown",a="mouseup";var o=r.bind("mouseleave",function(){r.removeClass(t)})}}var s=r.bind(i,function(){r.addClass(t)}),c=r.bind(a,function(){r.removeClass(t)});e.rollback=function(){r.unbind("mouseleave",o),r.unbind(i,s),r.unbind(a,c)},e.hasBindEvent=!0}},update:function(e){if("class"===this.type){var t=e;if(!t||this.param)return a('class指令语法错误 %c %s="%s"',"color:#f00",this.name,this.expr);for(var n in"string"==typeof t&&((t={})[e]=!0),N.isPlainObject(t)||(t=t.$model),t)this.element.classList.toggle(n,!!t[n])}}}),"hover,active".replace(f,function(e){S[e]=S.class}),N.directive("css",{init:S.attr.init,update:function(e){var t=N(this.element);if(this.param)t.css(this.param,e);else{if("object"!=typeof e)return a(':css指令格式错误 %c %s="%s"',"color:#f00",this.name,this.expr);var n=e;N.isPlainObject(n)||(n=e.$model),t.css(n)}}}),N.directive("data",{priority:100,init:S.attr.init,update:function(e){var t=N(this.element);if(this.param)t.data(this.param,e);else{if("object"!=typeof e)return a(':data指令格式错误 %c %s="%s"',"color:#f00",this.name,this.expr);var n=e;for(var r in N.isPlainObject(n)||(n=e.$model),n)t.data(r,n[r])}}});var vt=/^(?:checkbox|radio)$/,mt=/^(?:radio|checked)$/,yt=/^(file|button|reset|submit|checkbox|radio|range)$/;N.directive("duplex",{priority:2e3,init:function(e,t){var n=e.element,r=e.vmodels;e.changed=Ue(n,"data-changed",r)||w;var i=[],o=C("string,number,boolean,checked");"radio"===n.type&&""===e.param&&(e.param="checked"),e.param.replace(p,function(r){vt.test(n.type)&&mt.test(r)&&(r="checked",e.isChecked=!0,e.xtype="radio"),o[r]&&(t=!0),N.Array.ensure(i,r)}),t||i.push("string"),e.param=i.join("-"),e.xtype||(e.xtype="SELECT"===n.tagName?"select":"checkbox"===n.type?"checkbox":"radio"===n.type?"radio":/^change/.test(n.getAttribute("data-event"))?"change":"input"),n.expr=e.expr;var s=e.bound=function(t,r){n.addEventListener(t,r,!1);var i=e.rollback;e.rollback=function(){n.anotSetter=null,N.unbind(n,t,r),i&&i()}};function c(t){e.changed.call(this,t)}var l=!1;var u=function(t){var r=n.value;if(!l&&r!==e.oldValue&&null!==e.pipe){var i=e.pipe(r,e,"get");e.oldValue=r,e.setter(i),c.call(n,i),N.fireDom(n,"change")}};switch(e.xtype){case"radio":s("click",function(){var t=e.pipe(n.value,e,"get");e.setter(t),c.call(n,t)});break;case"checkbox":s("change",function(){var t=n.checked?"ensure":"remove",r=e.getter.apply(0,e.vmodels);Array.isArray(r)||(a(":duplex应用于checkbox上要对应一个数组"),r=[r]);var i=e.pipe(n.value,e,"get");N.Array[t](r,i),c.call(n,r)});break;case"change":s("change",u);break;case"input":s("input",u),s("keyup",u),s("compositionstart",function(){l=!0}),s("compositionend",function(){l=!1,setTimeout(u)}),s("DOMAutoComplete",u);break;case"select":s("change",function(){var t=N(n).val();if((t=Array.isArray(t)?t.map(function(t){return e.pipe(t,e,"get")}):e.pipe(t,e,"get"))+""!==e.oldValue)try{e.setter(t)}catch(e){a(e)}}),s("datasetchanged",function(t){if("selectDuplex"===t.bubble){var r=e._value,i=Array.isArray(r)?r.map(String):r+"";N(n).val(i),n.oldValue=i+"",c.call(n,i)}})}"input"!==e.xtype||yt.test(n.type)||("hidden"!==n.type&&(s("focus",function(){n.msFocus=!0}),s("blur",function(){n.msFocus=!1})),n.anotSetter=u,kt(function(){if(b.contains(n))n.msFocus||u();else if(!n.msRetain)return!1}))},update:function(e){var t,n=this.element;this.init||((this.pipe||(this.pipe=bt))(null,this,"init"),this.init=1);switch(this.xtype){case"input":n.value=e;break;case"change":if((t=this.pipe(e,this,"set"))!==this.oldValue){var r=!1;if(n.msFocus)try{var i=n.selectionStart;if(i===n.selectionEnd){var a=i;r=!0}}catch(e){}n.value=this.oldValue=t,r&&!n.readOnly&&(n.selectionStart=n.selectionEnd=a)}break;case"radio":t=this.isChecked?!!e:e+""===n.value,n.checked=t;break;case"checkbox":var o=[].concat(e);t=this.pipe(n.value,this,"get"),n.checked=o.indexOf(t)>-1;break;case"select":this._value=e,n.msHasEvent?N.fireDom(n,"datasetchanged",{bubble:n.msHasEvent}):n.msHasEvent="selectDuplex"}}});function gt(e){return null==e?"":e}function bt(e,t,n,r){return t.param.replace(p,function(r){var i=N.duplexHooks[r];i&&"function"==typeof i[n]&&(e=i[n](e,t))}),e}N.duplexHooks={checked:{get:function(e,t){return!t.oldValue}},string:{get:function(e){return e},set:gt},boolean:{get:function(e){return"true"===e},set:gt},number:{get:function(e,t){var n=+e;return+e===n?n:0},set:gt}};var $t,xt=[];function wt(){for(var e=xt.length-1;e>=0;e--){!1===(0,xt[e])()&&xt.splice(e,1)}xt.length||clearInterval($t)}N.tick=function(e){1===xt.push(e)&&($t=setInterval(wt,60))};var kt=w;new function(){try{var e={},t=HTMLInputElement.prototype,n=HTMLTextAreaElement.prototype;function r(t){e[this.tagName].call(this,t),!this.msFocus&&this.anotSetter&&this.anotSetter()}var i=HTMLInputElement.prototype;Object.getOwnPropertyNames(i),e.INPUT=Object.getOwnPropertyDescriptor(t,"value").set,Object.defineProperty(t,"value",{set:r}),e.TEXTAREA=Object.getOwnPropertyDescriptor(n,"value").set,Object.defineProperty(n,"value",{set:r})}catch(e){kt=N.tick}},N.directive("effect",{priority:5,init:function(e){var t,n,r=e.expr,i=r.replace(F,function(e){return e.replace(/./g,"0")}).indexOf(":");-1===i?(t=r,n=!0):(t=r.slice(0,i),n=r.slice(i+1)),t=H.test(r)?Fe(t):We(t),e.expr="["+t+","+n+"]"},update:function(e){var t=e[0],n=this.element;if(n.getAttribute("data-effect-name")!==t){n.removeAttribute("data-effect-driver");var r=n.style,i=window.getComputedStyle?window.getComputedStyle(n):null,a=!1;if(i&&(Nt||jt)){var o=r[Tt]||i[Tt];o&&"0s"!==o&&(n.setAttribute("data-effect-driver","t"),a=!0),a||(o=r[Ot]||i[Ot])&&"0s"!==o&&(n.setAttribute("data-effect-driver","a"),a=!0)}a||N.effects[t]&&(n.setAttribute("data-effect-driver","j"),a=!0),a&&n.setAttribute("data-effect-name",t)}}}),N.effects={},N.effect=function(e,t){N.effects[e]=t};var Ct,At,Nt=!1,jt=!1,Tt=N.cssName("transition-duration"),Ot=N.cssName("animation-duration");new function(){var e,t,n={TransitionEvent:"transitionend",WebKitTransitionEvent:"webkitTransitionEnd",OTransitionEvent:"oTransitionEnd",otransitionEvent:"otransitionEnd"};for(var r in n){if(window[r]){e=n[r];break}try{document.createEvent(r);e=n[r];break}catch(e){}}for(r in"string"==typeof e&&(Nt=!0,Ct=e),n={AnimationEvent:"animationend",WebKitAnimationEvent:"webkitAnimationEnd"})if(window[r]){t=n[r];break}"string"==typeof t&&(Nt=!0,At=t)};var Et=[];function St(e,t){var n=e.getAttribute("data-effect-name");if(n){t.effectName=n,t.effectDriver=e.getAttribute("data-effect-driver");var r=+e.getAttribute("data-effect-stagger");t.effectLeaveStagger=+e.getAttribute("data-effect-leave-stagger")||r,t.effectEnterStagger=+e.getAttribute("data-effect-enter-stagger")||r,t.effectClass=e.className||NaN}}function Dt(e){return e.replace(/^[\S]/g,function(e){return e.toUpperCase()})}var _t=new pt;function Pt(){}function Lt(e,t){var n=e.callbacks[t+"Class"];return"string"==typeof n?n:"function"==typeof n?n():e.name+"-"+t}function Mt(e,t,n){var r=e.callbacks[t];r&&r.call(e,e.el,n)}Pt.prototype={contrustor:Pt,enterClass:function(){return Lt(this,"enter")},leaveClass:function(){return Lt(this,"leave")},actionFun:function(e,t,n){if(!document.hidden){var r=this,i=r.el,a="leave"===e;e=a?"leave":"enter",Mt(r,"abort"+Dt(a?"enter":"leave")),Mt(r,"before"+Dt(e)),a||t(i);var o=function(o){i.removeEventListener(r.cssEvent,r.cssCallback),a?(t(i),N(i).removeClass(r.cssClass)):"a"===r.driver&&N(i).removeClass(r.cssClass),!0!==o&&(Mt(r,"after"+Dt(e)),n&&n(i)),r.dispose()};r.useCss?(r.cssCallback&&r.cssCallback(!0),r.cssClass=Lt(r,e),r.cssCallback=o,r.update=function(){i.addEventListener(r.cssEvent,r.cssCallback),a||"t"!==r.driver||N(i).removeClass(r.cssClass)},N(i).addClass(r.cssClass),_t.render(!0),_t.queue.push(r)):Mt(r,e,o)}},enter:function(e,t){this.actionFun.apply(this,["enter"].concat(N.slice(arguments)))},leave:function(e,t){this.actionFun.apply(this,["leave"].concat(N.slice(arguments)))},dispose:function(){this.update=this.cssCallback=null,Et.unshift(this)>100&&Et.pop()}};var Ht=function(e,t){var n=g.call(arguments,0);"function"!=typeof n[2]&&n.splice(2,0,w),"function"!=typeof n[3]&&n.splice(3,0,w);var r=n[2],i=n[3],a=function(e,t){if(!e||1!==e.nodeType)return null;if(t)var n=t.effectName,r=t.effectDriver;else n=e.getAttribute("data-effect-name"),r=e.getAttribute("data-effect-driver");if(!n||!r)return null;var i=Et.pop()||new Pt;return i.el=e,i.driver=r,i.useCss="j"!==r,i.useCss&&(t&&N(e).addClass(t.effectClass),i.cssEvent="t"===r?Ct:At),i.name=n,i.callbacks=N.effects[n]||{},i}(e,n[4]);if(!a)return r(),i(),!1;a[t?"enter":"leave"](r,i)};N.mix(N.effect,{apply:Ht,append:function(e,t,n,r){return Ht(e,1,function(){t.appendChild(e)},n,r)},before:function(e,t,n,r){return Ht(e,1,function(){t.parentNode.insertBefore(e,t)},n,r)},remove:function(e,t,n,r){return Ht(e,0,function(){e.parentNode===t&&t.removeChild(e)},n,r)}}),N.directive("html",{update:function(e){var t=this.element,r=1!==t.nodeType,i=r?t.parentNode:t;if(i){if(e=null==e?"":e,3===t.nodeType){var a=A("html");i.insertBefore(n.createComment(a),t),this.element=n.createComment(a+":end"),i.replaceChild(this.element,t),t=this.element}if("object"!=typeof e)var o=N.parseHTML(String(e));else if(11===e.nodeType)o=e;else if(1===e.nodeType||e.item){var s=1===e.nodeType?e.childNodes:e.item;for(o=$.cloneNode(!0);s[0];)o.appendChild(s[0])}if(s=N.slice(o.childNodes),r){for(var c=t.nodeValue.slice(0,-4);;){var l=t.previousSibling;if(!l||8===l.nodeType&&l.nodeValue===c)break;i.removeChild(l)}i.insertBefore(o,t)}else N.clearHTML(t).appendChild(o);rt(s,this.vmodels)}}}),N.directive("text",{update:function(e){var t=this.element;if(e=null==e?"":e,3===t.nodeType)try{t.data=e}catch(e){}else t.textContent=e}}),N.directive("if",{priority:10,update:function(e){var t,r=this,a=this.element,o=r.stamp=Date.now(),s=function(){o===r.stamp&&(r.recoverNode=null)};r.recoverNode&&r.recoverNode();try{if(!a.parentNode)return;t=a.parentNode}catch(e){return}if(e){function c(){a.getAttribute(r.name)&&(a.removeAttribute(r.name),et(a,r.vmodels)),r.rollback=null}if(8===a.nodeType){var l=r.keep,u=N.effect.apply(l,1,function(){o===r.stamp&&(a.parentNode.replaceChild(l,a),a=r.element=l,l.getAttribute("_required")&&(a.required=!0,a.removeAttribute("_required")),a.querySelectorAll&&N.each(a.querySelectorAll("[_required=true]"),function(e){e.required=!0,e.removeAttribute("_required")}),c())},s);u=!1===u}u||c()}else if(1===a.nodeType){!0===a.required&&(a.required=!1,a.setAttribute("_required","true"));try{N.each(a.querySelectorAll(":required"),function(e){a.required=!1,e.setAttribute("_required","true")})}catch(e){}var f=r.element=n.createComment(":if"),p=a.nextSibling;r.recoverNode=function(){r.recoverNode=null,f.parentNode!==t&&(t.insertBefore(f,p),r.keep=a)},N.effect.apply(a,0,function(){r.recoverNode=null,o===r.stamp&&(a.parentNode.replaceChild(f,a),r.keep=a,i.appendChild(a),r.rollback=function(){a.parentNode===i&&i.removeChild(a)})},s)}}});var Ft=N.templateCache={};function Bt(e){for(var t=n.createDocumentFragment(),r=0,i=e.length;r=200&&this.status<400?m.resolve(this.response):m.reject(this))},v.send(null),m.promise).then(t=>{Ft[e]=t,y(t)}).catch(t=>{a(":include load ["+e+"] error\n%c%s","color:#f30",`获取网络资源出错, ${t.status} (${t.statusText})`)})}}});var It=/\(([^)]*)\)/,Rt=N.directive("on",{priority:3e3,init:function(e){var t=e.expr;e.type="on";var n=e.param.replace(/-\d+$/,"");if("function"==typeof Rt[n+"Hook"]&&Rt[n+"Hook"](e),t.indexOf("(")>0&&t.indexOf(")")>-1){var r=(t.match(It)||["",""])[1].trim();""!==r&&"$event"!==r||(t=t.replace(It,""))}e.expr=t},update:function(e){var t=this,n=this.element;e=function(e){return(t.getter||w).apply(t.args[0],t.args.concat(e))};var r=t.param.replace(/-\d+$/,"");if("scan"===r)e.call(n,{type:r});else if("function"==typeof t.specialBind)t.specialBind(n,e);else var i=N.bind(n,r,e);t.rollback=function(){"function"==typeof t.specialUnbind?t.specialUnbind():N.unbind(n,r,i)}}});function qt(e,t,n){for(var r,i=0;r=e[i++];)r.className===n.effectClass&&N.effect.apply(r,t,w,w,n)}function Vt(e,t,n){return e?setTimeout(t,++n*e):t(),n}function Wt(e,t,n){for(var r=$.cloneNode(!1),i=e,a=i.nodeValue,o=t&&Math.max(+t.staggerIndex,0),s=N.slice(i.parentNode.childNodes),c=s.indexOf(i);;){var l=s[--c];if(!l||0===String(l.nodeValue).indexOf(a))break;!n&&t&&l.className===t.effectClass?(e=l,function(e){t.staggerIndex=Vt(t.effectLeaveStagger,function(){N.effect.apply(e,0,w,function(){r.appendChild(e)},t)},o)}(l)):r.insertBefore(l,r.firstChild)}return r.appendChild(i),r}function zt(e,t,n,r,i){var a=e.template.cloneNode(!0),o=N.slice(a.childNodes);a.appendChild(n.$anchor),i&&t.appendChild(a);n[e.param||"el"];var s={nodes:o,vmodels:[n].concat(e.vmodels),content:a};r.push(s)}function Ut(e){var t=("object"===e.xtype?Kt:Jt)(e);return(t.$anchor||(t.$anchor=e.element.cloneNode(!1))).nodeValue=e.signature,t.$outer=e.$outer,t}function Yt(e,t,n){if("array"===n){e.$remove=function(){t.$repeat.removeAt(e.$index)};var r=t.param;e.$watch(r,function(n){var r=e.$index;t.$repeat[r]=n})}else{var i=t.vars[0],a=t.vars[1];e.$up.$watch(t.expr+"."+e[i],function(n){e[t.param][a]=n,e[a]=n})}}N.directive("for",{priority:90,init:function(e){var t=e.type;e.cache={},e.enterCount=0;var r=e.element;if(1===r.nodeType){var i=e.expr.split(" in ");e.expr=i.pop(),i.length&&(i=i.pop().split(/\s+/)),e.vars=i,r.removeAttribute(e.name),St(r,e);var a=Ue(r,"data-rendered",e.vmodels),o=A(t),s=n.createComment(o+":start"),c=e.element=n.createComment(o+":end");e.signature=o,e.start=s,e.template=$.cloneNode(!1);var l=r.parentNode;if(l.replaceChild(c,r),l.insertBefore(s,c),e.template.appendChild(r),e.element=c,a)var u=N.bind(l,"datasetchanged",function(){a.apply(l,l.args),N.unbind(l,"datasetchanged",u),l.msRendered=a})}},update:function(e,t){var n=this,r=this.xtype;"array"===r?(this.vars.length?1===this.vars.length&&this.vars.unshift("$index"):this.vars.push("$index","el"),this.param=this.vars[1]):(this.param="__el__",this.vars.length?1===this.vars.length&&this.vars.push("$val"):this.vars.push("$key","$val")),this.enterCount+=1;var i=!t;if(i){n.$outer={};var a=this.vars[0],o=this.vars[1];"array"===r&&(a="$first",o="$last");for(var s,c=0;s=n.vmodels[c++];)if(s.hasOwnProperty(a)&&s.hasOwnProperty(o)){n.$outer=s;break}}var l=this.track,u="move";n.$repeat=e;var f=[],p=i&&$.cloneNode(!1),d=[],h=this.param,v=N.mix({},this.cache),m=this.element,y=l.length,g=m.parentNode,b=0;for(c=0;c10,A=m.previousSibling,j=n.start;if(C)for(;A!==j;)g.removeChild(A),A=m.previousSibling;for(c=0;cP.maxRepeatSize&&i.pop(),delete e[t]}}function Qt(e,t){var r="_"+e;if(!Qt[r]){var i=n.createElement(e);b.appendChild(i),t=getComputedStyle(i,null).display,b.removeChild(i),Qt[r]=t}return Qt[r]}N.parseDisplay=Qt,N.directive("visible",{init:function(e){St(e.element,e)},update:function(e){var t,n=this,r=this.element,i=!this.effectName;if(!this.stamp)return t=this.stamp=Date.now(),void(e?(r.style.display=n.display||"","none"===N(r).css("display")&&(r.style.display=n.display=Qt(r.nodeName))):r.style.display="none");t=this.stamp=+new Date,e?N.effect.apply(r,1,function(){if(t===n.stamp){var e=r.getAttribute("data-effect-driver")||"a";i&&(r.style.display=n.display||""),"a"!==e&&"t"!==e||"none"===N(r).css("display")&&(r.style.display=n.display||Qt(r.nodeName))}}):N.effect.apply(r,0,function(){t===n.stamp&&(r.style.display="none")})}});var en=/]*>([\S\s]*?)<\/script\s*>/gim,tn=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,nn=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/gi,rn={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/gi,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/gi,form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/gi},an=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,on=/([^\#-~| |!])/g;function sn(e,t,n,r){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var i=isFinite(+e)?+e:0,a=isFinite(+t)?Math.abs(t):3,o=r||",",s=n||".",c="";return(c=(a?function(e,t){var n=Math.pow(10,t);return""+(Math.round(e*n)/n).toFixed(t)}(i,a):""+Math.round(i)).split("."))[0].length>3&&(c[0]=c[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,o)),(c[1]||"").length>=0)%60,n=Math.floor(e/60),r=Math.floor(n/60);return n=(n%=60)<10?"0"+n:n,t=t<10?"0"+t:t,r>0?(r=r<10?"0"+r:r)+":"+n+":"+t:n+":"+t},$filter:function(e){for(var t=1,n=arguments.length;t/g,">")},currency:function(e,t,n){return(t||"¥")+sn(e,isFinite(n)?n:2)},number:sn,date:function(e,t){var n=e;if(!Date.isDate(n)){var r=+n;if(r==r&&(n=r),"Invalid Date"===(n=new Date(n)).toString())return"Invalid Date"}return n.format(t)}};let ln,un=[],fn=function(e){for(ln=!0;e=un.shift();)e(N)};return"complete"===n.readyState?setTimeout(fn):n.addEventListener("DOMContentLoaded",fn),window.addEventListener("load",fn),N.ready=function(e){ln?e(N):un.push(e)},window.Anot=N,N}();export default _Anot; \ No newline at end of file diff --git a/src/lib/chart/line.js b/src/lib/chart/line.js new file mode 100644 index 0000000..83d738b --- /dev/null +++ b/src/lib/chart/line.js @@ -0,0 +1,253 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + +import $ from '../utils.js' +import '../form/button.js' + +const DARK = '#62778d' +const BLUE = '#64b5f6' +const PLAIN = '#f2f5fc' + +export default class Line extends HTMLElement { + static get observedAttributes() { + return ['list'] + } + + props = { + list: [] + } + + state = { + key: 1, + list: [] + } + + constructor() { + super() + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` +
+ +
+ 1月 + 3月 + 半年 + 1年 + 3年 + 所有 +
+
+` + + var elem = this.root.children[1] + this.__SCENE__ = elem.firstElementChild + this.__FILTER__ = elem.lastElementChild + this.__CTX__ = this.__SCENE__.getContext('2d') + this.__SCENE__.width = 680 + this.__SCENE__.height = 230 + } + + _getTime(n) { + var now = new Date() + var time = { getTime: _ => 0 } + var Y = now.getFullYear() + var m = now.getMonth() + var d = now.getDate() + + switch (n) { + case 1: + time = new Date(Y, m - 1, d, 0, 0, 0) + break + case 3: + time = new Date(Y, m - 3, d, 0, 0, 0) + break + case 6: + time = new Date(Y, m - 6, d, 0, 0, 0) + break + case 12: + time = new Date(Y - 1, m, d, 0, 0, 0) + break + case 36: + time = new Date(Y - 3, m, d, 0, 0, 0) + break + } + return time.getTime() + } + + _filter(n) { + if (n < 999) { + var time = this._getTime(n) + this.state.list = this.props.list.filter(it => it.x >= time) + } else { + this.state.list = this.props.list.concat() + } + } + + draw() { + var { list, key } = this.state + var ctx = this.__CTX__ + var x = 36 + var max = 0 + var min = Number.MAX_SAFE_INTEGER + var step = 0 // 纵坐标间隔 + var dis = +(640 / list.length).toFixed(2) || 1 // 横坐标间隔 + var point + var p1, p2, p3, p4 + var format = key > 12 ? 'Y/m' : 'm/d' + + for (let it of list) { + if (max < it.y) { + max = it.y + } + if (min > it.y) { + min = it.y + } + } + + min = ~~(min / 100) + max = Math.ceil(max / 100) + step = ~~((max - min) / 3) + + p1 = Math.floor(list.length / 4) + p2 = Math.floor(list.length / 2) + p3 = Math.floor((list.length * 3) / 4) + p4 = list.length - 1 + + ctx.clearRect(0, 0, 680, 230) + + // 纵坐标数值 + ctx.font = '12px Arial' + ctx.textAlign = 'right' + ctx.fillStyle = DARK + ctx.fillText(min / 100, 32, 205) + ctx.fillText((min + step) / 100, 32, 155) + ctx.fillText((min + step + step) / 100, 32, 105) + ctx.fillText((min + step + step + step) / 100, 32, 55) + + ctx.font = '10px Arial' + ctx.textAlign = 'left' + ctx.fillText(new Date(list[0].x).format(format), x - 12, 225) + ctx.fillText(new Date(list[p1].x).format(format), x + dis * p1 - 12, 225) + ctx.fillText(new Date(list[p2].x).format(format), x + dis * p2 - 12, 225) + ctx.fillText(new Date(list[p3].x).format(format), x + dis * p3 - 12, 225) + ctx.fillText( + new Date(list[p4].x).format(format), + x + dis * p4 - 12 - (key > 12 ? 24 : 4), + 225 + ) + + // x轴参考线 + ctx.fillStyle = PLAIN + ctx.fillRect(x, 50, 648, 1) + ctx.fillRect(x, 100, 648, 1) + ctx.fillRect(x, 150, 648, 1) + ctx.fillRect(x, 200, 648, 1) + + // y轴参考 线 + ctx.fillRect(x, 0, 1, 210) + ctx.fillRect(x + dis * p1, 0, 1, 210) + ctx.fillRect(x + dis * p2, 0, 1, 210) + ctx.fillRect(x + dis * p3, 0, 1, 210) + ctx.fillRect(x + dis * p4, 0, 1, 210) + + point = list.shift() + + // 曲线 + ctx.beginPath() + ctx.strokeStyle = BLUE + ctx.lineWidth = 1 + ctx.moveTo(x, 200 - (((point.y / 100 - min) / step) * 50).toFixed(0)) + + while (list.length) { + let y + + point = list.shift() + + y = 200 - (((point.y / 100 - min) / step) * 50).toFixed(0) + x += dis + + ctx.lineTo(x, y) + } + ctx.stroke() + } + + connectedCallback() { + $.bind(this.__FILTER__, 'click', ev => { + var el = ev.target + if (this.props.list.length < 1) { + return + } + if (el.tagName === 'WC-BUTTON') { + var k = +el.dataset.key + + $.each(this.__FILTER__.children, function(it) { + it.removeAttribute('color') + }) + el.setAttribute('color', 'blue') + + this.state.key = k + this._filter(k) + this.draw() + } + }) + } + + attributeChangedCallback(name, old, val) { + if (val === null || old === val) { + return + } + switch (name) { + case 'list': + try { + var list = JSON.parse(val) + list.forEach(it => (it.x = it.x * 1000)) + this.props.list = list + this._filter(this.state.key) + this.removeAttribute('list') + this.draw() + } catch (e) {} + break + } + } +} + +if (!customElements.get('wc-line')) { + customElements.define('wc-line', Line) +} diff --git a/src/lib/chart/rank.js b/src/lib/chart/rank.js new file mode 100644 index 0000000..d34a0b6 --- /dev/null +++ b/src/lib/chart/rank.js @@ -0,0 +1,141 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + +const RED = '#ff5061' +const GREEN = '#4caf50' +const BLUE = '#64b5f6' +const GREY = '#bdbdbd' +const PLAIN = '#f2f5fc' +const DARK = '#62778d' + +export default class Rank extends HTMLElement { + static get observedAttributes() { + return ['stat'] + } + + props = { + stat: {} + } + + constructor() { + super() + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + this.__SCENE__ = this.root.children[1] + this.__CTX__ = this.__SCENE__.getContext('2d') + this.__SCENE__.width = 680 + this.__SCENE__.height = 100 + } + + draw() { + var { rank, e1, e3, e6, e12, cm, cp } = this.props.stat + var ctx = this.__CTX__ + var x = 32 + + while (rank.length < 60) { + rank.unshift(0) + } + + ctx.clearRect(0, 0, 680, 101) + + ctx.font = '10px Arial' + ctx.textAlign = 'right' + ctx.fillStyle = RED + ctx.fillText('10%', 28, 10) + ctx.fillText('5%', 28, 30) + ctx.fillStyle = GREEN + ctx.fillText('-5%', 28, 80) + ctx.fillText('-10%', 28, 100) + + ctx.font = '10px menlo,Hiragino Sans GB' + ctx.textAlign = 'left' + ctx.fillStyle = DARK + ctx.fillText('60天红绿榜', 160, 10) + + ctx.font = '12px menlo,Hiragino Sans GB' + ctx.fillText(`最近1个月收益: ${e1}%`, 360, 25) + ctx.fillText(`最近3个月收益: ${e3}%`, 360, 45) + ctx.fillText(`最近半年收益: ${e6}%`, 528, 25) + ctx.fillText(`最近一年收益: ${e12}%`, 528, 45) + + ctx.fillStyle = cp > 0 ? RED : cp === 0 ? GREY : GREEN + ctx.fillRect(360, 65, 140, 20) + ctx.fillRect(526, 65, 140, 20) + ctx.fillStyle = '#fff' + ctx.font = 'bold 14px menlo,Hiragino Sans GB' + ctx.fillText(`实时净值: ¥${cm}`, 364, 80) + ctx.fillText(`实时涨跌: ${cp}%`, 532, 80) + + ctx.fillStyle = PLAIN + ctx.fillRect(28, 25, 320, 1) + ctx.fillRect(28, 75, 320, 1) + ctx.fillStyle = GREY + ctx.fillRect(28, 0, 1, 140) + ctx.fillRect(0, 50, 348, 1) + + while (rank.length) { + var n = rank.shift() + var y = Math.ceil(50 - (n / 10) * 50) + + ctx.fillStyle = n > 0 ? RED : GREEN + + if (y > 50) { + ctx.fillRect(x, 50, 3, y - 50) + } else { + ctx.fillRect(x, y, 3, 50 - y) + } + + x += 5 + } + } + + attributeChangedCallback(name, old, val) { + if (val === null || old === val) { + return + } + switch (name) { + case 'stat': + try { + var stat = JSON.parse(val) + this.props.stat = stat + this.removeAttribute('stat') + this.draw() + } catch (e) {} + break + } + } +} + +if (!customElements.get('wc-rank')) { + customElements.define('wc-rank', Rank) +} diff --git a/src/lib/css/reset-basic.css b/src/lib/css/reset-basic.css new file mode 100644 index 0000000..651aa7f --- /dev/null +++ b/src/lib/css/reset-basic.css @@ -0,0 +1,78 @@ +@charset "UTF-8"; +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2014-10-10 00:45:09 + * + * doui的CSS规范 + * + * 不能出现大写,以连字符风格命名 + * 表示状态的应该用do-st-*命名 + * 表示功能的应该用do-fn-*命名 + * 表示页面模块的应该用do-mod-modname 命名 + * 表示UI组件的应该用do-uiname命名, 它的子元素应该全部包在 .do-uiname这个根类下 + * 如 .do-layer .body { ... } + * + * 样式规则的出现顺序 + * 1 display float position overflow z-index 表示定位/布局的属性 + * 2 width height margin padding border 表示盒子模型的属性 + * 3 line-height font-size vertical-align text-align user-select outline ....排版相关的属性 + * 4 color background opacity cursor ...表示装饰相关的属性 + * 5 content list-style quotes ... 内容生成相关的属性 + * + */ + + +* {margin: 0;padding: 0;vertical-align: baseline;box-sizing:border-box;} +::before,::after {box-sizing:border-box;} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section,content {display: block;} +img {border:0;display:inline-block;} +ol, ul {list-style: none;} +blockquote, q {quotes: none;} +blockquote::before, blockquote::after, +q::before, q::after {content: '';content: none;} +table {border-collapse: collapse;border-spacing: 0;} +a:focus,input,textarea,button:focus,input:focus,textarea:focus {outline:none;} +::-moz-focus-inner { + border:none;outline:none; +} +body {font-family:"Helvetica Neue", Arial,"WenQuanYi Micro Hei","PingFang SC","Hiragino Sans GB","Segoe UI", "Microsoft Yahei", sans-serif;-webkit-font-smoothing: antialiased;text-size-adjust: 100%;-webkit-tap-highlight-color: transparent;} +code,pre,samp {font-family:Menlo,Monaco,Consolas,"Courier New",monospace;} +[anot],[\:repeat],[\:if] {visibility:hidden;} + + +.noselect {-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;user-select: none;} +.noselect img, .noselect a {-webkit-user-drag:none;} +.text-ell {overflow:hidden; white-space:nowrap; text-overflow:ellipsis } +.osx-thin {-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;} + +:root { + --color-teal-1: #4db6ac; + --color-teal-2: #26a69a; + --color-teal-3: #009688; + --color-green-1: #81c784; + --color-green-2: #66bb6a; + --color-green-3: #4caf50; + --color-purple-1: #9575cd; + --color-purple-2: #9575cd; + --color-purple-3: #673ab7; + --color-blue-1: #64b5f6; + --color-blue-2: #42a5f5; + --color-blue-3: #2196f3; + --color-red-1: #ff5061; + --color-red-2: #eb3b48; + --color-red-3: #ce3742; + --color-orange-1: #ffb618; + --color-orange-2: #f39c12; + --color-orange-3: #e67e22; + --color-plain-1: #f2f5fc; + --color-plain-2: #e8ebf4; + --color-plain-3: #dae1e9; + --color-grey-1: #bdbdbd; + --color-grey-2: #9e9e9e; + --color-grey-3: #757575; + --color-dark-1: #62778d; + --color-dark-2: #526273; + --color-dark-3: #425064; +} \ No newline at end of file diff --git a/src/lib/drag/core.js b/src/lib/drag/core.js new file mode 100644 index 0000000..2470449 --- /dev/null +++ b/src/lib/drag/core.js @@ -0,0 +1 @@ +"use strict";import $ from"../utils.js";const DEF_OPT={axis:"",limit:!1,overflow:!0};export default class Drag{constructor(t){this.$elem=t,this._init()}_init(){this.$elem.style.transform="";var{x:t,y:s}=this.$elem.getBoundingClientRect();this.pos={x:t,y:s,_x:0,_y:0}}by(t,s={}){return this.$drag=t,this.opt=Object.assign(Object.create(null),DEF_OPT,s),!1!==this.opt.limit&&(this.opt.overflow=!1),t.style.cursor="move",this._handleResize=$.bind(window,"resize",this._init.bind(this)),this._handleMousedown=$.bind(t,"mousedown",t=>{if(this.disabled)return;var s=this.$elem.getBoundingClientRect();s.x-this.pos._x!==this.pos.x&&(this.pos.x=s.x-this.pos._x),s.y-this.pos._y!==this.pos.y&&(this.pos.y=s.y-this.pos._y);let e=t.pageX,i=t.pageY,o=document.documentElement.clientWidth,n=document.documentElement.clientHeight,h=s.width,p=s.height,d=[0,o-h,n-p,0];if("parent"===this.opt.limit){let t=this.$elem.parentNode.getBoundingClientRect();d=[t.top,t.right-h,t.bottom-p,t.left]}let l=$.bind(document,"mousemove",t=>{t.preventDefault();let o=t.pageX-e+(s.x-this.pos.x),n=t.pageY-i+(s.y-this.pos.y);"x"===this.opt.axis&&(n=0),"y"===this.opt.axis&&(o=0),!1===this.opt.overflow&&(od[1]-this.pos.x&&(o=d[1]-this.pos.x),nd[2]-this.pos.y&&(n=d[2]-this.pos.y)),this.pos._x=o,this.pos._y=n,this.$elem.dispatchEvent(new CustomEvent("dragging",{detail:{offset:{x:this.pos.x+o,y:this.pos.y+n},move:{x:o,y:n}}})),this.$elem.style.transform=`translate(${o}px, ${n}px)`}),m=$.bind(document,"mouseup",t=>{this.$elem.dispatchEvent(new CustomEvent("dragged",{detail:{offset:{x:this.pos.x+this.pos._x,y:this.pos.y+this.pos._y},move:{x:this.pos._x,y:this.pos._y}}})),$.unbind(document,"mousemove",l),$.unbind(document,"mouseup",m)})}),this}on(t,s){if(t&&"function"==typeof s)return $.bind(this,t,s)}off(t,s){$.unbind(this,t,s)}destroy(){$.unbind(window,"resize",this._handleResize),$.unbind(this.$drag,"mousedown",this._handleMousedown),delete this.$elem,delete this.$drag}}; \ No newline at end of file diff --git a/src/lib/drag/index.js b/src/lib/drag/index.js new file mode 100644 index 0000000..ed1d3ef --- /dev/null +++ b/src/lib/drag/index.js @@ -0,0 +1 @@ +"use strict";import Drag from"./core.js";Anot.directive("drag",{priority:1500,init:function(e){e.expr='"'+e.expr+'"',e.overflow=!0,e.axis="xy",e.element.dataset.axis&&(e.axis=e.element.dataset.axis,delete e.element.dataset.axis),e.limit=!1,e.element.dataset.limit&&(e.limit=e.element.dataset.limit,e.overflow=!1,delete e.element.dataset.limit)},update:function(e){var t=this.element;if(e)for(t=this.element.parentNode;t;){if(t.classList||Anot.error(`${this.name}=${this.expr}, 解析异常[元素不存在]`),"WC-LAYER"===t.tagName&&"layer"===e){t=t.root.children[1];break}if(t.classList.contains(e)||t.id===e)break;t=t.parentNode}new Drag(t).by(this.element,{limit:this.limit,axis:this.axis,overflow:this.overflow})}}); \ No newline at end of file diff --git a/src/lib/form/button.js b/src/lib/form/button.js new file mode 100644 index 0000000..98aabd2 --- /dev/null +++ b/src/lib/form/button.js @@ -0,0 +1,484 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import "../icon/index.js" +import $ from "../utils.js" + +const IS_FIREFOX = !!window.sidebar + +export default class Button extends HTMLElement { + + + static get observedAttributes() { + return ["icon","autofocus","loading","disabled","lazy"] + } + + props = { + icon: '', + autofocus: '', + loading: false, + disabled: false, + lazy: 0 // 并发拦截时间, 单位毫秒 + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + + // 圆形按钮不允许文字 + if (this.hasAttribute('circle')) { + this.textContent = '' + } + + this.__BTN__ = this.root.children[1] + this.__ICO__ = this.__BTN__.children[0] + } + + get loading() { + return this.props.loading + } + + set loading(val) { + var type = typeof val + + if (val === this.props.loading) { + return + } + + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.loading = true + this.__ICO__.setAttribute('is', 'loading') + this.setAttribute('loading', '') + } else { + this.props.loading = false + this.__ICO__.setAttribute('is', this.props.icon) + this.removeAttribute('loading') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + } + } + + connectedCallback() { + this.stamp = 0 + + // 阻止事件冒泡, 避免用户自己绑定click事件不受这2个值的限制 + this._handleClick = $.bind(this.__BTN__, 'click', ev => { + var { loading, disabled, lazy } = this.props + var now = Date.now() + + if (loading || disabled) { + return ev.stopPropagation() + } + // 并发拦截 + if (lazy && now - this.stamp < lazy) { + return ev.stopPropagation() + } + this.stamp = now + }) + } + + disconnectedCallback() { + $.unbind(this.__BTN__, 'click', this._handleClick) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'icon': + this.props.icon = val + if (val) { + if (!this.props.loading) { + this.__ICO__.setAttribute('is', val) + } + } else { + this.removeAttribute('icon') + this.__ICO__.removeAttribute('is') + } + break + + case 'autofocus': + this.__BTN__.setAttribute('autofocus', '') + // 辣鸡火狐, 要触发一下focus, 才能聚焦 + if (IS_FIREFOX) { + setTimeout(_ => { + this.__BTN__.focus() + }, 10) + } + break + case 'lazy': + this.props.lazy = val >> 0 + break + + case 'loading': + case 'disabled': + this[name] = true + break + } + } +} + + +if(!customElements.get('wc-button')){ + customElements.define('wc-button', Button) +} diff --git a/src/lib/form/checkbox-item.js b/src/lib/form/checkbox-item.js new file mode 100644 index 0000000..2154488 --- /dev/null +++ b/src/lib/form/checkbox-item.js @@ -0,0 +1,311 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import "../icon/index.js" +import $ from "../utils.js" + +export default class CheckboxItem extends HTMLElement { + + + static get observedAttributes() { + return ["color","value","checked","readonly","disabled"] + } + + props = { + color: '', + value: '', + checked: false, + readonly: false, + disabled: false + } + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + + this.__SWITCH__ = this.root.lastElementChild + this.__ICO__ = this.__SWITCH__.children[0] + + this._isInGroup = false + } + + _checkGroup() { + this._isInGroup = this.parentNode.tagName === 'WC-CHECKBOX' + if (this._isInGroup && this.parentNode.root) { + if (this.parentNode.value.includes(this.value)) { + this.checked = true + } + } + } + + get value() { + return this.props.value + } + + set value(val) { + this.props.value = val + } + + get checked() { + return this.props.checked + } + + set checked(val) { + this.props.checked = !!val + var { checked, color } = this.props + this.__SWITCH__.classList.toggle('checked', checked) + this.__ICO__.setAttribute('is', 'checkbox-' + (checked ? 'on' : 'off')) + + if (checked) { + this.__ICO__.setAttribute('color', color) + } else { + this.__ICO__.removeAttribute('color') + } + } + + get readOnly() { + return this.props.readonly + } + + set readOnly(val) { + var type = typeof val + + if (val === this.props.readonly) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.readonly = true + this.setAttribute('readonly', '') + } else { + this.props.readonly = false + this.removeAttribute('readonly') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + } + } + + connectedCallback() { + this._checkGroup() + + this._handlClick = $.bind(this, 'click', ev => { + ev.preventDefault() + + if (this.disabled || this.readOnly) { + return + } + + this.checked = !this.checked + + if (this._isInGroup) { + this.parentNode.dispatchEvent( + new CustomEvent('child-picked', { + detail: { value: this.value, checked: this.checked } + }) + ) + } else { + this.dispatchEvent(new CustomEvent('input')) + } + }) + } + + disconnectedCallback() { + $.unbind(this, 'click', this._handlClick) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'value': + case 'color': + this.props[name] = val + break + + case 'checked': + case 'readonly': + case 'disabled': + var k = name + if (k === 'readonly') { + k = 'readOnly' + } + this[k] = true + break + } + } +} + + +if(!customElements.get('wc-checkbox-item')){ + customElements.define('wc-checkbox-item', CheckboxItem) +} diff --git a/src/lib/form/checkbox.js b/src/lib/form/checkbox.js new file mode 100644 index 0000000..7e199e7 --- /dev/null +++ b/src/lib/form/checkbox.js @@ -0,0 +1,142 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import $ from "../utils.js" +import "./checkbox-item.js" + +export default class Checkbox extends HTMLElement { + + + static get observedAttributes() { + return ["value"] + } + + props = { + value: [] + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + } + + _updateChildrenStat() { + Array.from(this.children).forEach(it => { + if (it.tagName === 'WC-CHECKBOX-ITEM' && it.root) { + if (this.value.includes(it.value)) { + it.checked = true + } else { + it.checked = false + } + } + }) + } + + get value() { + return this.props.value + } + + set value(val) { + if (val === this.props.value) { + return + } + this.props.value = val + this._updateChildrenStat() + } + + connectedCallback() { + this._pickedFn = $.bind(this, 'child-picked', ev => { + var tmp = [...this.props.value] + var idx = tmp.indexOf(ev.detail.value) + if (ev.detail.checked) { + if (idx < 0) { + tmp.push(ev.detail.value) + } + } else { + if (~idx) { + tmp.splice(idx, 1) + } + } + this.props.value = tmp + this.dispatchEvent(new CustomEvent('input')) + }) + } + + disconnectedCallback() { + $.unbind(this, 'child-picked', this._pickedFn) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'value': + if (val) { + this.value = val.split(/,\s*?/) + } + break + } + } +} + + +if(!customElements.get('wc-checkbox')){ + customElements.define('wc-checkbox', Checkbox) +} diff --git a/src/lib/form/input.js b/src/lib/form/input.js new file mode 100644 index 0000000..1d232c3 --- /dev/null +++ b/src/lib/form/input.js @@ -0,0 +1,617 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import "../scroll/index.js" +import "../icon/index.js" +import $ from "../utils.js" + +const TYPES = ['text', 'textarea', 'password'] +const INPUTS = { + text: '', + textarea: '' +} + +export default class Input extends HTMLElement { + + + static get observedAttributes() { + return ["value","icon","type","placeholder","maxlength","minlength","autofocus","readonly","disabled"] + } + + props = { + value: '', + icon: '', + type: 'text', + placeholder: '', + maxlength: null, + minlength: null, + autofocus: false, + readonly: false, + disabled: false + } + + + state = { + mvidx: null //下拉列表光标的索引ID + } + + constructor() { + super(); + var type = this.getAttribute('type') + var input = '' + + if (type !== 'textarea') { + type = 'text' + } + + input = INPUTS[type] + + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` +
+ + ${input} + + + +
+ +
    +
    +
    +
    +` + + + this.props.type = type + + this.__OUTER__ = this.root.children[1] + this.__PREPEND__ = this.__OUTER__.children[0] + this.__INPUT__ = this.__OUTER__.children[1] + this.__ICO__ = this.__OUTER__.children[2] + this.__APPEND__ = this.__OUTER__.children[3] + this.__LIST__ = this.__OUTER__.children[4] + } + + get readOnly() { + return this.props.readonly + } + + set readOnly(val) { + var type = typeof val + + if (val === this.props.readonly) { + return + } + + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.readonly = true + this.setAttribute('readonly', '') + this.__INPUT__.setAttribute('readonly', '') + } else { + this.props.readonly = false + this.removeAttribute('readonly') + this.__INPUT__.removeAttribute('readonly') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + this.__INPUT__.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + this.__INPUT__.removeAttribute('disabled') + } + } + + get value() { + return this.__INPUT__.value + } + + set value(val) { + this.__INPUT__.value = val + } + + get type() { + return this.__INPUT__.type + } + + set type(val) { + if (val !== 'textarea') { + this.__INPUT__.type = val + } + } + + // 移动光标选择下拉选项 + _moveSelect(ev) { + var { list } = this.props + if (list && list.length) { + ev.preventDefault() + var step = ev.keyCode === 38 ? -1 : 1 + var items = Array.from( + this.__LIST__.firstElementChild.firstElementChild.children + ) + if (this.state.mvidx === null) { + this.state.mvidx = 0 + } else { + this.state.mvidx += step + } + if (this.state.mvidx < 0) { + this.state.mvidx = 0 + } else if (this.state.mvidx > items.length - 1) { + this.state.mvidx = items.length - 1 + } + items.forEach((it, i) => { + if (i === this.state.mvidx) { + this.__LIST__.firstElementChild.scrollTop = it.offsetTop - 150 + it.setAttribute('focus', '') + } else { + it.removeAttribute('focus') + } + }) + } + } + + // 触发列表选择 + _fetchSelect(idx, ev) { + var item = this.props.list[idx] + this.value = item.value + this.dispatchEvent( + new CustomEvent('select', { + detail: item + }) + ) + this._handleChange(ev) + this.__LIST__.classList.remove('show') + this.state.mvidx = null + } + + _updateAttr() { + var { maxlength, minlength } = this.props + + if (maxlength && maxlength > 0) { + this.__INPUT__.setAttribute('maxlength', maxlength) + } else { + this.__INPUT__.removeAttribute('maxlength') + } + if (minlength && minlength > 0) { + this.__INPUT__.setAttribute('minlength', minlength) + } else { + this.__INPUT__.removeAttribute('minlength') + } + } + + connectedCallback() { + var prepend = this.__PREPEND__.assignedNodes() + var append = this.__APPEND__.assignedNodes() + var { type } = this.props + + // 相同插槽, 只允许1个 + while (prepend.length > 1) { + this.removeChild(prepend.pop()) + } + while (append.length > 1) { + this.removeChild(append.pop()) + } + + if (prepend.length && type !== 'textarea') { + this.__OUTER__.setAttribute('prepend', '') + } + if (append.length && type !== 'textarea') { + this.__OUTER__.setAttribute('append', '') + } + + this._updateAttr() + + // 键盘事件 + this._handleSubmit = $.catch(this.__INPUT__, 'keydown', ev => { + if (this.disabled || this.readOnly) { + return + } + // up: 38, down: 40 + if (ev.keyCode === 38 || ev.keyCode === 40) { + // 仅普通文本表单, 密码和多行文本框不做响应 + if (type === 'text') { + return this._moveSelect(ev) + } + } + // 回车触发submit事件 + // textarea 要按Ctrl Or Cmd键, 才会触发 + if (ev.keyCode === 13) { + // 如果是输入建议存在,则第1次回车的时候, 不触发提交 + if (type === 'text' && this.state.mvidx !== null) { + return this._fetchSelect(this.state.mvidx, ev) + } + + if ( + type === 'text' || + (type === 'textarea' && (ev.ctrlKey || ev.metaKey)) + ) { + this.dispatchEvent( + new CustomEvent('submit', { + detail: this.value + }) + ) + } + } + }) + + // 非textarea, 可做输入建议功能 + if (type === 'text') { + // 输入状态事件 + this._handleChange = $.bind(this.__INPUT__, 'input', ev => { + ev.preventDefault() + this.dispatchEvent( + new CustomEvent('fetch-suggest', { + detail: { + value: this.value, + send: list => { + this.props.list = list + this._parseSuggestion() + } + } + }) + ) + }) + + // 渲染建议列表 + this._parseSuggestion = $.bind(this.__INPUT__, 'click', ev => { + var { list } = this.props + let { x, y, width } = this.getBoundingClientRect() + if (list && list.length) { + var html = list + .map((it, i) => `
  • ${it.value}
  • `) + .join('') + this.__LIST__.firstElementChild.firstElementChild.innerHTML = html + this.__LIST__.classList.toggle('show', true) + this.__LIST__.style.cssText = `left:${x}px;top:${y + + 50}px;width:${width}px;` + } else { + this.__LIST__.classList.toggle('show', false) + } + }) + + this._inactiveFn = $.outside(this, ev => { + this.__LIST__.classList.remove('show') + }) + + // 选择建议 + this._handleSelect = $.bind(this.__LIST__, 'click', ev => { + if (ev.target.tagName === 'LI') { + this._fetchSelect(ev.target.dataset.idx, ev) + this.dispatchEvent(new CustomEvent('input')) + } + }) + } else { + this._handleWheel = $.catch(this.__INPUT__, 'wheel') + } + } + + disconnectedCallback() { + $.unbind(this.__INPUT__, 'wheel', this._handleWheel) + $.unbind(this.__INPUT__, 'keydown', this._handleSubmit) + $.unbind(this.__INPUT__, 'input', this._handleChange) + $.unbind(this.__LIST__, 'click', this._handleSelect) + $.clearOutside(this._inactiveFn) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'icon': + this.props.icon = val + if (val) { + this.__ICO__.setAttribute('is', val) + } else { + this.removeAttribute('icon') + this.__ICO__.removeAttribute('is') + } + break + + case 'autofocus': + this.__INPUT__.setAttribute('autofocus', '') + // 辣鸡火狐, 要触发一下focus, 才能聚焦 + setTimeout(_ => { + this.__INPUT__.focus() + }, 10) + + break + + case 'placeholder': + this.__INPUT__.setAttribute('placeholder', val) + break + + case 'type': + if (~TYPES.indexOf(val)) { + this.type = val + } else { + this.type = 'text' + } + break + + case 'value': + this.value = val + break + + case 'maxlength': + case 'minlength': + this.props[name] = val + this._updateAttr() + break + + case 'readonly': + case 'disabled': + var k = name + if (k === 'readonly') { + k = 'readOnly' + } + this[k] = true + break + } + } +} + + +if(!customElements.get('wc-input')){ + customElements.define('wc-input', Input) +} diff --git a/src/lib/form/number.js b/src/lib/form/number.js new file mode 100644 index 0000000..e6cc97a --- /dev/null +++ b/src/lib/form/number.js @@ -0,0 +1,413 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import "../scroll/index.js" +import "../icon/index.js" +import $ from "../utils.js" + +export default class Number extends HTMLElement { + + + static get observedAttributes() { + return ["value","max","min","step","autofocus","readonly","disabled"] + } + + props = { + value: 0, + max: null, + min: null, + step: 1, + autofocus: false, + readonly: false, + disabled: false + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` +
    + - + + + + + +
    +` + + + this.__OUTER__ = this.root.children[1] + this.__INPUT__ = this.__OUTER__.children[1] + } + + get readOnly() { + return this.props.readonly + } + + set readOnly(val) { + var type = typeof val + + if (val === this.props.readonly) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.readonly = true + this.setAttribute('readonly', '') + this.__INPUT__.setAttribute('readonly', '') + } else { + this.props.readonly = false + this.removeAttribute('readonly') + this.__INPUT__.removeAttribute('readonly') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + this.__INPUT__.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + this.__INPUT__.removeAttribute('disabled') + } + } + + get value() { + return this.props.value + } + + set value(val) { + var n = +val + if (n === n) { + val = n + } else { + val = 0 + } + this.props.value = val + this.__INPUT__.value = val + + this._checkActionEnable() + } + + _checkActionEnable() { + var { max, min, value } = this.props + var n = value + + if (min !== null) { + if (min > n) { + n = min + } + this.__OUTER__.children[0].classList.toggle('disabled', value <= min) + } + if (max !== null) { + if (max < n) { + n = max + } + this.__OUTER__.children[2].classList.toggle('disabled', value >= max) + } + if (n !== value) { + this.props.value = n + this.__INPUT__.value = n + this.dispatchEvent(new CustomEvent('input')) + } + } + + _updateValue(act) { + var { max, min, value, step } = this.props + if (act === '+') { + if (max !== null && max < value + step) { + return + } + value += step + } else { + if (min !== null && min > value - step) { + return + } + value -= step + } + this.props.value = +value.toFixed(2) + this.__INPUT__.value = this.props.value + this._checkActionEnable() + this.dispatchEvent(new CustomEvent('input')) + } + + connectedCallback() { + // 键盘事件 + this._handleSubmit = $.catch(this.__INPUT__, 'keydown', ev => { + if (this.disabled || this.readOnly) { + return + } + + // up: 38, down: 40 + if (ev.keyCode === 38 || ev.keyCode === 40) { + ev.preventDefault() + return this._updateValue(ev.keyCode === 38 ? '+' : '-') + } + // 回车触发submit事件 + if (ev.keyCode === 13) { + ev.preventDefault() + this.dispatchEvent( + new CustomEvent('submit', { + detail: this.value + }) + ) + } + }) + + this._handleChange = $.catch(this.__INPUT__, 'change', ev => { + if (isFinite(this.__INPUT__.value)) { + this.props.value = +this.__INPUT__.value + if (!this.__INPUT__.value.endsWith('.')) { + this.__INPUT__.value = this.props.value + } + } else { + this.__INPUT__.value = this.props.value = 0 + } + this.dispatchEvent(new CustomEvent('input')) + }) + + this._handleAction = $.bind(this.__OUTER__, 'click', ev => { + if (this.disabled || this.readOnly) { + return + } + var target = ev.target + + if (target.tagName === 'SPAN' || target.parentNode === 'SPAN') { + var act = target.dataset.act || target.parentNode.dataset.act + + this._updateValue(act) + } + }) + } + + disconnectedCallback() { + $.unbind(this.__INPUT__, 'keydown', this._handleSubmit) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'autofocus': + this.__INPUT__.setAttribute('autofocus', '') + // 辣鸡火狐, 要触发一下focus, 才能聚焦 + setTimeout(_ => { + this.__INPUT__.focus() + }, 10) + break + + case 'value': + this.value = val >> 0 + break + + case 'step': + case 'max': + case 'min': + var n = +val + if (n === n) { + this.props[name] = n + } + this._checkActionEnable() + break + + case 'readonly': + case 'disabled': + var k = name + if (k === 'readonly') { + k = 'readOnly' + } + this[k] = true + break + } + } +} + + +if(!customElements.get('wc-number')){ + customElements.define('wc-number', Number) +} diff --git a/src/lib/form/progress.js b/src/lib/form/progress.js new file mode 100644 index 0000000..7e8128a --- /dev/null +++ b/src/lib/form/progress.js @@ -0,0 +1,163 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +export default class Progress extends HTMLElement { + + + static get observedAttributes() { + return ["value","max"] + } + + props = { + value: 0, + max: 1 + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + this.__THUMB__ = this.root.children[1].lastElementChild + } + + get value() { + return this.props.value + } + + set value(val) { + this.props.value = +val + this.calculate() + } + + calculate() { + var { max, value } = this.props + this.__THUMB__.style.width = `${(100 * value) / max}%` + } + + connectedCallback() { + this.calculate() + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'max': + var max = +val + if (max !== max || max < 1) { + max = 1 + } + this.props.max = max + this.calculate() + break + + case 'value': + var v = +val + if (v === v) { + this.props.value = v + this.calculate() + } + break + } + } +} + + +if(!customElements.get('wc-progress')){ + customElements.define('wc-progress', Progress) +} diff --git a/src/lib/form/radio-item.js b/src/lib/form/radio-item.js new file mode 100644 index 0000000..af33309 --- /dev/null +++ b/src/lib/form/radio-item.js @@ -0,0 +1,308 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import $ from "../utils.js" + +export default class RadioItem extends HTMLElement { + + + static get observedAttributes() { + return ["value","checked","readonly","disabled"] + } + + props = { + value: '', + checked: false, + readonly: false, + disabled: false + } + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + + this.__SWITCH__ = this.root.lastElementChild + } + + get value() { + return this.props.value + } + + set value(val) { + this.props.value = val + } + + get checked() { + return this.props.checked + } + + set checked(val) { + this.props.checked = !!val + this.__SWITCH__.classList.toggle('checked', this.props.checked) + } + + get readOnly() { + return this.props.readonly + } + + set readOnly(val) { + var type = typeof val + + if (val === this.props.readonly) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.readonly = true + this.setAttribute('readonly', '') + } else { + this.props.readonly = false + this.removeAttribute('readonly') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + } + } + + connectedCallback() { + if (this.value === this.parentNode.value) { + this.checked = true + } + + this._handleClick = $.catch(this, 'click', ev => { + if (this.disabled || this.readOnly || this.checked) { + return + } + + this.parentNode.dispatchEvent( + new CustomEvent('child-picked', { detail: this.value }) + ) + }) + } + + disconnectedCallback() { + $.unbind(this, 'click', this._handleClick) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'value': + this.value = val + break + + case 'checked': + case 'readonly': + case 'disabled': + var k = name + if (k === 'readonly') { + k = 'readOnly' + } + this[k] = true + break + } + } +} + + +if(!customElements.get('wc-radio-item')){ + customElements.define('wc-radio-item', RadioItem) +} diff --git a/src/lib/form/radio.js b/src/lib/form/radio.js new file mode 100644 index 0000000..b541f48 --- /dev/null +++ b/src/lib/form/radio.js @@ -0,0 +1,130 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import $ from "../utils.js" +import "./radio-item.js" + +export default class Radio extends HTMLElement { + + + static get observedAttributes() { + return ["value"] + } + + props = { + value: null + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + } + + _updateChildrenStat() { + Array.from(this.children).forEach(it => { + if (it.tagName === 'WC-RADIO-ITEM' && it.root) { + if (it.value === this.props.value) { + it.checked = true + } else { + it.checked = false + } + } + }) + } + + get value() { + return this.props.value + } + + set value(val) { + if (val === this.props.value) { + return + } + this.props.value = val + this._updateChildrenStat() + } + + connectedCallback() { + this._pickedFn = $.bind(this, 'child-picked', ev => { + log('radio picked: ', ev.detail) + this.value = ev.detail + this.dispatchEvent(new CustomEvent('input')) + }) + } + + disconnectedCallback() { + $.unbind(this, 'child-picked', this._pickedFn) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'value': + this.value = val + break + } + } +} + + +if(!customElements.get('wc-radio')){ + customElements.define('wc-radio', Radio) +} diff --git a/src/lib/form/select.js b/src/lib/form/select.js new file mode 100644 index 0000000..c411c33 --- /dev/null +++ b/src/lib/form/select.js @@ -0,0 +1,559 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import "../scroll/index.js" +import "../icon/index.js" +import $ from "../utils.js" + +function parseOptions(arr, props) { + let html = '' + for (let it of arr) { + if (it.list) { + html += `
    ${it.name}
    ` + for (let _ of it.list) { + props.DICT[_.value] = _ + if (!_.disabled) { + props.LIST.push(_) + } + html += `
    ${_.label}
    ` + } + } else { + if (!it.disabled) { + props.LIST.push(it) + } + props.DICT[it.value] = it + html += `
    ${it.label}
    ` + } + } + return html +} + +export default class Select extends HTMLElement { + + + static get observedAttributes() { + return ["label","placeholder","multi","value","options","mvidx","readonly","disabled"] + } + + props = { + label: '', + placeholder: '', + multi: '', + value: '', + options: '', + mvidx: null, //下拉列表光标的索引ID + readonly: false, + disabled: false + } + + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` +
    + + + + +
    + +
    +
    +
    +
    +` + + + this.__OUTER__ = this.root.children[1] + this.__PREPEND__ = this.__OUTER__.children[0] + this.__INPUT__ = this.__OUTER__.children[1] + this.__APPEND__ = this.__OUTER__.children[3] + this.__OPTG__ = this.__OUTER__.children[4] + } + + get readOnly() { + return this.props.readonly + } + + set readOnly(val) { + var type = typeof val + + if (val === this.props.readonly) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.readonly = true + this.setAttribute('readonly', '') + } else { + this.props.readonly = false + this.removeAttribute('readonly') + } + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + this.__INPUT__.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + this.__INPUT__.removeAttribute('disabled') + } + } + + get value() { + return this.props.value + } + + set value(val) { + var { DICT, active } = this.props + this.props.value = val + this.__INPUT__.value = (DICT && DICT[val] && DICT[val].label) || val + if (!active) { + this._updateStyle() + } + } + + _renderOptions(options) { + this.props.DICT = {} + this.props.LIST = [] + var elem = this.__OPTG__.firstElementChild.firstElementChild + + elem.innerHTML = parseOptions(options, this.props) + this.props.ITEMS = Array.from(elem.children).filter(it => { + return it.tagName === 'DD' && !it.hasAttribute('disabled') + }) + this.value = this.props.value + } + + // 移动光标选择下拉选项 + _moveSelect(ev) { + var { LIST, DICT, ITEMS } = this.props + if (LIST && LIST.length) { + ev.preventDefault() + var step = ev.keyCode === 38 ? -1 : 1 + + if (this.props.mvidx === null) { + this.props.mvidx = 0 + } else { + this.props.mvidx += step + } + if (this.props.mvidx < 0) { + this.props.mvidx = 0 + } else if (this.props.mvidx > ITEMS.length - 1) { + this.props.mvidx = ITEMS.length - 1 + } + + ITEMS.forEach((it, i) => { + if (i === this.props.mvidx) { + this.__OPTG__.firstElementChild.scrollTop = it.offsetTop - 150 + it.setAttribute('focus', '') + } else { + it.removeAttribute('focus') + } + }) + } + } + + _updateStyle(idx) { + var { LIST, ITEMS, value } = this.props + if (LIST && LIST.length) { + if (idx === undefined) { + for (let i = -1, it; (it = LIST[++i]); ) { + if (value === it.value) { + idx = i + break + } + } + } + this.props.mvidx = idx + ITEMS.forEach((it, i) => { + if (i === idx) { + it.setAttribute('focus', '') + } else { + it.removeAttribute('focus') + } + }) + } + } + + // 触发列表选择 + _fetchSelect(idx, needUpdateStyle) { + var item = this.props.LIST[idx] + this.value = item.value + this.dispatchEvent( + new CustomEvent('select', { + detail: item + }) + ) + if (needUpdateStyle) { + this._updateStyle(idx) + } + this.props.active = false + this.__OPTG__.classList.remove('show') + } + + connectedCallback() { + var prepend = this.__PREPEND__.assignedNodes() + var append = this.__APPEND__.assignedNodes() + + // 相同插槽, 只允许1个 + while (prepend.length > 1) { + this.removeChild(prepend.pop()) + } + while (append.length > 1) { + this.removeChild(append.pop()) + } + + if (prepend.length && this.props.type !== 'textarea') { + this.__OUTER__.setAttribute('prepend', '') + } + if (append.length && this.props.type !== 'textarea') { + this.__OUTER__.setAttribute('append', '') + } + + function initPos() { + var { x, y, width } = this.getBoundingClientRect() + var size = this.getAttribute('size') + this.props.active = true + if (size && size === 'mini') { + y += 32 + } else { + y += 50 + } + this.__OPTG__.style.cssText = `left:${x}px;top:${y}px;width:${width}px;` + } + + /* ---------------------------------------------------- */ + /* ----------------- 各种事件 ------------------ */ + /* ---------------------------------------------------- */ + + // 键盘事件 + this._handleKeydown = $.catch(this.__INPUT__, 'keydown', ev => { + if (this.disabled || this.readOnly) { + return + } + // up: 38, down: 40 + if (ev.keyCode === 38 || ev.keyCode === 40) { + if (!this.props.active) { + initPos.call(this) + this.__OPTG__.classList.toggle('show', true) + return + } + return this._moveSelect(ev) + } + // 回车触发select事件 + if (ev.keyCode === 13) { + if (this.props.mvidx !== null && this.props.active) { + return this._fetchSelect(this.props.mvidx) + } + } + }) + + // 渲染列表 + this._activeFn = $.bind(this.__INPUT__, 'click', ev => { + var { options } = this.props + + if (this.disabled || this.readOnly) { + return + } + + initPos.call(this) + this.__OPTG__.classList.toggle('show') + }) + + // 选择选项 + this._handleSelect = $.bind(this.__OPTG__, 'click', ev => { + if (ev.target.tagName === 'DD' && !ev.target.hasAttribute('disabled')) { + this._fetchSelect(+ev.target.dataset.idx, true) + this.dispatchEvent(new CustomEvent('input')) + } + }) + + this._inactiveFn = $.outside(this, ev => { + this.__OPTG__.classList.toggle('show', false) + this.props.active = false + }) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + // label和placeholder 功能相同 + case 'label': + case 'placeholder': + this.__INPUT__.setAttribute('placeholder', val) + break + + case 'options': + if (val) { + try { + this._renderOptions(JSON.parse(val)) + } catch (err) {} + this.removeAttribute('options') + } + break + + case 'value': + this.value = val + break + + case 'readonly': + case 'disabled': + var k = name + if (k === 'readonly') { + k = 'readOnly' + } + this[k] = true + break + } + } + + disconnectedCallback() { + $.unbind(this.__INPUT__, 'keydown', this._handleKeydown) + $.unbind(this.__INPUT__, 'click', this._activeFn) + $.unbind(this.__OPTG__, 'click', this._handleSelect) + $.clearOutside(this._inactiveFn) + } +} + + +if(!customElements.get('wc-select')){ + customElements.define('wc-select', Select) +} diff --git a/src/lib/form/star.js b/src/lib/form/star.js new file mode 100644 index 0000000..c9a93ac --- /dev/null +++ b/src/lib/form/star.js @@ -0,0 +1,301 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import $ from "../utils.js" + +export default class Star extends HTMLElement { + + + static get observedAttributes() { + return ["value","text","size","color","'allow-half'","'show-value'","starSize","disabled"] + } + + props = { + value: 0, + text: [], + size: '', + color: '', + 'allow-half': false, + 'show-value': false, + starSize: 32, // 星星的宽度, 用于实现半星 + disabled: false + } + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` + +` + + + this.__BOX__ = this.root.children[1] + this.__STARS__ = Array.from(this.__BOX__.children) + this.__TEXT__ = this.__STARS__.pop() + } + + get value() { + return this.props.value + } + + set value(val) { + var v = +val + var tmp = val >> 0 + if (v === v && v > 0) { + val = v + } else { + val = 0 + } + + if (val > 5) { + val = 5 + } + + this.props.value = val + this._updateDraw(-1) + } + + /** + * 更新图标渲染 + * i: int + * f: float + */ + _updateDraw(i, f = 0) { + var _last = 'star-half' + var { value, tmp = { i: 0, f: 0 } } = this.props + + if (i === -1) { + i = Math.floor(value) + f = +(value % 1).toFixed(1) + if (i > 0 && i === value) { + i-- + f = 1 + } + } + + if (!this.props['allow-half']) { + f = f > 0 ? 1 : 0 + } + // 减少DOM操作 + if (i === tmp.i && f === tmp.f) { + return + } + + if (f > 0.5) { + _last = 'star-full' + } + + this.__STARS__.forEach((it, k) => { + it.setAttribute('is', k < i ? 'star-full' : 'star') + it.setAttribute('color', k < i ? this.props.color : 'grey') + }) + + if (f > 0) { + this.__STARS__[i].setAttribute('is', _last) + this.__STARS__[i].setAttribute('color', this.props.color) + } + + // 缓存结果 + this.props.tmp = { i, f } + + if (i === 0 && f === 0) { + this.__TEXT__.textContent = '' + } else { + if (this.props.text.length === 5) { + this.__TEXT__.textContent = this.props.text[i] + } else { + if (this.props['show-value']) { + this.__TEXT__.textContent = i + f + } + } + } + } + + connectedCallback() { + $.catch(this.__BOX__, 'mousemove', ev => { + if (this.props.disabled) { + return + } + if (ev.target.tagName === 'WC-ICON') { + let idx = +ev.target.dataset.idx + this._updateDraw(idx, +(ev.offsetX / this.props.starSize).toFixed(1)) + } + }) + + $.catch(this.__BOX__, 'click', ev => { + var { tmp, disabled } = this.props + if (disabled) { + return + } + if (ev.target.tagName === 'WC-ICON') { + this.props.value = tmp.i + tmp.f + this.dispatchEvent(new CustomEvent('input')) + } + }) + + $.catch(this.__BOX__, 'mouseleave', ev => { + if (this.props.disabled) { + return + } + this._updateDraw(-1) + }) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'size': + this.props.starSize = this.__STARS__[0].clientWidth + break + + case 'allow-half': + case 'show-value': + case 'disabled': + this.props[name] = true + break + + case 'color': + if (val) { + this.props.color = val + } + break + + case 'text': + if (val) { + val = val.split('|') + if (val.length === 5) { + this.props.text = val.map(it => it.trim()) + } + } + break + + case 'value': + this.value = val + break + } + } +} + + +if(!customElements.get('wc-star')){ + customElements.define('wc-star', Star) +} diff --git a/src/lib/form/switch.js b/src/lib/form/switch.js new file mode 100644 index 0000000..9288822 --- /dev/null +++ b/src/lib/form/switch.js @@ -0,0 +1,241 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-12-08 11:30:52 + * @version v1.0.0 + * + */ + + +import $ from "../utils.js" +export default class Switch extends HTMLElement { + + + static get observedAttributes() { + return ["'active-text'","'inactive-text'","checked","disabled"] + } + + props = { + 'active-text': null, + 'inactive-text': null, + checked: false, + disabled: false + } + + constructor() { + super(); + + Object.defineProperty(this, 'root', { + value: this.attachShadow({ mode: 'open' }), + writable: true, + enumerable: false, + configurable: true + }) + + this.root.innerHTML = ` +
    + + +
    +` + + + this.__SWITCH__ = this.root.lastElementChild.firstElementChild + } + + get value() { + return this.props.checked + } + + set value(val) { + this.checked = val + } + + get checked() { + return this.props.checked + } + + set checked(val) { + this.props.checked = !!val + this.__SWITCH__.classList.toggle('checked', this.props.checked) + } + + get disabled() { + return this.props.disabled + } + + set disabled(val) { + var type = typeof val + + if (val === this.props.disabled) { + return + } + if ((type === 'boolean' && val) || type !== 'boolean') { + this.props.disabled = true + this.setAttribute('disabled', '') + } else { + this.props.disabled = false + this.removeAttribute('disabled') + } + } + + connectedCallback() { + this._handleClick = $.bind(this, 'click', ev => { + if (this.disabled) { + return + } + this.checked = !this.checked + if (this.checked) { + if (this.props['active-text'] !== null) { + this.textContent = this.props['active-text'] + } + } else { + if (this.props['inactive-text'] !== null) { + this.textContent = this.props['inactive-text'] + } + } + this.dispatchEvent(new CustomEvent('input')) + }) + } + + disconnectedCallback() { + $.unbind(this, 'click', this._handleClick) + } + + attributeChangedCallback(name, old, val) { +if (val === null || old === val) {return} + switch (name) { + case 'checked': + case 'disabled': + this[name] = true + break + case 'active-text': + case 'inactive-text': + this.props[name] = val + '' + break + } + } +} + + +if(!customElements.get('wc-switch')){ + customElements.define('wc-switch', Switch) +} diff --git a/src/lib/icon/index.js b/src/lib/icon/index.js new file mode 100644 index 0000000..7f1e547 --- /dev/null +++ b/src/lib/icon/index.js @@ -0,0 +1,15 @@ +/** + * + * @authors yutent (yutent@doui.cc) + * @date 2020-07-07 16:27:17 + * @version v2.0.1 + * + */ + +'use strict' + +import SVG_DICT from"./svg.js";let dict=SVG_DICT;window.EXT_SVG_DICT&&Object.assign(dict,EXT_SVG_DICT);export default class Icon extends HTMLElement{static get observedAttributes(){return["is"]}constructor(){super(),Object.defineProperty(this,"root",{value:this.attachShadow({mode:"open"}),writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(this,"props",{value:{is:""},writable:!0,enumerable:!1,configurable:!0}),this.root.innerHTML=" ",this.__ICO__=this.root.lastElementChild,this.drawPath()}get is(){return this.props.is}set is(o){o&&this.setAttribute("is",o)}drawPath(){var{is:o}=this.props,t=dict[o];this.__ICO__&&o&&t&&(this.__ICO__.innerHTML="loading"===o?t:``,this.__ICO__.classList.toggle("load","loading"===o))}attributeChangedCallback(o,t,e){if(null!==e&&t!==e)switch(o){case"is":this.props.is=e,e?this.drawPath():this.removeAttribute("is")}}}; + +if(!customElements.get('wc-icon')){ + customElements.define('wc-icon', Icon) +} diff --git a/src/lib/icon/svg.js b/src/lib/icon/svg.js new file mode 100644 index 0000000..9da6381 --- /dev/null +++ b/src/lib/icon/svg.js @@ -0,0 +1 @@ +"use strict";const SVG_PATH={android:"M733.9 338.6C723.1 214.3 628.3 117 512.9 117s-210.2 97.3-221 221.6h442zM393 232.6c0-12.4 8.9-22.4 20-22.4 11 0 19.9 10.1 19.9 22.4 0 12.4-8.9 22.4-19.9 22.4-11.1 0-20-10-20-22.4m199.4 0c0-12.4 8.9-22.4 19.9-22.4 11 0 20 10.1 20 22.4 0 12.4-9 22.4-20 22.4s-19.9-10-19.9-22.4m-173.6-92c-4.7 2.4-9.6 5.2-13 7.2l-36-71.6c-2-3.9-0.8-8.9 2.7-11.1 3.5-2.3 7.9-0.9 9.9 3.1l36.4 72.4m187.7 0L643 68.2c2-3.9 6.4-5.3 9.9-3.1 3.5 2.2 4.7 7.2 2.8 11.1l-36.1 71.6c-3.4-1.9-8.4-4.7-13.1-7.2m-332 495.1c0 31.8-22.3 57.8-49.5 57.8-27.3 0-49.6-26-49.6-57.8V411.4c0-31.8 22.3-57.8 49.6-57.8 27.2 0 49.5 26 49.5 57.8v224.3z m574.1 0c0 31.8-22.3 57.8-49.5 57.8s-49.6-26-49.6-57.8V411.4c0-31.8 22.3-57.8 49.6-57.8 27.2 0 49.5 26 49.5 57.8v224.3zM293.8 363.1V722c0 31.8 23.2 57.8 51.4 57.8h35.6v122.3c0 31.8 22.3 57.8 49.6 57.8 27.2 0 49.5-26 49.5-57.8V779.9h64.6v122.3c0 31.8 22.3 57.8 49.5 57.8 27.3 0 49.6-26 49.6-57.8V779.9h36.2c28.3 0 51.4-26 51.4-57.8v-359H293.8z",app:"M834.6 960H564.3c-30.4 0-55.1-24.7-55.1-55V635c0-30.3 24.7-55 55.1-55h270.3c30.4 0 55.1 24.7 55.1 55v270c-0.1 30.3-24.8 55-55.1 55z m-445.3 0H119.1C88.7 960 64 935.3 64 905V635c0-30.3 24.7-55 55.1-55h270.3c30.4 0 55.1 24.7 55.1 55v270c-0.1 30.3-24.8 55-55.2 55z m177.9-61h258.4V640.8H567.2V899zM125 899h258.4V640.8H125V899z m595.6-356.7c-12.9 0-25.8-4.9-35.7-14.7L496.1 338.8c-9.5-9.5-14.8-22.2-14.8-35.6 0-13.5 5.2-26.1 14.8-35.6L685 78.8c19.7-19.7 51.7-19.7 71.3 0l188.9 188.8c9.5 9.5 14.8 22.2 14.8 35.6 0 13.5-5.3 26.1-14.8 35.6L756.3 527.6c-9.8 9.8-22.7 14.7-35.7 14.7zM543 303.5l178 177.9 178-177.9-178-177.9-178 177.9zM389.3 515.1H119.1c-30.4 0-55.1-24.7-55.1-55V190c0-30.3 24.7-55 55.1-55h270.3c30.4 0 55.1 24.7 55.1 55v270c-0.1 30.4-24.8 55.1-55.2 55.1z m-264.3-58h258.4V198.9H125v258.2z",apple:"M512.1 269c-1.3-2-1.6-19.8-0.5-30.5 2.3-22.4 7.5-40.1 17.6-60.2 9.4-18.5 24-38.6 39.7-54.8 22.7-23.3 61.8-45.2 97.4-54.7 12.1-3.2 30.1-5.9 31.4-4.6 1.2 1.2 1.4 24.1 0.3 34.8-4.9 45.1-27.1 88.3-63.2 123.1-28.1 27.1-57.6 42-91.7 46.5-12.1 1.7-30.1 1.9-31 0.4zM356.3 959c-33.9-7.5-66.3-32.7-104.1-81.2-37.7-48.3-59.2-84.4-79.3-133-20.5-49.4-33.3-97.8-39.2-147-1.4-11.5-1.7-21.6-1.7-47.4 0-36 0.9-46.1 6.2-71.6 10.5-50.4 34.1-95.6 67.5-128.9 20.3-20.3 39.3-33.6 66-46.2 29.9-14.1 60.4-21.1 92.2-21.1 25.8 0 44 4.5 104 25.7 22.1 7.8 38.6 12.5 46.8 13.3 4.5 0.4 7.9 0.1 13.8-1.4 8.3-2 38.3-11.9 63-20.6 53.4-18.9 88.9-23.4 130.9-16.4 50.9 8.4 89.7 26.7 121.4 57.4 9.6 9.3 24.2 26.1 24.2 28 0 0.3-3.7 3-8.3 5.9-18.4 12-41.3 32.1-52.6 46.4-36.5 46-48.6 108-33.1 169 13.7 53.7 53.1 100.6 107.4 127.7 8.9 4.4 10.9 5.8 10.7 7.3-0.3 2.5-11.5 31.3-17 43.6-11.1 25.1-28.8 56.1-45.8 80.4-29.8 42.7-57.9 73.8-80.6 89.3-10.9 7.4-26.8 14.8-38.9 18.1-8.6 2.3-11 2.5-25.2 2.5-12.9 0-17.6-0.4-26.1-2.1-11.8-2.4-32.8-9.1-54.8-17.3-26-9.8-50.3-14.7-72.7-14.7-26.6 0-48.5 4.6-83 17.5-20.3 7.6-31.8 11.3-45.1 14.5-9.7 2.3-13.6 2.8-26.1 3.1-10.4 0.4-16.5 0.1-20.5-0.8z",at:"M532.7 417.9c-22.6 0-39.8 9.5-51.7 28.4-11.8 19-19.6 47.4-23.3 85.3-1.9 25.2 0 44.2 5.8 57.1 5.8 12.9 15.3 19.4 28.2 19.4 11.8 0 22.2-3.2 31.4-9.5s17.4-17.9 24.3-34.9l13.1-142.2c-4.7-1.1-9.5-1.9-14-2.6-4.8-0.8-9.3-1-13.8-1zM512 64C264.5 64 64 264.5 64 512s200.5 448 448 448 448-200.5 448-448S759.5 64 512 64z m275.3 434.9c-1.9 46.1-16.4 85.9-43.1 119.8-26.7 33.6-66.8 50.4-119.8 50.4-17.7 0-33-4.7-45.7-14.2-12.9-9.5-22-23-27.1-40.5-8.8 17.9-20.2 31.2-33.8 40.1-13.6 8.8-29.5 13.4-47.8 13.4-32.5 0-57.3-12.5-74.5-37.3s-23.5-57.7-19-98.9c5.6-52.6 21.5-94.8 47.8-126.4s58.2-47.4 95.6-47.4c26.3 0 47.6 2.8 63.5 8.2 15.9 5.4 33.6 12.3 52.8 23.7l-1.1-0.2h1.7l-16.6 179.6c-1.1 18.3 0.2 31.4 3.7 38.3 3.7 6.9 8.4 10.6 14.4 10.6 24.3 0 43.9-11 58.6-33.6 14.6-22.6 22.8-50.8 24.6-85.3 3.4-71.1-11-126.4-43.5-166.1-32.5-39.6-82.5-59.7-150.1-59.7-65.7 0-118 21.3-156.8 64.2s-59.7 101-63.1 174.9c-3.7 71.9 12.1 128.8 47.2 170.4 35.1 41.8 85.5 62.7 151.4 62.7 18.3 0 37.3-1.9 57.1-5.8 19.6-3.9 36.8-8.8 51-14.6l12.5 52.1c-14.6 8.8-33.2 15.7-55.8 20.7-22.6 5-44.6 7.3-66.1 7.3-87.9 0-155.7-26.1-203.1-78.4-47.4-52.1-69.4-123.6-65.7-214.5 3.9-90 32.1-161.3 84.2-214.1 52.3-52.8 121.7-79 208.3-79 85.1 0 150.3 25 195.4 74.7 45.6 49.8 66.3 118.1 62.9 204.9z",attach:"M872.7 458.8L499.9 831.6c-74.6 74.6-196.6 74.6-271.1 0-74.6-74.6-74.6-196.6 0-271.1l389.7-389.7c47.4-47.4 122-47.4 169.5 0 47.4 47.4 47.4 122 0 169.5L398.2 730c-18.6 18.6-49.1 18.6-67.8 0-18.6-18.6-18.6-49.1 0-67.8l322-322-50.8-50.8-322 322c-47.4 47.4-47.4 122 0 169.5 47.4 47.4 122 47.4 169.5 0l389.7-389.7c74.6-74.6 74.6-196.6 0-271.1s-196.6-74.6-271.1 0L178 509.7C74.6 613 74.6 779.1 178 882.5s269.4 103.4 372.8 0l372.8-372.8-50.9-50.9z",backward:"M952.7 732c-19.3-108-78-244.6-175.4-336.6-48.6-46-102-75.5-156.7-91.3-6.8-2-13.7-3.8-20.6-5.4-6.9-1.6-13.8-3-20.7-4.2-13.8-2.4-27.6-4.1-41.4-5-9.7-0.7-19.4-1-29-1.1V124.7c0-0.1 0.2-1.6-0.9-2.5-0.9-0.7-2.2-0.8-3.2-0.2L68 420.6c-0.2 0.1-4.2 2.8-4 7.7 0.2 4.7 4.1 7 4.3 7.2l436.8 338.3c1.8 1.1 2.5 1.1 2.8 0.8 0.7-0.5 0.9-2.5 0.9-2.5V552.4c51.6 2.8 127.6 10.1 184.3 29.1C815.1 622.3 894 733 927.3 836.8c8.2 25.6 12.3 47.7 14.5 63.5 0.4 1.4 1.8 2.2 3 2 1-0.2 1.8-1 2-2 0.7-2.6 1.6-6.4 2.9-11.2 1.6-6.3 2.8-10.9 2.9-11.1 4.9-21.3 7.4-44 7.4-68.4 0-24.3-2.4-50.3-7.3-77.6z",bell:"M512 911.1c-37.2 0-69.8-25.6-79.1-60.5H384c9.3 62.8 62.8 109.4 128 109.4s118.7-48.9 128-109.4h-48.9c-9.3 34.9-41.9 60.5-79.1 60.5z m336-238.2c0-9-4.5-18-13.5-20.3-2.3 0-121.8-65.4-121.8-241.3 2.3-51.9-20.3-162.4-124-196.2-2.3 0-2.3 0-4.5-2.3 11.3-15.8 20.3-36.1 20.3-56.4 0-49.6-40.6-92.5-92.5-92.5s-92.5 40.6-92.5 92.5c0 20.3 6.8 40.6 20.3 56.4-2.3 0-4.5 0-4.5 2.3C331.6 248.9 309 357.2 311.3 409c0 175.9-115 239-121.8 243.5-6.8 4.5-13.5 11.3-13.5 20.3v121.8c0 6.8 2.3 13.5 6.8 18s11.3 6.8 15.8 6.8h626.9c6.8 0 13.5-2.3 15.8-6.8 4.5-4.5 6.8-11.3 6.8-18V672.9zM512 111c24.6 0 44.8 20.2 44.8 44.8 0 24.6-20.2 44.8-44.8 44.8-24.6 0-44.8-20.2-44.8-44.8 0-24.6 20.2-44.8 44.8-44.8zM242 761v-80.1c33.8-23.8 124.5-101.8 124.5-266.3 0-4.3-2.1-112.6 86.5-142.9 6.3-2.2 27.4-8.7 59.1-8.7 31.6 0 52.7 6.5 59.1 8.7 88.6 30.3 86.5 138.6 86.5 142.9 0 164.6 90.7 242.5 124.5 266.3V761H242z",calendar:"M315.3 323.8c-18 0-32.7-14.1-32.7-31.3V128.2c0-17.3 14.7-31.3 32.7-31.3 18 0 32.7 14.1 32.7 31.3v164.3c-0.1 17.2-14.7 31.3-32.7 31.3z m528.5 603.4H180.2C116.1 927.2 64 876 64 813.2V300.8c0-62.9 52.1-114 116.2-114h38.9c18 0 32.7 14.1 32.7 31.3 0 17.3-14.7 31.3-32.7 31.3h-38.9c-28.1 0-50.9 23-50.9 51.3v512.4c0 28.3 22.8 51.3 50.9 51.3h663.5c28.1 0 50.9-23 50.9-51.3V300.8c0-28.3-22.8-51.3-50.9-51.3H810c-18 0-32.7-14.1-32.7-31.3 0-17.3 14.7-31.3 32.7-31.3h33.7c64.1 0 116.2 51.1 116.2 114v512.4c0.1 62.7-52 113.9-116.1 113.9zM708.7 323.8c-18 0-32.7-14.1-32.7-31.3V128.2c0-17.3 14.7-31.3 32.7-31.3 18 0 32.7 14.1 32.7 31.3v164.3c0 17.2-14.7 31.3-32.7 31.3z m43.8 393.1h-481c-18 0-32.7-14.1-32.7-31.3 0-17.3 14.7-31.3 32.7-31.3h480.9c18 0 32.7 14.1 32.7 31.3 0 17.3-14.6 31.3-32.6 31.3z m0-205.3h-481c-18 0-32.7-14.1-32.7-31.3 0-17.3 14.7-31.3 32.7-31.3h480.9c18 0 32.7 14.1 32.7 31.3 0 17.2-14.6 31.3-32.6 31.3z m-131.2-267H399.9c-18 0-32.7-14.1-32.7-31.3 0-17.3 14.7-31.3 32.7-31.3h221.4c18 0 32.7 14.1 32.7 31.3 0 17.2-14.7 31.3-32.7 31.3z",camera:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64z m271.5 719.5C711 856.1 614.6 896 512 896s-199-39.9-271.5-112.5C167.9 711 128 614.6 128 512s39.9-199 112.5-271.5C313 167.9 409.4 128 512 128s199 39.9 271.5 112.5C856.1 313 896 409.4 896 512s-39.9 199-112.5 271.5zM400.1 212.1c-81.3 30.3-146.9 92.8-181.4 171.9H512L400.1 212.1zM825.6 576c4.3-21.1 6.4-42.5 6.4-64 0-73.2-24.6-140.7-66-194.7L622 576h203.6zM719.9 268.8C664 220.9 591.4 192 512 192c-15.9 0-31.6 1.2-46.9 3.4L621.7 448l98.2-179.2zM198.4 448c-4.3 21.1-6.4 42.5-6.4 64 0 73.3 24.6 140.8 66.1 194.7L402 448H198.4z m425.5 363.9c81.3-30.3 146.9-92.8 181.4-171.9H512l111.9 171.9z m-319.8-56.7C360 803.1 432.6 832 512 832c15.9 0 31.6-1.2 46.9-3.4L402.3 576l-98.2 179.2z",chart:"M321.4 812.4h-108V548h108v264.4z m165.2 0h-108V283.6h108v528.8z m165.2 0h-108V415.8h108v396.6z m158.9 0h-108V213.6h108v598.8zM960 876.8c0-10.6-8.4-19.2-18.7-19.2H82.7c-10.3 0-18.7 8.6-18.7 19.2S72.4 896 82.7 896h858.7c10.2 0 18.6-8.6 18.6-19.2zM85.3 128H80c-8.8 0-16 7.2-16 16v736c0 8.8 7.2 16 16 16h5.3c8.8 0 16-7.2 16-16V144c0-8.8-7.2-16-16-16z","checkbox-on":"M860.4 64H163.6C108.8 64 64 108.8 64 163.6v696.9c0 54.8 44.8 99.6 99.6 99.6h696.9c54.8 0 99.6-44.8 99.6-99.6V163.6C960 108.8 915.2 64 860.4 64z m-448 696.9L163.6 512l69.7-69.7 179.2 179.2 378.3-378.3 69.7 69.7-448.1 448z","checkbox-off":"M860.2 163.6v696.8H163.6V163.6h696.6m0-99.6H163.6C108.8 64 64 108.8 64 163.6v696.8c0 54.8 44.8 99.6 99.6 99.6h696.8c54.8 0 99.6-44.8 99.6-99.6V163.6c-0.2-54.8-45-99.6-99.8-99.6z",client:"M578 886.6H137.9c-40.7 0-73.9-35.1-73.9-78.3v-46.9c0-17.3 13.4-31.3 29.9-31.3H578c16.5 0 29.9 14.1 29.9 31.3 0 17.3-13.4 31.3-29.9 31.3H123.7v15.6c0 8.6 6.3 15.6 14.1 15.6H578c16.5 0 29.9 14.1 29.9 31.3 0 17.4-13.4 31.4-29.9 31.4z m308.1 0h-176c-40.7 0-73.9-35.1-73.9-78.3V432.8c0-43.2 33.1-78.3 73.9-78.3h176.1c40.7 0 73.9 35.1 73.9 78.3v375.6c-0.1 43.1-33.2 78.2-74 78.2z m-176-469.4c-7.8 0-14.2 7-14.2 15.6v375.6c0 8.6 6.3 15.6 14.2 15.6h176.1c7.8 0 14.1-7 14.1-15.6V432.8c0-8.6-6.3-15.6-14.1-15.6H710.1z m88 374.1c-7.9 0-15.6-3.2-21.1-8.8-5.6-5.6-8.7-13.3-8.7-21.1 0-7.9 3.2-15.7 8.8-21.1 5.5-5.5 13.2-8.7 21-8.7 8 0 15.7 3.2 21.2 8.8 5.5 5.5 8.7 13.2 8.7 21 0 8-3.2 15.7-8.8 21.2-5.6 5.5-13.3 8.7-21.1 8.7zM578 669.5H225.9c-40.7 0-73.9-35.1-73.9-78.3V215.6c0-43.2 33.1-78.3 73.9-78.3h572.2c40.7 0 73.9 35.1 73.9 78.3v46.9c0 17.3-13.4 31.3-29.9 31.3s-29.9-14.1-29.9-31.3v-46.9c0-8.6-6.3-15.6-14.2-15.6H225.9c-7.8 0-14.1 7-14.1 15.6v375.6c0 8.6 6.3 15.6 14.1 15.6H578c16.5 0 29.9 14.1 29.9 31.3 0 17.3-13.4 31.4-29.9 31.4z",close:"M925.9 960c-9.1 0-17.7-3.5-24.1-10L512 560.2 122.2 950c-6.4 6.4-15 10-24.1 10-9.1 0-17.7-3.5-24.1-10-13.3-13.3-13.3-34.9 0-48.2L463.8 512 74 122.2C60.7 108.9 60.7 87.3 74 74c13.3-13.3 34.9-13.3 48.2 0L512 463.8 901.8 74c13.3-13.3 34.9-13.3 48.2 0 13.3 13.3 13.3 34.9 0 48.2L560.2 512 950 901.8c13.3 13.3 13.3 34.9 0 48.2-6.4 6.5-15 10-24.1 10z",color:"M512 64C283.2 64 96 265.6 96 512s187.2 448 416 448c39.3 0 69.3-32.3 69.3-74.7 0-19.9-6.9-37.3-18.5-49.8-11.6-12.4-18.5-29.9-18.5-49.8 0-42.3 30-74.7 69.3-74.7h83.2c127.1 0 231.1-112 231.1-248.9C928 243.2 740.8 64 512 64zM256 512c-36.3 0-64-27.7-64-64s27.7-64 64-64 64 27.7 64 64-27.7 64-64 64z m128-192c-36.3 0-64-27.7-64-64s27.7-64 64-64 64 27.7 64 64-27.7 64-64 64z m256 0c-36.3 0-64-27.7-64-64s27.7-64 64-64 64 27.7 64 64-27.7 64-64 64z m128 192c-36.3 0-64-27.7-64-64s27.7-64 64-64 64 27.7 64 64-27.7 64-64 64z","dbl-left":"M536.2 948.6L76.3 539.7l-0.3-0.3c-7.7-7.4-12-17.2-12-27.6 0-12.4 6.1-23.9 16.8-31.6L536.3 75.3c8.1-7.3 19-11.3 30.5-11.3 24.2 0 43.9 18.1 43.9 40.3 0 11.1-4.8 21.4-13.4 29L171.2 512l426.1 378.7c8.5 7.6 13.4 18.1 13.4 29 0 22.2-19.7 40.3-43.9 40.3-11.3 0-22.2-4-30.6-11.4z m349.4 0l-460-408.9-0.3-0.3c-7.7-7.4-12-17.2-12-27.6 0-12.4 6.1-23.9 16.8-31.6L885.6 75.3c8.2-7.3 19-11.3 30.5-11.3 24.2 0 43.9 18.1 43.9 40.3 0 11.1-4.8 21.4-13.4 29L520.5 512l426.1 378.7c8.5 7.6 13.4 18.1 13.4 29 0 22.2-19.7 40.3-43.9 40.3-11.3 0-22.2-4-30.5-11.4z","dbl-right":"M457.2 960c-24.2 0-43.9-18.1-43.9-40.3 0-10.9 4.9-21.4 13.4-29L852.8 512 426.7 133.2c-8.6-7.5-13.4-17.8-13.4-29 0-22.2 19.7-40.3 43.9-40.3 11.5 0 22.4 4 30.6 11.3l455.5 404.9c10.7 7.7 16.8 19.2 16.8 31.6 0 10.4-4.3 20.2-12 27.6l-0.3 0.3-460 409c-8.4 7.4-19.3 11.4-30.6 11.4z m-349.3 0C83.7 960 64 941.9 64 919.7c0-10.9 4.9-21.4 13.4-29L503.5 512 77.4 133.2c-8.6-7.5-13.4-17.8-13.4-29C64 82.1 83.7 64 107.9 64c11.5 0 22.4 4 30.6 11.3L594 480.2c10.7 7.7 16.8 19.2 16.8 31.6 0 10.4-4.3 20.2-12 27.6l-0.3 0.3-460.1 408.9c-8.3 7.4-19.2 11.4-30.5 11.4z",deny:"M321.8 540.6c-22.2 0.1-33.4-8.7-33.5-26.5-0.1-18.2 11-27.4 33.2-27.5l380.2-2.1c12.8-0.1 21.8 2.4 27.1 7.6 5.3 5.1 8 11.6 8 19.6 0 7.9-2.4 14.4-7.4 19.3s-14.1 7.4-27.5 7.5l-380.1 2.1zM512 120c216.5 0 392 175.5 392 392 0 78.5-23.1 151.5-62.8 212.8-0.6 12.9 6.4 24.8 17.8 30.2 10 4.7 22 3.6 31.3-2.9C934.4 682.7 960 600.3 960 512c0-247.4-200.6-448-448-448S64 264.6 64 512s200.6 448 448 448c83.3 0 161.3-22.7 228.1-62.4 9.5-9.6 11.4-24.3 4.9-35.6-6-10.5-18.1-16.2-30.3-14.4C655.5 883.4 586.2 904 512 904c-216.5 0-392-175.5-392-392s175.5-392 392-392z",doc:"M646.4 960H243.2C182.9 960 128 903.8 128 842.1V291.9c0-29.4 11.8-59 32.5-81.3 21.4-23.1 49.2-35.8 78.4-35.8l23.9-0.6c0.3-29 12.6-56.6 34.7-77.7C319.2 75.9 348.4 64 377.6 64c3.2 0 319.3 0.9 322.6 0.9h3.4L896 289.6v442.5c0 61.7-54.9 117.9-115.1 117.9l-19.3-0.2c-0.2 29.2-12.5 56.8-34.9 78-21.8 20.4-51 32.2-80.3 32.2zM240.6 232.3c-23.3 0-56.6 35.1-56.6 59.6v550.2c0 10.9 8.1 26.2 20.6 39.1 12.8 13.2 27.6 21.4 38.6 21.4h403.3c19.1 0 44.5-25.7 46.3-52.9l-315.2 0.3c-60.3 0-115.2-56.2-115.2-117.9V231.7l-21.8 0.6z m124-110.9c-22.9 0-46.2 35.2-46.2 60.5v550.2c0 25.3 23.3 60.5 46.2 60.5h416.3c11 0 25.8-8.2 38.6-21.4 12.5-12.9 20.6-28.3 20.6-39.1V341.5h-86c-61.1 0-102.2-41.7-102.2-103.9 0-0.5-0.4-56.4 0-116.2H364.6z m335.6 536.3h-242c-19 0-34.5-15.9-34.5-35.3 0-19.5 15.5-35.3 34.5-35.3h242c19 0 34.5 15.9 34.5 35.3s-15.5 35.3-34.5 35.3z m0-137.4h-242c-19 0-34.5-15.9-34.5-35.3 0-19.5 15.5-35.3 34.5-35.3h242c19 0 34.5 15.9 34.5 35.3s-15.5 35.3-34.5 35.3z m7.6-310.2c0 26.1 23.7 74.6 46.2 74.6h64.3L707.8 149.2v60.9z",download:"M639.8 187.8H384.2v60.8h255.7v-60.8z m0-59.4H384.2v31.8h255.7v-31.8z m224.6 237.3H639.8v-87.3H384.2v87.3H161.8l349 340.1 353.6-340.1z m19.4 289.6l-30.7 151.2H170.8l-30.6-151.2H64v240.3h896V655.3h-76.2z",edit:"M835 298.7L685.5 154.2l74.8-72.3c24.8-23.9 64.9-23.9 89.6 0l59.8 57.8c24.8 24 24.8 62.8 0 86.8L835 298.7zM400.8 718.5L251.4 574l406.3-389.8 149.4 144.5-406.3 389.8zM131.3 837l90.9-234.9 148.2 143.3L131.3 837z m791.4 123H101.3C80.8 960 64 943.2 64 922.7c0-20.5 16.8-37.3 37.3-37.3h821.3c20.5 0 37.3 16.8 37.3 37.3 0.1 20.5-16.7 37.3-37.2 37.3z",eye:"M512 210c-203.6 0-376.8 124.8-448 302 71.2 177.2 244.4 302 448 302s376.8-124.8 448-302c-71.2-177.2-244.4-302-448-302z m0 503.4c-112 0-203.6-90.6-203.6-201.4S400 310.6 512 310.6 715.6 401.2 715.6 512 624 713.4 512 713.4z m0-322.2c-67.2 0-122.2 54.4-122.2 120.8s55 120.8 122.2 120.8S634.2 578.4 634.2 512s-55-120.8-122.2-120.8z","eye-off":"M512.1 289.6c112.4 0 203.8 90.6 203.8 202.2 0 26.2-5.2 51-14.6 74l119 118c61.6-51 110-116.8 139.8-192-70.6-177.4-244.5-303.1-448.3-303.1-57 0-111.6 10.2-162.2 28.2l88 87.4c23.1-9.3 48.1-14.7 74.5-14.7zM104.8 179.5l93 92.2 18.8 18.6C148.8 342.2 95.8 411.8 64 491.8c70.4 177.4 244.3 303.1 448.1 303.1 63.2 0 123.4-12.2 178.4-34l17.2 17 119.4 118 51.8-51.4-722.5-716.4-51.6 51.4z m225.1 223.3l63.2 62.6c-2 8.4-3.2 17.4-3.2 26.2 0 67 54.6 121.2 122.2 121.2 9 0 18-1.2 26.4-3.2l63.2 62.6c-27.2 13.4-57.4 21.4-89.6 21.4-112.4 0-203.8-90.6-203.8-202.2 0-31.6 8.2-61.4 21.6-88.6z m175.6-31.4l128.4 127.4 0.8-6.4c0-67-54.6-121.2-122.2-121.2l-7 0.2z",face:"M327.9 690.6c-6.5-3.9-12.4-11.6-12.4-19.7 0-12.3 9.9-22.2 22.2-22.2 2 0 3.7 0.6 5.5 1.1h0.5c51.5 23.7 108.7 36.1 169.1 36.1 59.5 0 115.8-12.7 166.7-35.7h0.2c2.4-0.8 4.9-1.5 7.6-1.5 12.3 0 22.4 10 22.4 22.4 0 8.5-4.7 15.8-11.6 19.6-56.4 25.7-118.8 40.6-184.8 40.6-65.7 0-129.2-15.3-185.4-40.7-0.3-0.1-0.2-0.1 0 0zM512 120c216.5 0 392 175.5 392 392 0 78.5-23.1 151.5-62.8 212.8-0.6 12.9 6.4 24.8 17.8 30.2 10 4.7 22 3.6 31.3-2.9C934.4 682.7 960 600.3 960 512c0-247.4-200.6-448-448-448S64 264.6 64 512s200.6 448 448 448c83.3 0 161.3-22.7 228.1-62.4 9.5-9.6 11.4-24.3 4.9-35.6-6-10.5-18.1-16.2-30.3-14.4C655.5 883.4 586.2 904 512 904c-216.5 0-392-175.5-392-392s175.5-392 392-392zM394.6 391.6c0-25-20.3-45.3-45.3-45.3-25 0-45.3 20.3-45.3 45.3 0 25 20.3 45.3 45.3 45.3 25 0 45.3-20.3 45.3-45.3z m281.3-45.2c-25 0-45.3 20.3-45.3 45.3 0 25 20.3 45.3 45.3 45.3 25 0 45.3-20.3 45.3-45.3 0-25.1-20.3-45.3-45.3-45.3z","finger-print":"M156.2 411.2c-4.8 0-9.8-1.2-14.2-3.8-13.4-7.8-18-24.8-10.2-38.2C167.4 309.2 275.6 169 512 169c102.4 0 192.2 27.2 266.8 80.8 61.4 44 95.8 93.8 112.2 117.8 8.8 12.8 5.4 30-7.4 38.8-12.8 8.6-30.4 5.4-39.2-7.4-29.8-43.2-120.2-174.4-332.4-174.4-207.2 0-300.8 120.8-331.4 172.6-5.2 9.2-14.6 14-24.4 14zM631 960c12.6 0 24-8.4 27.4-21 3.8-14.8-5.2-30-20.4-33.8C501 870.8 443.8 729 439.4 717.8c-1.4-4.6-7.4-27.4-9.4-55.6-2-27-0.6-64.2 17.4-88 13.2-17.4 34.4-25.8 64.6-25.8 55 0 64.2 27.2 78.6 83.6 14 55 33.2 130.4 140 135.8 41 2 78-16.4 104-51.6 39-52.8 46.4-133.6 18.8-205.6-21.6-56.4-63.2-112.8-114-154.8-65.6-54-144.2-82.6-227.4-82.6-180 0-299.6 123.2-338.4 245.4C138 631.4 181.2 795 183 802c4 14.8 19.6 23.8 34.6 19.8 15-3.8 24-19.2 20-34-0.4-1.4-40.8-154.8-10-252.4 16.6-52.4 51.2-103.4 94.8-139.6C375 352.2 440.6 329 512 329c167.2 0 262 131.8 288.8 201.8 20.8 54 16 115.4-11.6 153-10.2 13.8-28.2 30-55.6 28.6-62.4-3.2-73.2-34.4-88.2-93.8-7.2-28.6-14.6-58.2-33-82.2-22.4-29.4-55-43.6-100.2-43.6-48.6 0-85.4 16.2-109.6 48-52.8 69.6-18.4 188.4-17 193.4l0.4 1.6c2.6 7.2 66.6 180.4 238 223.4 2.4 0.6 4.6 0.8 7 0.8z m-220-12.8c6.8 0 13.8-2.6 19-7.4 11.4-10.4 12-28.2 1.4-39.4-60.4-64-94.6-135.6-107.4-225.6-6.4-52.8 2.6-132.6 49-184.4 32.2-36 79-54.2 138.8-54.2 69.2 0 121.6 31.2 156 92.6 27.4 48.8 33 98.8 33 99.4 1.6 15.2 15.6 26.4 31 24.8s26.8-15.2 25.2-30.6c-0.2-2.4-6.6-60.6-38.8-119-44.4-80.4-115.6-123-206.2-123-76.6 0-137.6 24.6-181 73-58.8 65.6-70.8 161-62.6 228.4v0.6c14.6 101.8 53.4 183.2 122 256 5.6 5.8 13 8.8 20.6 8.8zM727 867c12.8 0 26.2-0.8 39.8-2.4 15.4-1.6 26.6-15.4 24.8-30.8-1.8-15.4-15.8-26.4-31.2-24.6-61.6 7-111.6-5-149-35.2-63.2-51.2-71.4-140.2-71.6-141.8-1.2-15.4-14.6-26.8-30.2-25.6s-27.2 14.6-26 30c0.4 4.6 9.6 113.4 91.6 180.2C616 850.2 667 867 727 867z m64.6-716c0 15.4-12.6 27.8-28.2 27.8-6.4 0-12.2-2-17-5.6l-0.4 0.4 0.2 0.2c-0.8-0.4-72.6-54-234.2-54s-233.4 53.4-234.2 54l0.2-0.2c-4.6 3.2-10.2 5.2-16.4 5.2-15.6 0-28.2-12.4-28.2-27.8 0-8.2 3.6-15.6 9.4-20.8 0 0 0.2 0 0.4-0.2 1-1 2.2-1.8 3.4-2.6C265 114.6 348.2 64 512 64c156 0 239 45.8 262.4 61.2 10.2 4.2 17.2 14.2 17.2 25.8z",fire:"M622.5 959.8c-29.2-27.3-63-64.1-77.5-99.5-35.2-86 0-170.6 0-170.6s-113.8 12-167.3 155c-15.6 41.7 4.2 84.7 27 115.4C245.3 918.4 129 787.8 129 632.8c0-85.6 69.4-139.2 128-199.1 33.8-34.5 64-170.6 64-170.6s49.6 59.6 64 142.2c19.3 111.3 0 142.2 0 142.2s94.4-64.9 96-199C482.7 197.2 385 64 385 64s223.5 111.6 279.9 255.2c67.1 171 40.1 342 40.1 342s65.6-38 96-85.3c33.5-52.1 32-113.7 32-113.7s62.5 92 64 170.6c2.9 154.7-115 285.2-274.5 327z",first:"M733.2 611.4c-4.8-10.3-18.1-15.2-29.8-10.8-11.6 4.3-17.2 16.3-12.4 26.6L771.9 801l-148.4-26.7c-9.1-1.6-18.5 1.9-23.7 8.9l-83.3 113.3-4.2 6.5-4.9-6.4L424.2 784c-5.1-6.9-14.5-10.4-23.7-8.6l-148.4 28.1 81.1-174.6c4.8-10.4-0.7-22.2-12.3-26.5-11.6-4.2-25 0.7-29.8 11.1l-97.6 210.2c-3.2 7-1.9 14.9 3.5 20.7 5.4 5.8 13.9 8.4 22.2 6.8L394.6 818l98.2 133c2.6 3.5 6.2 6.1 10.3 7.6 1.9 0.7 4 1.1 6.1 1.3 0.2 0 3.7 0.1 4.6 0.1h0.3c6.8-0.6 13-3.9 16.8-9.1L629.4 817l175.4 31.5c4.6 0.8 9.2 0.4 13.3-1.2 3.4-1.3 6.4-3.3 8.8-5.9 5.4-5.8 6.7-13.8 3.5-20.7l-97.2-209.3zM512 64c-156.9 0-284.5 127.6-284.5 284.5S355.1 632.9 512 632.9s284.5-127.6 284.5-284.5S668.9 64 512 64z m20.9 127.4v320.2h-42.8V284.3h-74.7v-31.9c27.6 0 46.9-3.5 57.8-10.5 12.4-8.2 21.9-25.1 28.2-50.6h31.5z",floppy:"M841.4 960H182.6c-30.1 0-54.6-28.4-54.6-63.4V127.4c0-34.9 24.5-63.4 54.6-63.4H728c6.3 0 12.5 3 16.9 8.1l144.2 168.5c4.4 5.1 6.8 11.9 6.8 19.1v637c0.1 34.9-24.4 63.3-54.5 63.3z m-69.9-54.4h69.8c4 0 7.3-4 7.3-9h4.6-4.6V270.8L718.1 118.4h-22.5v192.4c0 28.1-19.7 50.9-43.9 50.9H371.3c-24.2 0-43.9-22.8-43.9-50.9V118.4H182.6c-4 0-7.3 4-7.3 9v769.3c0 4.9 3.3 9 7.3 9h83.9v-271c0-79.1 55.3-143.5 123.3-143.5h258.4c68 0 123.3 64.4 123.3 143.5v270.9z m-457.6 0h410.3V634.7c0-49.1-34.1-89.1-75.9-89.1H389.8c-41.9 0-75.9 40-75.9 89.1v270.9z m284-128.7H426.1c-10.2 0-18.5-10.4-18.5-23.2 0-12.8 8.3-23.2 18.5-23.2h171.8c10.2 0 18.5 10.4 18.5 23.2 0 12.8-8.3 23.2-18.5 23.2z m0-80.6H426.1c-10.2 0-18.5-10.4-18.5-23.2 0-12.8 8.3-23.2 18.5-23.2h171.8c10.2 0 18.5 10.4 18.5 23.2 0 12.8-8.3 23.2-18.5 23.2z m5.3-389h45V118.4h-45v188.9z m-228.4 0h181.1V118.4H374.8v188.9z",fly:"M471.7 926.5h-57.9V728.6c0-16.6 3.4-39.9 29.6-72.3 13.7-16.9 285-330.6 383.7-444.7l-675 362.6 217.9 77-16.7 54.4-9.5-3.3c-9.6-3.3-236.2-81.6-258.3-91.9-12.9-6-21-17.9-21.5-31.8-0.6-16.6 9.2-32.2 26.3-41.7 26.9-15 765.6-403.4 809.7-426.6 4.6-3.8 22.3-17.2 41.3-11.4l1.2 0.4 1.1 0.7c18.5 11.5 16.9 28.5 16 38.7-0.2 2-0.4 3.9-0.4 5.3v2.5l-0.9 1.6c-5.1 16.6-50.8 251.5-84.3 423.4-27 138.8-43.9 225.1-46.5 235.5-3.8 20.4-14.1 36.9-28.5 45.2-11.7 6.7-25 7.7-38.6 2.8-25.3-6.2-242.8-78.3-252.2-81.4l-10-3.3 23.8-59 8.7 2.9c91.7 31 230.8 77.5 244.2 80.8h0.9c2.3-13.5 12.7-68.5 58.8-307.2 20.7-106.9 41.5-214.6 52.1-269.3C771 355.9 503.6 673 481 698.6c-5 9.3-9.3 17.6-9.3 29.9v198z","folder-open":"M107.6 845.9l10.9 1.2c1.3 0.1 2.6 0.2 3.9 0.2H783c14.3 0 27-9 30.7-21.9l120.9-417.9c2.6-9 0.6-18.3-5.5-25.7-6.1-7.3-15.2-11.5-25.2-11.5h-94.5v-43.2c0-17.3-15.2-31.4-33.9-31.4H375.3c-4.6 0-9-1.7-12.3-4.7l-54-50c-6.4-5.9-14.9-9.2-23.9-9.2H117.3c-18.7 0-33.8 14.1-33.8 31.4v552.6c0 14.2 10.2 26.2 24.1 30.1z m679.3 20.9H117.6C88 866.8 64 842.7 64 813.1V210.9c0-29.6 24-53.7 53.6-53.7h168.7c14.3 0 27.8 5.6 37.9 15.8l53.7 53.9h401.4c29.6 0 53.6 24.1 53.6 53.7v27.6h75.5c16.2 0 31.1 7.4 40.9 20.2 9.8 12.8 13 29.1 8.9 44.7L836.7 828.5c-6.1 22.5-26.5 38.3-49.8 38.3z m20-18.8H92.1c-5.2 0-9.9-2.4-13.1-6.5-3.1-4.1-4.1-9.3-2.8-14.3L207 334.6c1.9-7.2 8.5-12.3 15.9-12.3h714.8c5.2 0 10 2.4 13.1 6.5 3.1 4.1 4.1 9.3 2.8 14.3L822.8 835.8c-1.9 7.2-8.5 12.2-15.9 12.2zM83 804.5V203.6c0-10.2 8.3-18.5 18.4-18.5H280c4.9 0 9.6 1.9 13 5.4l57.5 58.1c6.8 6.9 15.8 10.6 25.5 10.6h426c10.2 0 18.4 8.3 18.4 18.5v50.1H235.5c-15.3 0-28.7 10.4-32.7 25.4L83 804.5zM119.5 213v413.2l74.3-279.8c6-22.5 26.3-38.3 49.5-38.3h530.1v-25.5h-398c-14.3 0-27.6-5.6-37.7-15.8L284.2 213H119.5z","folder-close":"M902.7 923.3h-776c-34.3 0-62.1-27.9-62.1-62.3V162.9c0-34.3 27.9-62.3 62.1-62.3h195.6c16.6 0 32.2 6.5 44 18.3l62.2 62.5h465.4c4.2 0.1 31.1 1 50.4 23.6 17.6 20.5 16.3 44.3 16 49v624.9c-6.9 26.2-30.6 44.4-57.6 44.4z m-607.9-452h332.4c7.1 0 12.8-5.2 12.8-11.7 0-6.5-5.7-11.7-12.8-11.7H294.8c-7.1 0-12.8 5.2-12.8 11.7 0 6.5 5.7 11.7 12.8 11.7z m0 128.3h434.4c7.1 0 12.8-5.2 12.8-11.7 0-6.5-5.7-11.7-12.8-11.7H294.8c-7.1 0-12.8 5.2-12.8 11.7 0 6.4 5.7 11.7 12.8 11.7z m0 128.1h434.4c7.1 0 12.8-5.2 12.8-11.7 0-6.5-5.7-11.7-12.8-11.7H294.8c-7.1 0-12.8 5.2-12.8 11.7 0 6.5 5.7 11.7 12.8 11.7z",get:"M958.3 414.3c-43.9-110.1-5.6-200.2 1.7-303.4-0.2-1.3-1-2.2-2.1-2.4-0.7-0.1-1.2 0.1-1.5 0.2-54.6 30.4-109.6 72.7-162.7 120.7l-62.9 60.4c-181 183.4-325.3 409.4-325.3 409.4L300.8 482.7c-0.1-0.2-0.8-1.1-2.1-1.2-0.7-0.1-1.2 0.1-1.5 0.3l-232 120.5c-1 1-1.4 2.3-1.1 3.5 0.3 1.1 1 1.7 1.3 1.9 101 41.4 251 175.1 351.6 306.7 0.6 0.9 1.6 1.3 2.6 1.1 1.2-0.2 1.7-1.3 1.7-1.4C483.6 795.9 691.6 588.4 840.5 482l59.1-38.5c22-12.7 41.3-21.6 57.1-25.8 0.3 0 0.9-0.2 1.3-0.7 0.6-0.7 0.7-1.8 0.3-2.7z",happy:"M699.7 960c-6.7 0-13.4-3-18-8.6-7.9-9.9-6.3-24.4 3.6-32.3 123.7-99 194.6-246.5 194.6-404.8 0-161-73-310.2-200.2-409.2-10-7.8-11.8-22.2-4-32.3 7.8-10 22.2-11.8 32.3-4C846.5 176.6 925.9 339 925.9 514.3c0 172.3-77.2 332.9-211.8 440.7-4.1 3.2-9.2 5-14.4 5zM207.9 347c60.6 0 109.8-49.2 109.8-109.8 0-60.6-49.1-109.8-109.8-109.8S98.1 176.6 98.1 237.3c0 60.6 49.1 109.7 109.8 109.7z m0 547.6c60.6 0 109.8-49.2 109.8-109.8 0-60.6-49.1-109.8-109.8-109.8-60.6 0-109.8 49.2-109.8 109.8 0 60.7 49.1 109.8 109.8 109.8z",headset:"M876.3 478.9v-4.8c0-195.2-148.2-354.1-330.4-354.1h-67.8c-182.2 0-330.4 158.8-330.4 354.1v4.8C99.8 490.7 64 536.7 64 591.6v196.7C64 852.2 112.3 904 171.9 904c59.6 0 107.9-51.8 107.9-115.7V591.6c0-55-35.8-101-83.7-112.7v-4.8c0-166.6 126.5-302.2 282-302.2h67.8c155.5 0 282 135.6 282 302.2v4.8c-47.9 11.8-83.7 57.8-83.7 112.7v196.7c0 63.9 48.3 115.7 107.9 115.7 59.6 0 107.9-51.8 107.9-115.7V591.6c0-54.9-35.8-100.9-83.7-112.7z",home:"M837.2 960H620.4c-18.2 0-33.1-15.1-33.1-33.6V693H436.7v233.3c0 18.5-14.8 33.6-33.1 33.6H186.8c-18.2 0-33.1-15.1-33.1-33.6v-356c0-18.5 14.8-33.6 33.1-33.6 18.2 0 33.1 15.1 33.1 33.6v322.3h150.7V659.4c0-18.5 14.8-33.6 33.1-33.6h216.8c18.2 0 33.1 15.1 33.1 33.6v233.3h150.7V570.4c0-18.5 14.8-33.6 33.1-33.6 18.2 0 33.1 15.1 33.1 33.6v356c-0.3 18.5-15.1 33.6-33.3 33.6zM97 557.1c-8.9 0-17.2-3.5-23.5-10-12.7-13-12.7-34.3 0-47.3L488.5 74c6.3-6.4 14.6-10 23.5-10s17.2 3.5 23.5 10l415 425.9c12.7 13.1 12.7 34.3 0 47.3-6.3 6.4-14.6 10-23.5 10s-17.2-3.5-23.5-10L512 145.4 120.5 547.2c-6.3 6.4-14.6 9.9-23.5 9.9z m710.5-258.3c-18.2 0-33.1-15.1-33.1-33.6v-55.4h-53.7c-18.2 0-33.1-15.1-33.1-33.6s14.8-33.6 33.1-33.6h86.7c18.2 0 33.1 15.1 33.1 33.6v89c0 18.5-14.8 33.6-33 33.6z",image:"M915.1 280.3l-165-8-9.6-107.6c-2-22.6-22.2-38.4-45.8-36.6l-591.8 48.6c-23.6 2-40.6 21-38.8 43.4l42.4 471.6c2 22.6 22.4 38.4 45.8 36.6l30-2.4-4.8 91.6c-1.2 25.2 18.4 45.6 44.8 47l660.2 31.4c26.4 1.2 48.2-17.2 49.6-42.4l27.8-526.6c1.2-25-18.6-45.4-44.8-46.6z m-709.8 10.6l-14.2 269.6-35 49.4-32.2-356v-2c2-10 8.8-18 19.2-18.8l522-42.8c10.4-0.8 19.4 6 21 15.8 0 0.4 0.6 0.4 0.6 0.8 0 0.2 0.6 0.4 0.6 0.8l5.4 61.6-438-21c-26.4-0.8-48.2 17.6-49.4 42.6z m668 473.8l-169.6-199-74.8 68.6-138.4-161.6-245.4 261.4 20.8-398.2v-0.8c2-10.8 12.4-18.6 23.8-18l582.4 28c11.6 0.6 20.6 9.4 20.8 20.4 0 0.4 0.6 0.6 0.6 1l-20.2 398.2z",info:"M475.2 251.1c0-10.3 3.6-19.1 10.7-26.4 7.1-7.3 16.2-11 27-11 10.4 0 19.1 3.7 26.3 11 7.1 7.3 10.7 16.1 10.7 26.4 0 10.3-3.6 19.1-10.7 26.4-7.2 7.3-15.9 11-26.3 11-10.9 0-19.9-3.7-27-11-7.1-7.4-10.7-16.2-10.7-26.4z m66.7 526.4c0 22.2-9.2 33.4-27.7 33.4-18.9 0-28.4-11.1-28.4-33.4V397.2c0-12.8 2.7-21.8 8-27.1 5.3-5.3 12.1-7.9 20.4-7.9 8.2 0 14.9 2.5 20 7.5s7.6 14.2 7.6 27.5v380.3zM512 120c216.5 0 392 175.5 392 392 0 78.5-23.1 151.5-62.8 212.8-0.6 12.9 6.4 24.8 17.8 30.2 10 4.7 22 3.6 31.3-2.9C934.4 682.7 960 600.3 960 512c0-247.4-200.6-448-448-448S64 264.6 64 512s200.6 448 448 448c83.3 0 161.3-22.7 228.1-62.4 9.5-9.6 11.4-24.3 4.9-35.6-6-10.5-18.1-16.2-30.3-14.4C655.5 883.4 586.2 904 512 904c-216.5 0-392-175.5-392-392s175.5-392 392-392z",key:"M497.4 443.1C466.8 356.5 378.7 288 281.5 288 158.3 288 64 388.8 64 512s98.6 224 221.8 224c97.1 0 181.1-68.5 211.5-155.1h221.4v137.8h148.8V580.9H960V443.1H497.4zM287.9 608.9c-52.9 0-96.1-43.2-96.1-96.1s43.2-96.1 96.1-96.1 96.1 43.2 96.1 96.1-43.2 96.1-96.1 96.1z",left:"M710.9 948.6L251 539.7l-0.3-0.3c-7.7-7.4-12-17.2-12-27.6 0-12.4 6.1-23.9 16.8-31.6L710.9 75.3C719.1 68 730 64 741.5 64c24.2 0 43.9 18.1 43.9 40.3 0 11.1-4.8 21.4-13.4 29L345.8 512 772 890.8c8.5 7.6 13.4 18.1 13.4 29 0 22.2-19.7 40.3-43.9 40.3-11.4-0.1-22.2-4.1-30.6-11.5z",linux:"M460.4 269.5c-3.6 0.3-6.1 2.1-7.6 5.2-1.5 3.2-2.9 4.7-4.2 4.7-1.6 0.3-2.4-0.5-2.4-2.5 0-4 3.1-6.5 9.3-7.5h4.9z m42.7 7c-1.3 0.3-3.2-0.7-5.7-3.3-2.4-2.5-5.3-3.3-8.6-2.2 7.8-3.7 13.1-3.3 15.7 1 1 2 0.5 3.5-1.4 4.5zM330.8 489.9c-1.3-0.3-2.3 0.2-3 1.5-0.6 1.3-1.4 3.4-2.2 6.2-0.8 2.8-1.7 5.1-2.7 6.8-1 1.7-2.6 3.8-4.9 6.5-2.3 3.3-2.4 5.3-0.5 6 1.3 0.3 3.4-0.8 6.1-3.5 2.8-2.7 4.8-5.7 6.1-9 0.3-1 0.7-2.2 1-3.5 0.3-1.3 0.6-2.3 1-3 0.3-0.7 0.6-1.4 0.7-2.2 0.1-0.8 0.2-1.5 0.3-2v-1.5l-0.5-1.2c-0.3-0.9-0.8-1.2-1.4-1.1z m419.5 179.5c0-6-9-13-27-21 1.3-5 2.5-9.6 3.7-13.8 1.1-4.2 1.9-8.5 2.4-13s1-8.1 1.5-10.8c0.5-2.7 0.6-6.4 0.3-11.3-0.3-4.8-0.5-8.1-0.5-9.8 0-1.7-0.6-5.4-1.7-11-1.1-5.7-1.8-9.1-2-10.2-0.2-1.2-1-5.3-2.4-12.5s-2.3-11.6-2.7-13.2c-3.3-16-10.9-33.2-23-51.5-12.1-18.3-23.9-30.8-35.3-37.5 7.8 6.7 17.2 20.5 28 41.5 28.4 54 37.3 100.3 26.5 139-3.6 13.3-11.8 20.3-24.5 21-10.1 1.3-16.4-1.7-18.9-9.2-2.5-7.5-3.8-21.4-3.9-41.8-0.1-20.3-2-38.2-5.7-53.5-3-13-6.1-24.5-9.6-34.5-3.4-10-6.6-17.6-9.6-22.7-3-5.2-5.5-9.2-7.6-12.3-2.1-3-4.2-5.5-6.4-7.5-2.1-2-3.4-3.1-3.7-3.5-4.6-20.7-9.7-37.8-15.2-51.5-5.6-13.7-10.4-23-14.5-28s-7.9-10.5-11.5-16.5c-3.6-6-6-12.7-7.3-20-1.3-7-0.3-15.9 3-26.7 3.3-10.8 4-19.1 2.2-24.7-1.8-5.7-9.1-9.8-21.8-12.5-4.9-1-12.2-4-21.8-9-9.7-5-15.5-7.7-17.4-8-2.6-0.3-4.4-4.7-5.4-13s0.3-16.8 3.9-25.5 9.5-13.2 17.6-13.5c12.1-1 20.4 4 25 15 4.6 11 5.2 20.7 2 29-3.6 6.3-3.9 10.8-1 13.2 3 2.5 7.9 2.6 14.7 0.3 4.2-1.3 6.4-7.3 6.4-18v-18.5c-1.6-10-3.8-18.3-6.6-25-2.8-6.7-6.2-11.7-10.3-15.3-4.1-3.5-7.9-6-11.5-7.5-3.6-1.5-8-2.7-13.3-3.7-35 2.7-49.6 25-43.7 67 0 5-0.2 7.5-0.5 7.5-3-3-7.8-4.8-14.5-5.2-6.7-0.5-12.1-0.4-16.2 0.3s-6.6-0.2-7.6-2.5c0.3-19-2.3-34-7.8-45-5.6-11-12.9-16.7-22.1-17-8.8-0.3-15.6 4.2-20.3 13.8-4.7 9.5-7.4 19.4-8.1 29.8-0.3 5 0.2 11.2 1.7 18.5 1.5 7.3 3.6 13.6 6.4 18.8 2.8 5.2 5.3 7.4 7.6 6.8 3.3-1 5.9-3.3 7.8-7 1.3-3 0.2-4.3-3.4-4-2.3 0-4.8-2.4-7.6-7.3-2.8-4.8-4.3-10.4-4.6-16.7-0.3-7.3 1.1-13.5 4.4-18.5 3.3-5 8.8-7.3 16.7-7 5.6 0 10 3.5 13.3 10.5 3.3 7 4.8 13.5 4.6 19.5-0.2 6-0.4 9.7-0.7 11-7.2 5-12.3 9.8-15.2 14.5-2.6 4-7.1 7.9-13.5 11.7-6.4 3.8-9.7 5.9-10.1 6.2-4.2 4.7-6.8 9.2-7.6 13.5-0.8 4.3 0.4 7.3 3.7 9 4.6 2.7 8.7 5.9 12.3 9.8 3.6 3.8 6.2 7 7.8 9.5 1.6 2.5 4.7 4.7 9.1 6.5 4.4 1.8 10.2 2.9 17.4 3.3 15.4 0.7 32.1-1.8 50.1-7.5 0.7-0.3 4.4-1.5 11.3-3.5s12.5-3.7 16.9-5.2c4.4-1.5 9.2-3.7 14.5-6.5 5.2-2.8 8.7-5.7 10.3-8.7 3-4.7 6.2-6 9.8-4 1.6 1 2.7 2.4 3.2 4.3 0.5 1.8 0 3.8-1.5 6s-4.2 3.7-8.1 4.7c-6.6 2-15.8 5.6-27.7 10.8-11.9 5.2-19.4 8.4-22.3 9.8-14.4 6.3-25.9 10.2-34.4 11.5-8.2 1.7-21.1 1.3-38.7-1-3.3-0.7-4.7-0.3-4.4 1 0.3 1.3 3.1 4.5 8.4 9.5 8.2 7.7 19.1 11.3 32.9 11 5.6-0.3 11.4-1.5 17.6-3.5 6.2-2 12.1-4.3 17.6-7 5.6-2.7 11-5.6 16.4-8.7 5.4-3.1 10.3-6 14.7-8.5 4.4-2.5 8.4-4.5 12-6 3.6-1.5 6.4-1.9 8.6-1.3 2.1 0.6 3.5 2.5 4.2 5.5 0 0.7-0.2 1.4-0.5 2.2-0.3 0.8-1 1.7-2 2.5s-2 1.6-3 2.2c-1 0.7-2.4 1.5-4.2 2.5-1.8 1-3.3 1.7-4.4 2.2-1.2 0.5-2.8 1.3-4.9 2.5-2.1 1.2-3.7 1.9-4.6 2.2-9.2 4.7-20.2 12-33.1 22-12.9 10-23.8 17.2-32.6 21.5-8.8 4.3-16.8 4.5-24.1 0.5-6.9-3.7-17.2-15.8-30.9-36.5-7.2-10.3-11.3-14-12.3-11-0.3 1-0.5 2.7-0.5 5 0 8.3-2.4 17.8-7.3 28.3s-9.7 19.7-14.5 27.7c-4.7 8-8.2 17.7-10.3 29-2.1 11.3-0.2 21.8 5.7 31.5-7.5 2-17.7 17-30.7 45-12.9 28-20.7 51.5-23.3 70.5-0.7 6-0.9 17.5-0.7 34.5 0.2 17-0.7 26.8-2.7 29.5-2.6 8-7.4 8.5-14.2 1.5-10.5-10.3-16.4-26-17.6-47-0.7-9.3 0-18.7 2-28 1.3-6.3 1.2-9.3-0.5-9l-2 2.5c-11.8 21.7-10.1 49.3 4.9 83 1.6 4 5.7 8.7 12.3 14 6.5 5.4 10.5 8.7 11.8 10 6.6 7.7 23.6 22.7 51 45.2 27.5 22.5 42.7 35.3 45.6 38.2 5.2 5 8.1 11.3 8.6 19 0.5 7.7-1.8 14.8-6.9 21.5-5.1 6.7-12.5 10.5-22.3 11.5 2.6 5 7.4 12.4 14.2 22.2 6.9 9.8 11.4 18.8 13.8 27 2.3 8.2 3.4 19.9 3.4 35.3 15.1-8 16.2-23.3 3.4-46-1.3-2.7-3-5.3-5.1-8-2.1-2.7-3.7-4.7-4.6-6-1-1.3-1.3-2.3-1-3 1-1.7 3.1-3.2 6.4-4.7 3.3-1.5 6.5-1.1 9.8 1.3 15.1 17.3 42.2 23.3 81.5 18 43.5-5 72.5-19.5 86.9-43.5 7.5-12.7 13.1-17.7 16.7-15 3.9 2 5.5 10.7 4.9 26-0.3 8.3-4.1 23.7-11.3 46-3 7.7-3.9 13.9-3 18.8 1 4.8 4.9 7.4 11.8 7.7 1-6.3 3.4-19.2 7.1-38.5 3.8-19.3 6-34.3 6.6-45 0.6-7-0.4-19.2-3.2-36.7-2.8-17.5-4-33.7-3.7-48.5 0.3-14.8 4.1-26.6 11.3-35.3 4.9-6 13.2-9 25-9 0.3-12.3 6-21.2 16.9-26.5 10.9-5.3 22.8-7.1 35.6-5.2 12.4 1.6 22.2 5.4 29 10.9zM442.2 256c1-5.7 0.6-10.7-1.2-15-1.8-4.3-3.7-6.8-5.7-7.5-3-0.7-4.4 0.5-4.4 3.5 0.6 1.7 1.5 2.7 2.4 3 3.3 0 4.4 2.5 3.4 7.5-1 6.7 0.3 10 3.9 10 1.1 0 1.6-0.5 1.6-1.5z m205.6 98.4c-0.6-2.7-1.7-4.6-3.2-5.8-1.5-1.2-3.6-2-6.4-2.5-2.8-0.5-5.1-1.4-7.1-2.8-1.6-1-3.2-2.3-4.7-4-1.5-1.7-2.6-3-3.4-4-0.8-1-1.7-2.1-2.7-3.3-1-1.2-1.6-1.8-2-2-0.3-0.2-1 0.1-2 0.7-4.6 5.3-3.4 12.6 3.4 21.8 6.9 9.2 13.2 14.4 19.1 15.7 3 0.3 5.3-1 7.1-4 1.9-2.8 2.5-6.2 1.9-9.8zM560.5 248c0-3.7-0.8-6.9-2.4-9.8-1.6-2.8-3.4-4.9-5.4-6.2-2-1.3-3.4-1.8-4.4-1.5-4.6 0.3-5.7 1.5-3.4 3.5l2 1c4.6 1.3 7.5 6.5 8.8 15.5 0 1 1.3 0.7 3.9-1l0.9-1.5zM587 131.5c0-0.7-0.4-1.5-1.2-2.5-0.8-1-2.3-2.2-4.4-3.5-2.1-1.3-3.7-2.3-4.6-3-4.9-5-8.8-7.5-11.8-7.5-3 0.3-4.8 1.6-5.7 3.7-0.8 2.2-1 4.3-0.5 6.5s0.4 4.3-0.3 6.2c-0.3 1.3-1.3 3.1-3 5.2-1.6 2.2-2.6 3.7-3 4.5-0.3 0.9 0.2 2.3 1.5 4.3 1.3 1 2.6 1 3.9 0 1.3-1 3.1-2.5 5.4-4.5 2.3-2 4.8-3.5 7.4-4.5 0.3-0.3 1.8-0.5 4.4-0.5 2.6 0 5.1-0.3 7.3-1 2.4-0.6 3.9-1.8 4.6-3.4z m277.2 670.4c6.5 4 11.6 8.1 15.2 12.3 3.6 4.2 5.5 8.2 5.9 12 0.3 3.8-0.1 7.6-1.2 11.3-1.2 3.7-3.7 7.4-7.6 11-3.9 3.6-7.8 6.9-11.5 9.8-3.8 2.9-8.7 5.9-14.7 9.2-6 3.3-11.2 6.1-15.4 8.3-4.3 2.2-9.5 4.8-15.7 7.7-6.2 3-10.6 5.1-13.3 6.5-12.4 6.3-26.4 15.7-42 28-15.5 12.3-27.9 23-37.1 32-5.6 5.3-16.7 8.6-33.3 9.8-16.7 1.2-31.2-1.2-43.7-7.3-5.9-3-10.7-6.9-14.5-11.7-3.8-4.8-6.5-9.1-8.1-12.7-1.6-3.7-5.2-6.9-10.8-9.8-5.6-2.8-13.3-4.4-23-4.7-14.4-0.3-35.7-0.5-63.8-0.5-6.2 0-15.5 0.2-28 0.7-12.4 0.5-21.9 0.9-28.4 1.3-14.4 0.3-27.4 2.8-39 7.5-11.6 4.6-20.3 9.7-26.2 15-5.9 5.4-13 10.1-21.4 14.2-8.3 4.1-17.1 6.1-26.2 5.8-9.5-0.3-27.6-5.5-54.4-15.5-26.8-10-50.7-17.2-71.6-21.5-6.2-1.3-14.6-2.9-25-4.7-10.5-1.8-18.6-3.3-24.5-4.5-5.9-1.2-12.3-2.8-19.4-4.7-7-2-12.5-4.4-16.4-7.3-3.9-2.9-6.7-6.1-8.4-9.8-3.3-7.7-2.1-18.7 3.4-33.2 5.5-14.5 8.5-23.6 8.8-27.3 0.3-5.3-0.3-12-2-20s-3.3-15.1-4.9-21.2c-1.6-6.2-2.3-12.2-2.2-18.2 0.1-6 1.9-10.5 5.1-13.5 4.6-4 13.9-6.3 28-7 14.1-0.7 23.9-2.7 29.5-6 9.8-6 16.7-11.8 20.6-17.5 3.9-5.7 5.9-14.2 5.9-25.5 6.9 24.3 1.6 42-15.7 53-10.5 6.7-24 9.2-40.7 7.5-11.1-1-18.1 0.7-21.1 5-4.2 5-3.4 14.5 2.4 28.5 0.7 2 2 5 3.9 9 2 4 3.4 7 4.2 9 0.8 2 1.6 4.8 2.2 8.5 0.7 3.7 0.8 7.3 0.5 11 0 5-2.8 13.2-8.4 24.5-5.6 11.3-7.9 19.3-6.9 24 1 5.7 7 10 18.1 13 6.5 2 20.4 5.1 41.4 9.2 21.1 4.2 37.4 7.6 48.8 10.2 7.8 2 20 5.7 36.3 11 16.4 5.3 29.8 9.2 40.5 11.5 10.6 2.3 19.7 3 27.2 2 14.1-2 24.6-6.7 31.7-14 7-7.3 10.8-15.3 11.3-24s-0.7-18.4-3.7-29.2c-2.9-10.8-6-19.5-9.3-26s-6.6-12.6-9.8-18.2c-39.6-63.3-67.2-103.7-82.9-121-22.2-24.7-40.7-31.3-55.5-20-3.6 3-6 0.5-7.3-7.5-1-5.3-1.3-11.7-1-19 0.3-9.7 2-18.3 4.9-26 2.9-7.7 6.9-15.5 11.8-23.5s8.5-15 10.8-21c2.6-7 7-19 13-36s10.9-30 14.5-39c3.6-9 8.5-19.2 14.7-30.5 6.2-11.3 12.6-20.3 19.1-27 36-47.7 56.3-80.2 60.8-97.5-3.9-37.3-6.5-89-7.8-155-0.6-30 3.3-55.2 11.8-75.7s25.8-37.9 52-52.2c12.7-7 29.8-10.5 51-10.5 17.3-0.3 34.7 1.9 52 6.7 17.3 4.8 31.9 11.8 43.7 20.7 18.7 14 33.6 34.2 44.9 60.7 11.3 26.5 16.1 51.1 14.5 73.8-1.6 31.7 3.3 67.3 14.7 107 11.1 37.7 32.9 74 65.2 109 18 19.7 34.3 46.8 48.8 81.5 14.6 34.7 24.3 66.5 29.2 95.5 2.6 16.3 3.4 30.4 2.4 42.2-1 11.8-2.9 21.1-5.9 27.7-2.9 6.7-6.2 10.3-9.8 11-3.3 0.7-7.1 3.8-11.5 9.5s-8.8 11.6-13.3 17.8c-4.4 6.2-11 11.7-19.9 16.7-8.8 5-18.8 7.3-29.9 7-5.9-0.3-11-1.2-15.4-2.5s-8.1-3.6-11.1-6.7c-3-3.2-5.2-5.8-6.6-7.7-1.5-2-3.3-5.4-5.7-10.2-2.3-4.8-3.8-8.1-4.4-9.8-7.2-12.3-13.9-17.3-20.1-15-6.2 2.3-10.8 10.5-13.8 24.5s-1.8 30.2 3.4 48.5c6.6 23.3 6.7 55.8 0.5 97.5-3.3 21.7-0.3 38.4 8.8 50.2 9.1 11.8 21.1 17.3 35.8 16.5 14.7-0.8 28.6-6.7 41.7-17.8 19.3-16.3 33.9-27.4 43.9-33.2 10-5.8 26.9-12.9 50.8-21.2 17.3-6 29.9-12.1 37.8-18.2s10.9-11.9 9.1-17.2c-1.8-5.3-5.9-10.1-12.3-14.2-6.4-4.2-14.8-8.1-25.3-11.7-10.8-3.7-18.9-11.7-24.3-24-5.4-12.3-7.8-24.4-7.3-36.3 0.5-11.8 3-19.8 7.6-23.7 0.3 10.3 1.6 19.7 3.9 28.3 2.3 8.5 4.7 15.3 7.1 20.3 2.5 5 5.8 9.7 10 14.2s7.7 7.7 10.3 9.5c2.6 1.8 6.2 4 10.5 6.5 4.4 2.5 7.1 4.1 8.1 4.7l0.4-0.5z",live:"M869.8 898.8c0 15.6-10.6 28.2-23.6 28.2H177.8c-13 0-23.6-12.7-23.6-28.2 0-15.6 10.6-28.2 23.6-28.2h668.4c13-0.1 23.6 12.6 23.6 28.2zM960 146.4v575.2c0 27.2-26.7 49.4-59.5 49.4h-777C90.7 771 64 748.8 64 721.6V146.4C64 119.2 90.7 97 123.5 97h777.1c32.7 0 59.4 22.2 59.4 49.4z m-52.6 13.3c0-5.7-6.5-10.5-14.1-10.5H132.6c-7.7 0-14.1 4.8-14.1 10.5v549c0 5.7 6.5 10.5 14.1 10.5h760.7c7.7 0 14.1-4.8 14.1-10.5v-549zM486.7 613.8c0.2 0.2 1.4 1.3 3.3 1.2 1.6-0.1 2.7-1 2.9-1.3l243.7-299.1c0.1-0.1 1.6-1.5 1.3-3.6-0.2-1.6-1.4-2.4-1.6-2.6l-43.6-38.1c-0.2-0.2-1.7-1.6-3.8-1.2-1.9 0.3-2.9 1.7-3 1.9L484 522 348 380.6c-0.4-0.2-1.1-0.5-2-0.6-1.4-0.1-2.5 0.3-3 0.6l-38.9 38.9c-0.3 0.4-0.9 1.2-1.1 2.5-0.2 1.8 0.6 3.1 0.9 3.4l182.8 188.4z",load:"M587.6 587.9c25.3-25.3 202.5 88.6 234.2 120.2 31.7 31.6 38 88.5 6.4 120.1-31.6 31.6-82.2 31.6-113.9-0.1-31.7-31.6-152-215-126.7-240.2zM436 434.8c-25.3 25.3-202.5-88.6-234.2-120.2-31.7-31.6-38-88.5-6.4-120.1 31.6-31.6 82.2-31.6 113.9 0.1 31.7 31.6 152 214.9 126.7 240.2z m-31.8 77.7c0 35.7-205.9 80.4-250.7 80.4-44.8 0-89.5-35.7-89.5-80.4s35.8-80.4 80.6-80.4c44.7 0 259.6 44.7 259.6 80.4z m31.9 76.8c25.3 25.3-88.7 202.3-120.3 233.9-31.7 31.6-88.6 38-120.2 6.4-31.6-31.6-31.6-82.2 0-113.8 31.7-31.6 215.2-151.8 240.5-126.5z m75.9 30.9c35.8 0 80.5 205.7 80.5 250.4 0 44.7-35.8 89.4-80.5 89.4s-80.5-35.8-80.5-80.5 44.7-259.3 80.5-259.3z m107.8-107.7c0-35.7 205.9-80.4 250.7-80.4 44.8 0 89.5 35.7 89.5 80.4s-35.8 80.4-80.6 80.4c-44.7 0-259.6-44.7-259.6-80.4z m-33.6-75.9c-25.3-25.3 88.7-202.3 120.3-233.9 31.7-31.6 88.6-38 120.2-6.4 31.6 31.6 31.6 82.1-0.1 113.8-31.6 31.6-215.1 151.8-240.4 126.5zM512 403.8c-35.8 0-80.5-205.7-80.5-250.4 0-44.7 35.8-89.4 80.5-89.4s80.5 35.8 80.5 80.5-44.7 259.3-80.5 259.3z",loading:'',location:"M511.9 960h-0.1c-16.2-0.1-31.7-8.2-42.3-22.3-7.7-10-78-101.2-147.4-212.6C230 577.4 183.3 465.5 183.3 392.7 183.3 211.5 330.8 64 512 64s328.7 147.5 328.7 328.7c0 72.9-46.8 185-139.1 333.1-69.2 111-139.1 201.8-147.1 212.1-10.6 14.1-26 22.2-42.3 22.2l-0.3-0.1z m0.1-845.4c-153.3 0-278.1 124.8-278.1 278.1 0 63.9 47.2 172.4 136.4 313.9C439.9 816.9 508.9 906 509.6 906.8l0.2 0.3c1.1 1.4 1.9 2 2.3 2.2 0.4-0.2 1.1-0.8 2.1-2.1l0.1-0.1c2.8-3.6 275.8-357.8 275.8-514.4 0-153.3-124.8-278.1-278.1-278.1z m0.2 346.2c-55.1 0-99.9-44.8-99.9-99.9 0-55.1 44.8-99.9 99.9-99.9 55.1 0 99.9 44.8 99.9 99.9-0.1 55.1-44.9 99.9-99.9 99.9z m0-149.1c-27.2 0-49.3 22.1-49.3 49.3 0 27.2 22.1 49.3 49.3 49.3 27.2 0 49.3-22.1 49.3-49.3-0.1-27.2-22.2-49.3-49.3-49.3z",lock:"M811.1 960H212.9c-47.3 0-85.7-37.7-85.7-84V473.7c0-46.3 38.5-84 85.7-84h43.9l-0.5-77.1c0-66.2 26.5-128.6 74.6-175.7C379 89.9 442.7 64 510.2 64c67.6 0 131.3 25.9 179.4 72.9 48.1 47.1 74.6 109.4 74.6 175.6l-0.5 77.2h47.4c47.3 0 85.7 37.7 85.7 84V876c0 46.3-38.4 84-85.7 84zM208.9 447.1c-14.8 0-26.8 11.7-26.8 26.1v407.7c0 14.4 12 26.1 26.8 26.1h606.3c14.8 0 26.8-11.7 26.8-26.1V473.2c0-14.4-12-26.1-26.8-26.1H208.9z m301.9 346.3c-17.2 0-31.2-12.8-31.2-28.5V664.3c-22.4-11.4-36.7-34.2-36.7-59.1 0-36.7 30.5-66.5 67.9-66.5s67.9 29.9 67.9 66.5c0 24.9-14.3 47.7-36.7 59.1v100.6c0 15.7-14 28.5-31.2 28.5zM313.4 388.1H706l1.6-78.4c0-51.2-20.6-99.5-58-136-37.4-36.6-86.9-56.7-139.4-56.7s-102 20.1-139.4 56.7c-37.4 36.6-58 84.9-58 136.2l0.6 78.2z",mail:"M960 280.9v472.3c0 37.9-31 68.9-68.9 68.9H132.9c-37.9 0-68.9-31-68.9-68.9V280.9c0-3.9 4.5-5.8 7.3-3l232 236.1c1.5 1.7 1.5 4.3 0 6L141.1 692.7c-11 11-11 28.6 0 39.6 5.4 5.4 12.7 8.2 19.8 8.2s14.4-2.8 19.8-8.2l161.5-172.1c1.7-1.7 4.5-1.7 6.2 0l37.9 38.6c33.4 33.8 78.6 53.8 126.2 53.6 47-0.2 90.7-18.7 123.6-52.1l39.4-40.1c1.7-1.7 4.5-1.7 6.2 0l161.5 172.1c5.4 5.4 12.7 8.2 19.8 8.2s14.4-2.8 19.8-8.2c11-11 11-28.6 0-39.6L720.9 520c-1.7-1.7-1.7-4.3 0-6l231.8-236.1c2.6-2.6 7.3-0.9 7.3 3zM512 596.2c31.9 0 61.8-12.5 84.2-35.3l337.9-344c-11.8-9.5-26.5-15.1-42.6-15.1H132.7c-16.2 0-31 5.6-42.6 15.1l337.9 344c22.2 22.6 52.1 35.3 84 35.3z",menu:"M905 960H635.1c-30.3 0-55-24.7-55-55V635.1c0-30.3 24.7-55 55-55H905c30.3 0 55 24.7 55 55V905c0 30.3-24.7 55-55 55z m-516.1 0H119c-30.3 0-55-24.7-55-55V635.1c0-30.3 24.7-55 55-55h269.9c30.3 0 55 24.7 55 55V905c-0.1 30.3-24.7 55-55 55z m-263.4-61.2h258v-258h-258v258z m514.8-2.8h258V638h-258v258zM905 443.8H635.1c-30.3 0-55-24.7-55-55V119c0-30.3 24.7-55 55-55H905c30.3 0 55 24.7 55 55v269.9c0 30.3-24.7 54.9-55 54.9z m-516.1 0H119c-30.3 0-55-24.7-55-55V119c0-30.3 24.7-55 55-55h269.9c30.3 0 55 24.7 55 55v269.9c-0.1 30.3-24.7 54.9-55 54.9z m-263.4-61.1h258v-258h-258v258z","menu-dot":"M157.6 605.5c-51.6 0-93.5-41.9-93.5-93.5s41.9-93.5 93.5-93.5 93.5 41.9 93.5 93.5-41.9 93.5-93.5 93.5z m708.8 0c-51.6 0-93.5-41.9-93.5-93.5s41.9-93.5 93.5-93.5 93.5 41.9 93.5 93.5-42 93.5-93.5 93.5z m-354.3 0c-51.6 0-93.5-41.9-93.5-93.5s41.9-93.5 93.5-93.5 93.5 41.9 93.5 93.5-41.9 93.5-93.5 93.5z",mute:"M505.7 913.5c-18.9 0-39.5-9.5-59-27.7L257.2 705H141.4C92.2 705 64 676.8 64 627.7V396c0-49.9 27.5-77.4 77.4-77.4h115.9L446.7 138c26.5-24.8 56.4-33.5 80.1-23.2 25.1 10.9 39.4 40.7 39.4 82v630.1c0 41.4-14.4 71.4-39.5 82.3-6.7 2.8-13.7 4.3-21 4.3zM164.5 380.7c-29.8 0-38.5 8.6-38.5 38.5v185.3c0 30.6 7.9 38.5 38.5 38.5h126.7l2.3 2.5c80.5 85.6 141.6 149.1 176.7 183.7 14.3 14.1 23.2 17.4 26.6 16 1.2-0.5 7.3-4.4 7.3-30.8v-603c0-26.6-5.7-29.8-6.3-30-1-0.4-7.3-1.7-27.4 18-35.8 35-96 93.6-184.2 179.1l-2.3 2.2H164.5zM929 659c-8.3 0-16-3.2-21.9-9.1L800.9 543.7 695.1 649.5c-5.9 5.9-13.7 9.1-22 9.1s-16.1-3.2-21.9-9.1c-12.1-12.1-12.1-31.8 0-43.9L757 499.8 651.9 394.7c-12.1-12.1-12.1-31.7 0-43.8 5.9-5.9 13.6-9.1 21.9-9.1 8.3 0 16 3.2 21.9 9.1L800.8 456 907 349.8c5.9-5.9 13.7-9.1 21.9-9.1s16.1 3.2 21.9 9.1c5.9 5.9 9.1 13.7 9.1 21.9 0 8.3-3.2 16.1-9.1 21.9L844.7 499.9l106.2 106.2c12.1 12.1 12.1 31.7 0 43.8-5.8 5.9-13.6 9.1-21.9 9.1z",option:"M64 768h544v64H64v-64z m736 0h160v64H800v-64z m-32 127c0 35.9-28.7 65-64 65s-64-29.1-64-65V705c0-35.9 28.7-65 64-65s64 29.1 64 65v190zM64 480h160v64H64v-64z m352 0h544v64H416v-64z m-32 127c0 35.9-28.7 65-64 65s-64-29.1-64-65V417c0-35.9 28.7-65 64-65s64 29.1 64 65v190zM64 192h544v64H64v-64z m736 0h160v64H800v-64z m-32 127c0 35.9-28.7 65-64 65s-64-29.1-64-65V129c0-35.9 28.7-65 64-65s64 29.1 64 65v190z",phone:"M717.7 64H306.3C261 64 224 100.7 224 145.5v733.1c0 44.8 37 81.5 82.3 81.5h411.4c45.3 0 82.3-36.7 82.3-81.5V145.5c0-44.8-37-81.5-82.3-81.5zM728 832H296V163h432v669z m-168 64c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48 48 21.5 48 48z",pie:"M64 480C64 250.2 250.2 64 480 64c10.8 0 22 0.4 32 1.2V512H65.2c-0.8-10-1.2-21.2-1.2-32z m155.6 324.4C295.8 899.2 412.8 960 544 960c229.8 0 416-186.2 416-416 0-131.2-60.8-248.2-155.6-324.4-63.4-51-142.4-83.8-228.4-90.4V576H129.2c6.6 86 39.4 165 90.4 228.4z",pin:"M115.8 960c-13.7 0-26.6-5.4-36.4-15.2l-0.5 0.4 0.4-0.5c-18.3-18.4-20.4-46.7-5-67.2l179-242.4-138.8-138.8c-16.5-16.5-19.8-42.3-8-62.8l0.2-0.3c4.5-7.1 21.7-31.7 54.6-51.1 19.1-11.3 40.3-18.7 62.8-22.1 27.3-4.2 56.9-2.4 87.8 5.2 1.8 0.2 3.8 0.4 5.8 0.6h0.5c6 0.5 11.9 1.1 18.5 2.1 25.2 4.1 72.8-18 113.2-52.4 38.6-32.9 64.5-72 64.5-97.5 0-6.4-0.2-13.3-0.3-20-1.1-26.3-2.9-70.2 29.8-102.8 38.6-38.7 99.8-41.8 142.2-7.3 1 0.8 1.9 1.7 2.9 2.7l0.4 0.4c23.8 23.3 238 237.5 239.5 239 20.1 20.1 31.2 46.8 31.2 75.3 0 28.4-11 55.2-31.1 75.3-32.5 32.6-76.8 30.7-103.4 29.6h-1.4c-6-0.1-12.2-0.3-18.1-0.3-24.3 0-53.9 17.6-83.3 49.7-19.7 21.4-37.5 47.6-50 73.8-11.1 23.1-17.1 44.2-16.1 56.5 0.9 8.6 2.6 22.9 3 25.8 32.8 133.7-57.3 195.1-67.6 201.7l-0.1 0.1c-20.7 12.5-46.9 9.4-63.7-7.4L374.7 756.6c-11.6-11.6-11.6-30.6 0-42.2 5.6-5.6 13.1-8.8 21.1-8.8 8 0 15.5 3.1 21.1 8.8L565.4 863c6.5-5.2 17.3-15.3 26.2-31.2 16.2-29 19.3-64 9.5-104.2v-0.2c-0.6-2.8-3-23.4-3.9-31.8v-0.2c-1.9-22.6 5.5-53 20.7-85.6 15-32.1 36.6-64.3 60.9-90.7 28.9-31.5 74.5-69 127.2-69 7.1 0 15 0.2 21.4 0.3h0.2c26.5 1.1 46.2 0.9 59.2-12.1 8.8-8.8 13.6-20.5 13.6-33s-4.9-24.3-13.8-33.2C884.4 370 658 143.7 647.3 133.3c-17.8-14.2-44.6-12.5-61.2 4.1-13.1 13.2-13.4 32.6-12.3 58.7v0.1c0.2 7.2 0.3 14.7 0.3 21.8 0 43.9-31.9 97.3-85.5 142.9-23.9 20.4-51.2 38.1-76.8 49.8-31.9 14.6-60.3 20-84.6 16.1-5.1-0.8-9.9-1.2-14.1-1.6-2.7-0.2-5.4-0.5-8-0.8-2.6-0.1-5.1-0.6-7.7-1.4-83-20.4-123.9 20.5-136.1 36.1L313.6 611c10.5 10.5 11.8 26.9 2.9 38.9L152.7 871.6 316.2 752c6.4-4.7 14.3-6.6 22.2-5.4 7.9 1.2 14.8 5.5 19.5 11.9 9.7 13.3 6.7 32-6.5 41.7L146.2 949.9c-8.9 6.6-19.4 10.1-30.4 10.1z",plus:"M512 960c-21.2 0-38.4-17.2-38.4-38.4V550.3H102.3C81.2 550.4 64 533.2 64 512c0-21.2 17.2-38.4 38.4-38.4h371.3V102.3c0-21.1 17.2-38.4 38.4-38.4s38.4 17.2 38.4 38.4v371.3h371.3c21.1 0 38.4 17.2 38.4 38.4 0 10.3-4 19.9-11.2 27.1-7.2 7.2-16.9 11.2-27.1 11.2H550.6v371.3c0 10.3-4 19.9-11.2 27.1-7.5 7.3-17.1 11.3-27.4 11.3z",post:"M813.7 960H154.8c-0.7 0-17.2-0.1-33.7-8-16.1-7.7-35.3-24-35.3-58.3V130.3c0-34.1 19.2-50.4 35.3-58.2 16.5-7.9 33-8.1 33.6-8.1h658.9c0.7 0 17.2 0.2 33.7 8.1 16.1 7.7 35.3 24.1 35.3 58.2v32.5l-52.2 46.7v-79.9c-0.1-6.3-2.4-10.1-7.6-12.6-4.5-2.1-9.3-2.3-9.3-2.3H154.7s-5 0.1-9.6 2.4c-5.1 2.6-7.3 6.5-7.3 13.1v763.4c0 0.4 0.3 4.7 2.4 8.6 1.7 3 5 7 14.5 7h658.8c5.8 0 10.1-1.4 12.8-4.1 4.1-4.2 4.1-11 4.1-11.1V561.5l52.2-49.6v381.9c0 0.7-0.1 16.7-8.5 32.7-8 15.3-25 33.5-60.4 33.5zM424.4 655.6l-25.8 125.2 129.5-25.1L927.6 368l0.1-0.1c0.3-0.3 10.5-10 10.6-22.4 0.1-7.5-3.5-14.8-10.8-21.8L914.4 311c-15.2-14.8-23.4-22.7-44.2-42.9-7.3-7.1-15.1-10.7-23-10.5-13.1 0.2-23.2 10.3-23.3 10.4l-0.2 0.2-399.3 387.4z m18.7 37.3l-15.2 59.4 61-14.8-45.8-44.6z m81 29.2c-20-23-40-46.1-60.1-69.1l331-319c21.3 21.7 42.7 43.3 64 65-111.6 107.7-223.3 215.4-334.9 323.1z m52-312.8H257.5c-10.7 0-19.4-1.7-26-5.1-7.3-3.8-11.6-9.7-11.6-16.3 0-10.9 11.6-22 37.5-22h366l-47.3 43.4zM874 384c-21.7-21.3-43.3-42.7-65-64l38-38c21.7 21.3 43.3 42.7 65 64l-38 38zM607.2 270.3H257.7c-10.7 0-19.5-1.7-26.1-5.1-7.4-3.8-11.6-9.7-11.6-16.3 0-10.9 11.6-22 37.7-22h349.6c10.4 0 19.2 1.8 25.7 5.3 7.3 3.9 11.5 9.9 11.5 16.4-0.1 10.8-11.6 21.7-37.3 21.7z",qr:"M395 64H64v329.2h331V64z m-48.5 282.2h-235V111h235v235.2z m258.8 495.4h353.3v-46.9H605.3v46.9zM300.1 158.2H158.9V301h141.2V158.2zM629 64v330.7h331V64H629z m282.5 282.9h-235V111h235v235.9z m47.8 353.6h-165v46.8h164.9v-46.8zM723.9 464.4H512.1v94.7h211.8v-94.7z m-329.6-22.8H64.7v46.8h329.5v-46.8zM582.4 64.9h-46.9v211.8h46.9V64.9z m376.9 541.4H511.8v46.1h447.5v-46.1zM441.4 417.1h46.8V64.9h-46.8v352.2z m94 329.8h-46.8v165.3h-0.2v47.6h0.2v0.2h46.8v-0.2H700v-47.6H535.4V746.9z m331.1-589.4H723.9v142.8h142.6V157.5z m92.8 259.1H817.9v48.3H911V558h48.3V416.6z m-95 541.9h95v-94.3h-95v94.3z m-705.4-93.3h141.2V723.8H158.9v141.4z m117.9-283.1h164v-46.9h-164v46.9zM64 959.6h330.3V628.9H64v330.7z m47.5-283.7h235v235.9h-235V675.9z m93.9-93.8v-46.9H65v46.9h140.4z",quote:"M297.6 530.1h140.2V960H64V634.7C64 279.4 188.6 89.1 437.8 64v161.2c-93.4 30.1-140.2 116.1-140.2 258.5v46.4z m522.2 0H960V960H586.2V634.7c0-355.3 124.5-545.6 373.7-570.7v161.2c-93.4 30.1-140.2 116.1-140.2 258.5V530h0.1z","radio-on":"M512 288c-123.2 0-224 100.8-224 224s100.8 224 224 224 224-100.8 224-224-100.8-224-224-224z m0-224C265.6 64 64 265.6 64 512s201.6 448 448 448 448-201.6 448-448S758.4 64 512 64z m0 806.4c-197.1 0-358.4-161.3-358.4-358.4S314.9 153.6 512 153.6 870.4 314.9 870.4 512 709.1 870.4 512 870.4z","radio-off":"M512 64C265.6 64 64 265.6 64 512s201.6 448 448 448 448-201.6 448-448S758.4 64 512 64z m0 806.4c-197.1 0-358.4-161.3-358.4-358.4S314.9 153.6 512 153.6 870.4 314.9 870.4 512 709.1 870.4 512 870.4z",right:"M282.5 960c-24.2 0-43.9-18.1-43.9-40.3 0-10.9 4.9-21.4 13.4-29L678.2 512 252 133.2c-8.6-7.5-13.4-17.8-13.4-29 0-22.2 19.7-40.3 43.9-40.3 11.5 0 22.4 4 30.6 11.3l455.5 404.9c10.7 7.7 16.8 19.2 16.8 31.6 0 10.4-4.3 20.2-12 27.6l-0.3 0.3-460 409c-8.4 7.4-19.2 11.4-30.6 11.4z",sad:"M897.6 64c6.7 0 13.4 3 18 8.6 7.9 9.9 6.3 24.4-3.6 32.3-123.7 99-194.6 246.5-194.6 404.8 0 161 73 310.2 200.2 409.2 10 7.8 11.8 22.2 4 32.3-7.8 10-22.2 11.8-32.3 4C750.8 847.4 671.4 685 671.4 509.7c0-172.3 77.2-332.9 211.8-440.7 4.1-3.2 9.1-5 14.4-5zM207.4 348c60.6 0 109.8-49.2 109.8-109.8 0-60.6-49.1-109.8-109.8-109.8S97.6 177.6 97.6 238.3c0 60.6 49.1 109.7 109.8 109.7z m0 546.6c60.6 0 109.8-49.2 109.8-109.8 0-60.6-49.1-109.8-109.8-109.8-60.6 0-109.8 49.2-109.8 109.8 0 60.7 49.1 109.8 109.8 109.8z",search:"M914.4 957.9c12.4 4.6 26.5 1.5 35.8-7.9 9.2-9.3 12.2-23.1 7.7-35.4l-43.3-43.8-44.6-44.7L747.2 702c57-68.3 91.8-155.1 91.8-250.7C839 237.8 665.4 64 452.1 64 237.6 64 64 237.8 64 451.3 64 666 237.6 839.7 452.1 839.7c92.3 0.1 181.6-32.9 251.7-93.1l122.8 124.1 44.6 43.4 43.2 43.8zM452.1 777.7C272.3 777.7 126 632.5 126 451.3c0-180 146.3-325.2 326.1-325.2s326.1 145.2 326.1 325.2c0 179.9-146.3 326.4-326.1 326.4zM358 273c0.7 5.5-2.7 10.5-13.1 21.7-10.9 11.9-16.4 17.9-22.7 23-28.6 23.2-83.4 133.7-66.8 209.9 1.7 7.9 7.4 30.1-4.6 39.5-5.7 4.5-14.7 5.6-20.4 3.8-27.1-8.5-27.4-99.1 1.4-175.7 28.3-75.4 87.3-143.8 112-137 5.3 1.4 13.3 7.5 14.2 14.8z",second:"M512 64c-156.8 0-284.3 127.5-284.3 284.3S355.2 632.6 512 632.6s284.3-127.5 284.3-284.3S668.8 64 512 64z m-61.2 242.5h-40.1c0-45.5 14.1-77.7 42.3-96.5 18.2-12.1 41-18.2 68.3-18.2 28.5 0 52.3 8.7 71.5 25.9 19.1 17.3 28.7 40.5 28.7 69.6 0 26.4-8.2 48.3-24.6 65.5-11.2 11.8-31.6 25.6-61 41.4l-33.2 18.2c-19.4 10.6-33.8 22.3-43.2 35.1-6.7 8.8-10.6 17.6-11.8 26.4h173.9v37.8H402.5c0-30.9 7.1-57.2 21.4-78.7 12.1-18.2 30-34.3 53.7-48.2l42.3-24.6c21.8-12.8 36-22.3 42.3-28.7 10.9-11.5 16.4-26.9 16.4-46 0-15.2-4.5-27.9-13.7-38.2-11.5-13-28.1-19.6-49.6-19.6-20.3 0-36 6.2-46.9 18.7-11.7 13.7-17.6 33.7-17.6 60.1z m282.3 305.1c-4.8-10.3-18.1-15.2-29.7-10.8-11.6 4.3-17.2 16.2-12.4 26.6l80.8 173.8-148.3-26.7c-9.1-1.6-18.5 1.9-23.7 8.9l-83.3 113.3-4.2 6.5-4.9-6.4-83.1-112.5c-5.1-6.9-14.5-10.4-23.7-8.6l-148.3 28.1 81.1-174.5c4.8-10.4-0.7-22.2-12.3-26.5-11.6-4.2-24.9 0.7-29.8 11.1l-97.6 210c-3.2 7-1.9 14.9 3.5 20.7 5.4 5.8 13.9 8.4 22.2 6.8l175.3-33.2L492.9 951c2.6 3.5 6.2 6.1 10.3 7.6 1.9 0.7 4 1.1 6.1 1.3 0.2 0 3.7 0.1 4.6 0.1h0.3c6.8-0.6 13-3.9 16.8-9.1L629.3 817l175.3 31.5c4.6 0.8 9.2 0.4 13.3-1.2 3.4-1.3 6.4-3.3 8.8-5.9 5.4-5.8 6.7-13.8 3.5-20.7l-97.1-209.1z",setting:"M373.4 942.1c-2.9 0-5.7-0.5-8.6-1.5-53.7-19-102.6-47.6-145.6-85.2-7.8-6.8-10.8-17.6-7.9-27.5 13.4-44.6 8.3-91.3-14.6-131.5-22.9-40.1-60.2-68-105.1-78.5-10-2.3-17.8-10.5-19.7-20.7-5.2-28.7-7.9-57.3-7.9-85.2 0-27.9 2.7-56.5 8.1-85.1 1.9-10.3 9.6-18.4 19.7-20.8 44.9-10.4 82.2-38.3 105.1-78.5 22.8-40.1 28-86.8 14.6-131.4-3-9.9 0.1-20.8 7.9-27.6 42.9-37.6 91.9-66.3 145.6-85.2 9.8-3.5 20.6-0.8 27.7 6.9 31.4 34.1 73.8 52.9 119.4 52.9 45.7 0 88.1-18.8 119.5-52.9 7-7.6 17.9-10.4 27.6-6.9 53.6 18.9 102.6 47.6 145.6 85.2 7.8 6.8 10.8 17.6 7.9 27.5-13.5 44.7-8.3 91.4 14.6 131.5 22.9 40.1 60.2 68 105.1 78.5 10 2.4 17.8 10.5 19.7 20.8 5.4 28.6 8.1 57.3 8.1 85.1 0 27.8-2.7 56.4-8.1 85.1-1.9 10.3-9.7 18.4-19.7 20.7-44.9 10.5-82.2 38.4-105.1 78.5-22.9 40.2-28.1 86.9-14.6 131.5 3 9.9-0.1 20.8-7.9 27.6-43 37.7-92 66.3-145.6 85.2-9.8 3.4-20.6 0.6-27.6-7-31.3-34.1-73.7-52.9-119.4-52.9-45.6 0-88.1 18.8-119.5 52.9-5.1 5.4-12 8.5-19.3 8.5zM263.1 829.5c31 25 65.4 45.2 102.3 59.9 19.5-18 41.9-32.2 66.5-42.1 25.7-10.4 52.7-15.6 80.1-15.6 54.6 0 106.6 20.5 146.6 57.7 36.9-14.7 71.3-34.9 102.4-59.9-5.6-26.2-6.5-52.9-2.7-79.5 4-27.7 13-54 26.7-78.1 27.2-47.7 70.8-83.1 122.8-99.9 3-20.4 4.6-40.5 4.6-59.9s-1.5-39.6-4.6-60c-52.1-16.8-95.6-52.2-122.8-99.9-13.7-24.1-22.7-50.3-26.7-78.1-3.8-26.6-2.9-53.3 2.7-79.5-31-25.1-65.4-45.2-102.4-59.9-40.2 37.2-92.2 57.7-146.7 57.7-27.4 0-54.4-5.3-80.1-15.6-24.7-9.9-47-24.1-66.6-42.1-37 14.8-71.4 35-102.4 60 5.6 26.2 6.5 52.9 2.7 79.5-4 27.7-13 54-26.7 78.1-13.7 24.1-31.7 45.1-53.4 62.5-20.8 16.7-44.1 29.2-69.3 37.4-3 20.3-4.6 40.5-4.6 60 0 19.4 1.5 39.6 4.6 59.9 52.1 16.8 95.6 52.1 122.9 99.9 27.4 47.8 35.8 103.6 24.1 157.5zM512 668.2c-85 0-154.1-70.1-154.1-156.2S427 355.8 512 355.8c41.1 0 79.8 16.3 108.9 45.8C650 431.1 666.1 470.3 666 512c0 8.6-0.9 17.4-2.7 27.9-1.2 7-5.2 13.1-11 17.2-5.8 4-12.7 5.5-19.6 4.2-14.3-2.7-23.8-16.6-21.1-31 1.3-7.1 1.9-13 1.9-18.4C613.5 455.1 568 409 512 409c-55.9 0-101.5 46.2-101.5 102.9 0 56.8 45.5 102.9 101.5 102.9 5.4 0 11.1-0.6 18.1-1.9 6.8-1.3 13.7 0.2 19.4 4.1 5.9 4.1 9.9 10.2 11.2 17.4 2.6 14.4-6.9 28.3-21.2 30.9-10.2 2.1-19 2.9-27.5 2.9z",share:"M809.6 960c-82.9 0-150.4-67.5-150.4-150.4 0-6.2 0.4-12.2 1.1-18.2L337.1 615.2c-27.3 38.5-72.1 63.6-122.8 63.6-82.8 0-150.3-67.4-150.3-150.3s67.5-150.4 150.4-150.4c49.7 0 93.9 24.3 121.3 61.5l246.8-167.5c-7.4-17.8-11.5-37.3-11.5-57.7C571 131.5 638.5 64 721.4 64s150.4 67.5 150.4 150.4-67.5 150.4-150.4 150.4c-46 0-87.2-20.8-114.8-53.4L357 480.7c5 15 7.8 31.1 7.8 47.8 0 15.2-2.3 30-6.5 43.9l315.8 172.2c24.3-50.4 75.9-85.3 135.5-85.3 82.9 0 150.4 67.5 150.4 150.4S892.5 960 809.6 960z m-0.5-245.2c-52.8 0-95.8 42.9-95.8 95.7 0 52.8 43 95.7 95.8 95.7s95.7-42.9 95.7-95.7c0.1-52.8-42.9-95.7-95.7-95.7z m-88.7-598c-53.4 0-96.8 43.4-96.8 96.8s43.4 96.8 96.8 96.8 96.8-43.4 96.8-96.8-43.4-96.8-96.8-96.8zM214.3 433.6c-53 0-96.2 43.1-96.2 96.2 0 53 43.1 96.2 96.2 96.2 53 0 96.2-43.1 96.2-96.2 0-53-43.2-96.2-96.2-96.2z",star:"M891.9 355.6l-218.6-15.8c-4.6-0.4-8.6-3.1-10.2-7.5l-83.3-203.8C568.4 100.4 542.5 83 512.1 83c-30.3 0-56 17.4-67.7 45.7l-83.4 204c-1.8 4.2-5.7 7.2-10.2 7.5L132.5 356c-29.6 1.7-54.8 21.1-64.4 49.8-9.9 29-1.6 59.5 21.7 79.5l168.9 140.3c3.5 2.9 5.1 7.7 4 12.1l-51.5 211.9c-6 22-1.8 44.8 11.5 62.6 13.7 18 35.1 28.8 57.5 28.8 13.9 0 27.4-4.2 38.5-11.8l184.6-115.5c3.9-2.4 8.7-2.4 12.6 0l186.4 115.1c11.7 7.9 25.2 12.1 38.9 12.1 21 0 41.8-10.1 55.3-27.2 14.1-17.6 19.2-40.6 14.1-63.5L759 637.9c-1.1-4.5 0.5-9.3 4-12.3l171.4-140.7c23-19.8 31.2-50.3 21.5-79.3-9.4-28.7-34.8-48.3-64-50z m-4.8 97.5l-163 133.8a54.911 54.911 0 0 0-18.3 55.1L755 844c2.6 11.9-2.1 20.1-5.2 24-4.9 6.1-12.2 10-19.5 10-4.5 0-9-1.4-13.9-4.7L538.2 763c-8.5-5.3-18.3-8.1-28.3-8-10.1 0-20 2.8-28.5 8.2L304.8 873.5c-11.3 7.5-26.4 4.2-34.4-6.3-3.3-4.4-6.8-11.9-3.7-22.9L316 641.8c4.9-20.1-2.3-41.6-18.1-54.7L137.3 453.6c-12.7-11-9.2-25.2-7.8-29.2 1.4-4 7.1-17.5 23.8-18.4l208.2-15c20.5-1.5 38.4-14.5 46.1-33.6l79.5-194.3c6.4-15.7 20.9-17 25-17 4.2 0 18.6 1.2 25 17l79.5 194.3c7.7 19.1 25.6 32.1 46.1 33.6l208.5 15.2c16.3 0.9 22.1 14.3 23.5 18.4 1.1 3.6 4.6 17.8-7.6 28.5z","star-half":"M891.9 355.6l-218.6-15.8c-4.6-0.4-8.6-3.1-10.2-7.5l-83.3-203.8C568.4 100.4 542.5 83 512.1 83c-30.3 0-56 17.4-67.7 45.7l-83.4 204c-1.8 4.2-5.7 7.2-10.2 7.5L132.5 356c-29.6 1.7-54.8 21.1-64.4 49.8-9.9 29-1.6 59.5 21.7 79.5l168.9 140.3c3.5 2.9 5.1 7.7 4 12.1l-51.5 211.9c-6 22-1.8 44.8 11.5 62.6 13.7 18 35.1 28.8 57.5 28.8 13.9 0 27.4-4.2 38.5-11.8l184.6-115.5c3.9-2.4 8.7-2.4 12.6 0l186.4 115.1c11.7 7.9 25.2 12.1 38.9 12.1 21 0 41.8-10.1 55.3-27.2 14.1-17.6 19.2-40.6 14.1-63.5L759 637.9c-1.1-4.5 0.5-9.3 4-12.3l171.4-140.7c23-19.8 31.2-50.3 21.5-79.3-9.4-28.7-34.8-48.3-64-50z m-4.8 97.5l-163 133.8a54.911 54.911 0 0 0-18.3 55.1L755 844c2.6 11.9-2.1 20.1-5.2 24-4.9 6.1-12.2 10-19.5 10-4.5 0-9-1.4-13.9-4.7C648.3 831.1 580.2 789.1 512 747V147c-0.1-0.3-0.2-0.7 0-1 1.1-1.8 10.8 0.7 17.4 6.2 2 1.7 5.4 5 7.8 10.9l79.5 194.3c7.7 19.1 25.6 32.1 46.1 33.6l208.5 15.2c16.3 0.9 22.1 14.3 23.5 18.4 0.7 2.1 3.2 10.8-1.1 20-2.1 4.1-4.8 6.9-6.6 8.5z","star-full":"M891.9 355.6l-218.6-15.8c-4.6-0.4-8.6-3.1-10.2-7.5l-83.3-203.8C568.4 100.4 542.5 83 512.1 83c-30.3 0-56 17.4-67.7 45.7l-83.4 204c-1.8 4.2-5.7 7.2-10.2 7.5L132.5 356c-29.6 1.7-54.8 21.1-64.4 49.8-9.9 29-1.6 59.5 21.7 79.5l168.9 140.3c3.5 2.9 5.1 7.7 4 12.1l-51.5 211.9c-6 22-1.8 44.8 11.5 62.6 13.7 18 35.1 28.8 57.5 28.8 13.9 0 27.4-4.2 38.5-11.8l184.6-115.5c3.9-2.4 8.7-2.4 12.6 0l186.4 115.1c11.7 7.9 25.2 12.1 38.9 12.1 21 0 41.8-10.1 55.3-27.2 14.1-17.6 19.2-40.6 14.1-63.5L759 637.9c-1.1-4.5 0.5-9.3 4-12.3l171.4-140.7c23-19.8 31.2-50.3 21.5-79.3-9.4-28.7-34.8-48.3-64-50z",switch:"M512 960c-58 0-114.3-11.4-167.3-33.8-51.2-21.6-97.2-52.6-136.6-92.1-39.5-39.5-70.5-85.4-92.1-136.6-22.4-53-33.8-109.3-33.8-167.3 0-58.3 11.5-114.9 34.3-168.3l0.5-1.1c23.1-53.7 56.4-101.6 99.1-142.1 12.7-12 32.8-11.5 44.8 1.1 5.9 6.1 9 14.2 8.7 22.7-0.2 8.5-3.7 16.3-9.8 22.2-36.3 34.4-64.7 75.2-84.5 121.3l-1.8 4.1c-18.4 44.4-27.7 91.5-27.7 140.2 0 49.4 9.7 97.4 28.8 142.5 18.5 43.6 44.9 82.8 78.5 116.4 33.6 33.6 72.7 60 116.4 78.5 45.1 19.1 93.1 28.8 142.6 28.8 49.4 0 97.4-9.7 142.5-28.8 43.6-18.4 82.8-44.8 116.4-78.5 33.6-33.6 60.1-72.8 78.5-116.4 19.1-45.2 28.8-93.1 28.8-142.5 0-49.8-9.7-97.9-29-143.2l-0.5-1c-10.6-24.5-23.7-47.8-39-69.1-13.4-18.7-28.8-36.3-45.5-52.2l-0.2-0.2c-2.7-3-4.9-6.4-6.5-10.1-1.1-2.5-2.8-6.4-3.1-11.8-0.1-2.4 0-7.2 2.2-12.7 1.5-3.7 3.7-7.1 6.5-10.1 12.1-12.6 32.2-13.1 44.8-1.1 42.7 40.6 76 88.4 99.1 142.2l0.6 1.5c22.7 53.1 34.1 109.6 34.1 167.9 0 58-11.4 114.3-33.8 167.3-21.6 51.2-52.6 97.2-92.1 136.6-39.4 39.4-85.4 70.4-136.6 92.1C626.3 948.6 570 960 512 960z m0-452.1c-17.5 0-31.8-14.3-31.8-31.8V95.8c0-17.5 14.3-31.8 31.8-31.8s31.7 14.3 31.7 31.8V476c0.1 17.6-14.2 31.9-31.7 31.9z",tag:"M64 599.7c0-28.1 10.9-54.5 30.8-74.4L525.3 94.8c25.8-25.8 62.5-36.3 98-28.1l207.3 47.8c39 8.9 69.9 39.9 78.9 78.9l47.8 207.2c8.1 35.2-2.6 72.6-28.1 98.1L498.7 929.2c-19.9 19.9-46.3 30.8-74.4 30.8-28.1 0-54.5-10.9-74.4-30.8L94.8 674.1C74.9 654.2 64 627.8 64 599.7zM649.7 288c0 22.4 8.7 43.5 24.6 59.4 15.9 15.9 37 24.6 59.4 24.6s43.5-8.7 59.4-24.6c15.9-15.9 24.6-37 24.6-59.4 0-22.5-8.7-43.6-24.6-59.4-32.8-32.8-86-32.8-118.8 0-15.9 15.8-24.6 36.9-24.6 59.4z",talk:"M902.8 110H407.2c-31.5 0-57.2 25.1-57.2 55.9v391c0 30.8 25.6 55.9 57.2 55.9h344.7l60.2 92.1c11.5 13.2 33.5 5.2 33.5-12.1v-80h57.2c31.5 0 57.2-25.1 57.2-55.9v-391c0-30.9-25.6-55.9-57.2-55.9zM483.5 411.3c-21.1 0-38.1-16.7-38.1-37.2 0-20.6 17.1-37.2 38.1-37.2 21.1 0 38.1 16.7 38.1 37.2 0 20.5-17.1 37.2-38.1 37.2z m171.5 0c-21.1 0-38.1-16.7-38.1-37.2 0-20.6 17.1-37.2 38.1-37.2 21.1 0 38.1 16.7 38.1 37.2 0 20.5-17 37.2-38.1 37.2z m171.6 0c-21.1 0-38.1-16.7-38.1-37.2 0-20.6 17.1-37.2 38.1-37.2 21.1 0 38.1 16.7 38.1 37.2 0 20.5-17.1 37.2-38.1 37.2zM292.7 616.1V312.6H121.2c-31.5 0-57.2 25.1-57.2 55.9v391c0 30.8 25.7 55.9 57.2 55.9h57.2v80c0 17.3 22.1 25.2 33.5 12.1l60.2-92.1h344.7c31.5 0 57.2-25.1 57.2-55.9V672H349.9c-31.5-0.1-57.2-25.1-57.2-55.9z",third:"M512 64c-156.8 0-284.3 127.5-284.3 284.3S355.2 632.6 512 632.6s284.3-127.5 284.3-284.3S668.8 64 512 64z m-23.9 295.3v-33.2l20.4 0.9c17.1 0 30.7-3.5 40.8-10.6 12.4-8.9 18.6-22.3 18.6-40.3 0-12.4-3.7-22.9-11.1-31.5-10-11.8-25.6-17.7-46.5-17.7-23.9 0-40.9 8.4-51 25.3-6.5 10.9-9.8 24.8-9.8 41.7h-38.1c0-28.1 6.5-50.8 19.5-68.3 16.8-22.4 43.9-33.7 81.1-33.7 29.5 0 53 7.6 70.3 22.8 17.3 15.2 25.9 34.9 25.9 59.2 0 18.3-4.4 33.4-13.3 45.2-7.1 9.5-16 15.8-26.6 19.1 16.5 5.9 29 14.2 37.2 24.8 9.8 12.4 14.6 28.7 14.6 48.8 0 28.1-8.7 51.1-26.1 69.1-20.1 20.7-48.8 31-86 31-9.8 0-17.9-0.6-24.4-1.8-10.6-2.1-21.7-6.1-33.2-12-16.6-8.6-28.4-20.7-35.7-36.3-7.2-15.7-10.9-33.5-10.9-53.6h40.3c0 19.5 3.7 34.6 11.1 45.2 10.6 15.7 29.1 23.5 55.4 23.5 20.1 0 36.4-5.5 49-16.6 12.6-11.1 18.8-25.6 18.8-43.7 0-23-8.7-39.1-26.1-48.3-11.2-5.9-26.7-8.9-46.5-8.9h-17.7z m245 252.3c-4.8-10.3-18.1-15.2-29.7-10.8-11.6 4.3-17.2 16.2-12.4 26.6l80.8 173.8-148.3-26.7c-9.1-1.6-18.5 1.9-23.7 8.9l-83.3 113.3-4.2 6.5-4.9-6.4-83.1-112.5c-5.1-6.9-14.5-10.4-23.7-8.6l-148.3 28.1 81.1-174.5c4.8-10.4-0.7-22.2-12.3-26.5-11.6-4.2-24.9 0.7-29.8 11.1l-97.6 210c-3.2 7-1.9 14.9 3.5 20.7 5.4 5.8 13.9 8.4 22.2 6.8l175.3-33.2L492.9 951c2.6 3.5 6.2 6.1 10.3 7.6 1.9 0.7 4 1.1 6.1 1.3 0.2 0 3.7 0.1 4.6 0.1h0.3c6.8-0.6 13-3.9 16.8-9.1L629.3 817l175.3 31.5c4.6 0.8 9.2 0.4 13.3-1.2 3.4-1.3 6.4-3.3 8.8-5.9 5.4-5.8 6.7-13.8 3.5-20.7l-97.1-209.1z",time:"M512.3 544c-8.4 0-15.7-2.4-21.3-6.9-6.1-5-9.3-13.5-9.4-25.2L480 247.4c-0.1-19.8 11-31.3 30.6-31.4 10-0.1 17.8 2.6 23.3 8s8.3 13.1 8.4 23l1.6 233.9c65.9-0.9 168.5-2.1 179-0.8 3 0.4 5.9 1.1 6.2 1.2 4.3 1.2 13.2 3.7 19.3 12 2.7 3.7 5.8 9.9 5.5 19-0.3 10.5-4.8 16.9-8.4 20.5-5.6 5.5-12.1 7-16.8 8.1-2.2 0.5-5.7 1.1-9.6 1.2-45.2 0.8-91.2 1.1-135.6 1.4-23.2 0.2-47.2 0.3-70.8 0.6-0.1-0.1-0.2-0.1-0.4-0.1z m-0.3-424c216.5 0 392 175.5 392 392 0 78.5-23.1 151.5-62.8 212.8-0.6 12.9 6.4 24.8 17.8 30.2 10 4.7 22 3.6 31.3-2.9C934.4 682.7 960 600.3 960 512c0-247.4-200.6-448-448-448S64 264.6 64 512s200.6 448 448 448c83.3 0 161.3-22.7 228.1-62.4 9.5-9.6 11.4-24.3 4.9-35.6-6-10.5-18.1-16.2-30.3-14.4C655.5 883.4 586.2 904 512 904c-216.5 0-392-175.5-392-392s175.5-392 392-392z",track:"M738.3 425.3c1.2 1.1 2.5 2.2 3.9 3.2 24.5 18 63.2 8.4 92.1-22.8 30.4-32.7 35.7-75.4 12.3-97.2-24.1-21.9-65.5-13.3-96 19.6-13.2 14.2-22.3 31.1-25.6 47.5-4.1 19.9 0.7 38.1 13.3 49.7z m44.5-67.3c15.6-16.8 31.2-18.9 33.7-17.3 1.9 2.5 1 18.2-14.6 35-15.5 16.8-31.1 18.9-33.8 17.3-1.7-2.6-0.7-18.3 14.7-35z m34.4 158.2c2.1 2.4 4.4 4.6 7 6.5 19.7 14.4 49.6 10.6 72.8-9.2 26.5-22.7 33.1-57.2 15-78.4-17.8-20.8-53.5-19.7-79.7 2.7-26.7 22.7-33.3 57.2-15.1 78.4z m42.6-46c9.1-7.8 18-8.3 19.5-7.6 0.8 2-1.1 10.8-10.1 18.5-8.7 7.4-17.2 8.2-19.6 7.3-0.5-2.5 1.6-10.8 10.2-18.2z m79 110.6c-5.4-24-35.6-38.8-65.5-32-31.1 7-51.1 32.1-45.5 57 2.1 9.3 7.6 17.5 15.8 23.5 12.9 9.5 31.5 12.7 49.8 8.5 13.5-3.1 25.7-9.8 34.1-19.1 10.1-11 14.3-24.8 11.3-37.9z m-54.3 17.8c-7.7 1.7-14.3 0.3-17.1-1.7 1-2.3 5.7-6.9 14.7-9 7.8-1.7 14.3-0.3 17.5 1.1-0.4 1.9-5.2 7.4-15.1 9.6zM731.3 464.8l-139.6-151-3-2.8c-38.7-31-87.9-42.5-133.7-32.3-40.1 8.9-73.1 33.7-90.6 68-18.8 36.8-18.3 84.2-17.8 130.1 0.5 50.2 1.1 102.1-24.7 130.4-26 28.6-54 35.8-86.3 44.1-34.7 8.9-74 19-111.5 56.6-28.7 28.8-43.1 67.4-39.3 105.9 3 30.7 19.2 76.5 79.3 119.8l0.7 0.5c73 52.2 175.5 14.7 221.1-19.4 0.7-0.4 1.2-1 1.8-1.4 1.5-1.2 3.2-2.4 4.6-3.5l-0.2-0.3c0.6-0.7 1.4-1 2-1.7 8.6-11.3 5.8-27.5-6.1-36-9.9-7.1-22.8-6.3-31.8 0.5l-0.3-0.3c-59 34.1-114.1 55.2-161.1 21.6-35.2-25.4-55.2-54.2-58.1-83.4-2.3-24.1 6.9-48.5 25.4-67 27.8-27.8 55.7-35 88.1-43.3 35.2-9.1 75.2-19.3 111.3-59.1 38.5-42.4 37.9-103.9 37.2-163.4-0.5-41.9-0.9-81.4 12.5-107.7 10.8-21.1 31.4-36.5 56.6-42.1 28.2-6.3 58.7 0.3 83.6 18.2 1.1 0.8 2.3 1.6 3.4 2.5L692.3 497c49.3 57.6 48.2 110.2-3.4 165.6-61.9 65.9-124.7 96.7-180.2 123l0.1 0.2c-3.4 1.7-6.5 4-9 7.2-8.6 11.3-5.8 27.5 6.1 36 8.4 6 19.1 6.4 27.8 2.2l0.1 0.2c55.7-26.5 128.7-65.1 194-134.6 68.9-74 70.4-154 3.5-232zM524.1 242.4c4.1 3 8.6 5.4 13.3 7.2 37.4 13.9 81.5-15.2 100.5-66.3 16.2-43.6 8.2-88.3-19.6-108.7-4.1-3-8.6-5.4-13.3-7.2-18.8-7-40.8-3-60.1 11-17.5 12.6-31.8 32.2-40.4 55.3-16.2 43.6-8.2 88.3 19.6 108.7z m16.7-93.1c5.5-14.8 14.7-27.7 25.2-35.3 5-3.6 14.8-9.2 23.9-5.8 1.4 0.5 2.8 1.3 4 2.2 11.2 8.2 16.6 33.3 6.3 61-11.4 30.7-35.1 46.3-49.1 41.1-1.4-0.5-2.8-1.3-4-2.2-11.1-8.2-16.6-33.3-6.3-61z m104.8 181.2c27.5 20.4 71.3 5.7 99.7-33.5 28.4-39.2 29.1-85.8 1.6-106.2-27.5-20.4-71.3-5.7-99.7 33.5-28.4 39.1-29.1 85.8-1.6 106.2z m74.8-103.1c3.4 2.5 4.9 21.2-10.9 43s-33.9 26-37.3 23.5c-3.4-2.5-4.9-21.2 11-43.1 15.7-21.8 33.8-26 37.2-23.4z",trash:"M750.5 938.9H278.6c-53.3 0-96.6-39.8-96.6-88.7V255h-66.5C85.7 255 64 244.3 64 229.6s21.7-25.4 51.5-25.4h793c29.8 0 51.5 10.7 51.5 25.4S938.3 255 908.5 255h-61.4v595.2c0 48.9-43.3 88.7-96.6 88.7zM230.1 255v595.2c0 22.4 21.8 40.6 48.6 40.6h471.8c26.8 0 48.6-18.2 48.6-40.6V255h-569z m408.8 628.6c-15.8 0-27.3-21.7-27.3-51.6V513.2c0-29.9 11.5-51.6 27.3-51.6s27.3 21.7 27.3 51.6V832c0 29.9-11.5 51.6-27.3 51.6z m-127.4 0c-15.8 0-27.3-21.7-27.3-51.6V513.2c0-29.9 11.5-51.6 27.3-51.6s27.3 21.7 27.3 51.6V832c0 29.9-11.4 51.6-27.3 51.6z m-127.4-1c-15.8 0-27.3-21.7-27.3-51.6V512.2c0-29.9 11.5-51.6 27.3-51.6s27.3 21.7 27.3 51.6V831c0.1 29.9-11.4 51.6-27.3 51.6z m389.8-746.8H250.1c-29.8 0-51.5-10.7-51.5-25.4S220.3 85 250.1 85h523.8c29.8 0 51.5 10.7 51.5 25.4 0 14.8-21.7 25.4-51.5 25.4z",unmute:"M517.3 924.1c-19.4 0-40.5-9.8-60.4-28.4L262.3 710h-119C92.9 710 64 681.1 64 630.8V392.9c0-51.1 28.1-79.2 79.2-79.2h119L457 128c27.1-25.4 57.7-34.3 82-23.7 25.7 11.1 40.4 41.7 40.4 84v647.1c0 42.4-14.8 73.1-40.5 84.3-6.9 2.9-14.1 4.4-21.6 4.4zM167 377c-30.8 0-39.7 8.9-39.7 39.7V607c0 31.6 8.2 39.7 39.7 39.7h130.1l2.3 2.5c84.6 89.9 145.7 153.4 181.5 188.7 19 18.7 26.3 17 27.6 16.5 1.3-0.5 7.6-4.6 7.6-31.8V203.3c0-27.5-6-30.7-6.6-31-1.5-0.7-8.2-1.2-28.3 18.5-58.4 57.2-159.6 155.3-189.2 184l-2.3 2.2H167z m644.8 454.6c-14.8 9.1-33.4 5.6-42.8-6.6-7.6-9.9-8.1-24.4-1-36 1.3-1.4 3.2-3.3 5.4-5.8 27.2-29.1 47-49.6 64-76.1 10.2-15.9 19.3-32.6 27.1-49.9 22.4-49.6 33.7-102.5 33.7-157.3 0-99.6-38.1-194.4-107.4-266.7-1.6-1.7-3.3-3.5-4.9-5.2-6.9-12.4-4.9-28 5-38 10.2-10.3 26.3-12.5 39-5 3 3.2 6 6.4 9 9.5 78 83.5 121 191.8 121 305.4 0 63-13 124-38.6 181.1-24.6 55-59.7 103.9-104.2 145.5l-5.3 5.1z m-97.5-119.8c-11.9 7.3-27 6.5-37.3-1.8-11.9-9.6-15.2-27.3-7.2-41.5 1.6-1.9 3.2-3.7 4.9-5.6 36.5-42.1 56.7-95.7 56.7-151 0-56.6-20.9-111.1-58.8-153.6l-5.4-6c-6.4-13-3.2-28.8 7.8-38.2 11-9.5 27.1-10.3 39-2 3.1 3.4 6.3 6.8 9.4 10.2 45.2 53.1 70 120.3 70 189.6 0 71.3-26.2 140.1-73.7 193.8l-5.4 6.1z",upload:"M392 325.7s-54.2-68.6-127.7-12.6c-65.8 53.5-54.2 151.3-54.2 151.3S64 501.9 64 697.9c3.3 195.8 158.7 197.8 158.7 197.8l233.3 0.3V686.4H344.2L512 476.9l167.9 209.6H568V896l226.6-0.3s144.7 0.2 165-186.1c9.7-203.7-139.8-243.8-139.8-243.8s17-301.5-192.9-335.9C446.8 105.7 392 325.7 392 325.7z",user:"M929.2 960c-13.7 0-25.5-8.9-29.5-22-12.6-41.6-31.5-80.7-56.4-116.4-24.5-35.2-54.2-66.2-88.2-92-70.6-53.7-154.7-82.1-243.2-82.1-88.4 0-172.5 28.4-243 82-34 25.8-63.6 56.7-88.2 91.9-24.9 35.6-43.8 74.7-56.4 116.2-2.4 8-7.8 14.5-15.1 18.4-7.3 3.9-15.6 4.6-23.5 2.2-16.2-5-25.3-22.4-20.4-38.8 14.5-47.8 36.4-92.8 65-133.8 28.2-40.4 62.4-76 101.5-105.7 39.6-30.1 83.3-53.5 129.9-69.5 48.3-16.6 98.8-25 150.2-25 51.5 0 102 8.4 150.3 25.1 46.7 16.1 90.4 39.5 130 69.6 39.1 29.8 73.2 65.4 101.5 105.9 28.6 41 50.4 86.1 64.9 134 4.9 16.3-4.2 33.7-20.4 38.7-2.9 0.8-6 1.3-9 1.3zM512 569c-67.4 0-130.9-26.3-178.6-74-47.7-47.7-74-111.1-74-178.6s26.3-130.9 74-178.6C381.1 90.3 444.5 64 512 64c67.4 0 130.9 26.3 178.6 74 47.7 47.7 74 111.1 74 178.5s-26.3 130.9-74 178.6C642.9 542.8 579.4 569 512 569z m0-443.4c-51 0-98.9 19.9-135 55.9-36.1 36.1-55.9 84-55.9 135s19.9 98.9 55.9 135c36.1 36.1 84 55.9 135 55.9s99-19.9 135-55.9c36.1-36.1 55.9-84 55.9-135s-19.9-98.9-55.9-135c-36.1-36.1-84-55.9-135-55.9z",vip:"M511.9 946.7c-8.5 0-16.6-4-21.8-10.8L165 511.8c-6.1-7.7-7.6-18.2-3.9-27.3 3.7-9.2 12.1-15.6 22-16.9 8.2-1 16.3 1.7 22.2 7.2h0.5l306.1 399.3 222.7-290.6c4.5-5.8 10.9-9.5 18.2-10.5 7.3-1 14.5 1 20.3 5.4 12 9.2 14.3 26.5 5.1 38.5l-244.5 319c-5.1 6.7-13.3 10.8-21.8 10.8z m75.6-332h-1.7a16 16 0 0 1-3.9-0.5l-2.7-0.5-3.9-1.4-0.6-0.3c-7.5-4-11.7-11.4-11.7-20.7V432c0-19.9 12-31.3 32.8-31.3h57.5c21.6 0 38.3 5.4 49.6 16 11.5 10.8 17.3 26.7 17.3 47.3 0 21.6-7.5 38.4-22.3 49.9-12.1 9.2-27.2 13.9-45.1 13.9h-42.6v63.5c0 9.3-4.1 16.7-11.7 20.7l-0.6 0.3-3.9 1.4-2.7 0.5c-1.1 0.4-2.4 0.5-3.8 0.5z m22.8-118.2h33.8c5.9 0 10.7-1.2 14.4-3.5l0.1-0.1c3.2-1.9 5.6-4.5 7.4-8l0.1-0.2c1.8-3.2 3.1-6.9 3.9-11 0.6-3.4 0.8-6.9 0.8-10.4 0-1.5-0.1-3-0.2-4.6v-0.8c0-1.6-0.1-3.1-0.4-4.6-0.7-4.3-1.8-7.8-3.2-10.7-1.8-3.3-4-5.9-6.9-7.6-3.7-2.2-8.6-3.3-14.3-3.3h-35.5v64.8zM488 600c-0.6-137.8-0.9-183.2 0-187 2-8.1 10.6-19.4 24-19 11.6 0.3 21.5 9.3 23 21 0.1 61.8 0.1 123.6 0.2 185.3-1.6 11.7-11.6 20.5-23.2 20.7-12 0.2-22.5-8.9-24-21z m-100.9 14.7c-14 0-24.4-7.3-29.3-20.6l-60.2-169-0.1-0.7c-0.3-1.4-0.4-2.8-0.4-4.2 0-14.6 9.3-23.3 25-23.3 8.5 0 13.6 3.6 16.4 6.6l0.3 0.4c1.3 1.5 2.4 3.2 3.3 5.2l0.4 0.8 0.4 0.6 50.6 145.8L444.4 408c2.7-7 8.4-11 15.6-11 10.1 0 16.7 6.6 16.7 16.7v2.7l-61 177.5c-1.6 4.7-4.2 9-7.8 12.6l-0.1 0.1c-5.7 5.4-12.6 8.1-20.7 8.1z m422.5-56.2c-5.8 0-11.7-1.9-16.7-5.7-11.7-9-14.2-25.5-5.7-37.6l0.2-0.3L910.7 354c9.2-12 26.4-14.3 38.4-5.1 12 9.2 14.3 26.4 5.1 38.5l-123.4 161-0.1 0.1c-5.5 6.6-13.3 10-21.1 10z m-669-96.1c-7.9 0-15.7-3.4-21.1-9.9l-0.2-0.3-49.7-64.8c-4.5-5.8-6.4-13-5.4-20.3 1-7.3 4.7-13.7 10.5-18.2 12-9.2 29.3-6.9 38.5 5.1l49.8 65c8.5 12.1 6 28.6-5.7 37.6-5 3.9-10.8 5.8-16.7 5.8z m643.6-88.6h-545c-13.4 0-24.4-10.9-24.4-24.4 0-13.4 10.9-24.4 24.4-24.4h545c13.4 0 24.4 10.9 24.4 24.4-0.1 13.5-11 24.4-24.4 24.4z m148.4-48.6c-8.8 0-17.2-4.3-22.4-11.6l-45.6-62.8c-4.3-5.9-6.1-13.2-4.9-20.4 1.1-7.2 5-13.6 11-17.9 12.2-8.9 29.4-6.2 38.3 6.1l45.7 62.9c5.8 7.8 7 18.3 3 27.4-4 9-12.5 15.2-22.4 16.2-0.9 0.1-1.8 0.1-2.7 0.1zM91.4 315c-5.6 0-11.2-1.7-16.1-5.2-12.2-8.9-15-26.1-6.1-38.3L202 88.6c5.1-7.1 13.4-11.3 22.2-11.3h575.4c8.7 0 17 4.2 22.2 11.3l51.6 71c4.3 5.9 6 13.2 4.9 20.4-1.1 7.2-5.1 13.6-11 17.9-5.9 4.3-13.2 6-20.4 4.9-7.2-1.1-13.6-5.1-17.9-11l-43.4-59.7H238.2L113.6 303.7c-5.3 7.4-13.7 11.3-22.2 11.3z",warn:"M907.3 931H116.7c-20.2 0-36.9-8.4-46-23.2-9-14.7-8.9-33.5 0.3-51.5l363.3-711.7c13.5-26.4 45.6-48 76.2-51.3l2.7-0.3 2.7 0.3c30.7 3.3 62.7 24.9 76.2 51.4l361.2 711.5c9.1 18 9.2 36.8 0.2 51.6-9.3 14.7-26 23.2-46.2 23.2z m-791.8-50.7h793.1c-0.2-0.4-0.3-0.8-0.6-1.2l-0.9-1.7-360.3-709.8c-5.4-10.7-20.4-21.1-33.7-23.6-13.4 2.5-28.4 12.9-33.8 23.6L116 879.3c-0.2 0.3-0.3 0.7-0.5 1zM512 812c-24.3 0-44-19.7-44-44s19.7-44 44-44 44 19.7 44 44-19.7 44-44 44z m0-108c-16.5 0-30-13.5-30-30V330c0-16.5 13.5-30 30-30s30 13.5 30 30v344c0 16.5-13.5 30-30 30z",wallet:"M384.5 682.6V341.4c0-47 39.4-85.4 88.5-85.4h408.1v-42.6c0-47-39.2-85.4-87.6-85.4H155.2c-49.1 0-91.2 37-91.2 84v600c0 47 42.1 84 91.2 84h638.1c48.7 0 87.6-38.4 87.6-85.4V768H472.7c-48.9 0-88.2-38.4-88.2-85.4zM448 355.7v312.6c0 19.6 16.8 35.7 37.4 35.7h437.2c20.6 0 37.4-16.1 37.4-35.7V355.7c0-19.6-16.8-35.7-37.4-35.7H485.4c-20.6 0-37.4 16.1-37.4 35.7z m195.9 227.4c-43 2.7-78.4-32.8-75.8-75.8 2.2-35.4 31-64.2 66.6-66.7 43-2.7 78.4 32.8 75.8 75.8-2.5 35.7-31.2 64.5-66.6 66.7z",windows:"M431.2 491.5H64V187.3l367.2-50.6v354.8z m0 395.8L64 836.7V536.8h367.2v350.5zM960 491.5H471.6V131.3L960 64v427.5z m0 468.5l-488.4-67.3V536.8H960V960z"};export default SVG_PATH; \ No newline at end of file diff --git a/src/lib/layer/index.js b/src/lib/layer/index.js new file mode 100644 index 0000000..fe89d75 --- /dev/null +++ b/src/lib/layer/index.js @@ -0,0 +1,15 @@ +/** + * + * @authors yutent (yutent.io@gmail.com) + * @date 2020-07-24 13:55:26 + * @version v2.0.1 + * + */ + +'use strict' + +import"../form/input.js";import Drag from"../drag/core.js";import $ from"../utils.js";const LANGUAGES={en:{TITLE:"Dialog",BTNS:["Cancel","OK"]},zh:{TITLE:"提示",BTNS:["取消","确定"]}};LANGUAGES["zh-CN"]=LANGUAGES.zh;const lang=LANGUAGES[window.__ENV_LANG__||navigator.language]||LANGUAGES.en;let uniqueInstance=null,toastInstance=null;const UNIQUE_TYPES=["alert","confirm","prompt"];function renderBtns(t){var e="";return t.forEach((t,s)=>{e+=``}),e}class Layer extends HTMLElement{static get observedAttributes(){return["left","right","top","bottom","from","to","btns","type","title","blur","background","mask","radius","mask-close","mask-color","fixed"]}constructor(){super(),Object.defineProperty(this,"root",{value:this.attachShadow({mode:"open"}),writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(this,"props",{value:{left:"auto",right:"auto",top:"auto",bottom:"auto",from:Object.create(null),to:Object.create(null),btns:[],type:"",title:"",blur:!1,background:null,mask:!1,radius:null,"mask-close":!1,"mask-color":null,fixed:!0},writable:!0,enumerable:!1,configurable:!0}),this.root.innerHTML='
    ',this.__TITLE__=this.root.children[1].firstElementChild,this.__BODY__=this.root.children[1].children[1],this.__CTRL__=this.root.children[1].lastElementChild,this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}set title(t){this.props.title=t,t?(this.__TITLE__.firstElementChild?this.__TITLE__.insertBefore(document.createTextNode(t),this.__TITLE__.firstElementChild):this.__TITLE__.textContent=t,this.__TITLE__.style.display="flex"):this.__TITLE__.style.display=""}set type(t){var{btns:e}=this.props;if(t&&!this._handleBtnClick){switch(t){case"alert":for(;e.length>1;)e.splice(0,1);break;case"confirm":case"prompt":for(;e.length>2;)e.splice(0,1);break;case"toast":case"notify":case"frame":if("notify"===t){var s=document.createElement("wc-icon");s.setAttribute("is","close"),this.__TITLE__.appendChild(s)}e=[];break;default:t="common"}this.props.type=t,e.length?(this.__CTRL__.innerHTML=renderBtns(e),this.__CTRL__.style.display="flex"):this.__CTRL__.style.display="",this.setAttribute(t,"")}}set fixed(t){this.props.fixed=!!t,this._updateFixedStat()}_updateFixedStat(){UNIQUE_TYPES.includes(this.props.type)||(this.props.fixed?this._dragIns&&(this._dragIns.destroy(),this._dragIns=null):(this._dragIns=new Drag(this.root.children[1]).by(this.__TITLE__,{overflow:!!this.props.hasOwnProperty("overflow")&&this.props.overflow}),this.removeAttribute("fixed")))}_intercept(t){this.props.intercept?this.props.intercept(t,e=>{delete this.props.intercept,this.resolve(t),this.close()}):(this.resolve(t),this.close())}close(t){if(!1===this.wrapped)if(this._dragIns&&this._dragIns.destroy(),UNIQUE_TYPES.includes(this.props.type)&&(uniqueInstance=null),delete this.promise,$.unbind(this.__CTRL__,"click",this._handleBtnClick),this.props.from&&!t){let t="opacity:0;";for(let e in this.props.from)t+=`${e}:${this.props.from[e]};`;this.root.children[1].style.cssText+=t,this.timer=setTimeout(()=>{this.parentNode.removeChild(this),this.dispatchEvent(new CustomEvent("close"))},200)}else clearTimeout(this.timer),this.parentNode.removeChild(this),this.dispatchEvent(new CustomEvent("close"));else this.removeAttribute("common"),this.dispatchEvent(new CustomEvent("close"))}show(){!1!==this.wrapped&&this.setAttribute("common","")}moveTo(t={}){var e="";for(var s in t)e+=`${s}:${t[s]};`;this.root.children[1].style.cssText+=e}connectedCallback(){this.type=this.props.type,this.title=this.props.title,this._handleBtnClick=$.bind(this.__CTRL__,"click",t=>{if("BUTTON"===t.target.tagName){var e=+t.target.dataset.idx,{type:s}=this.props;switch(s){case"alert":this.resolve(),this.close();break;case"confirm":case"prompt":if(0===e)this.reject(),this.close();else{let t="prompt"===s?this.__INPUT__.value:null;this._intercept(t)}break;default:this._intercept(e)}}}),"prompt"===this.props.type&&(this.__INPUT__=this.__BODY__.firstElementChild.assignedNodes().pop(),this._handleSubmit=$.bind(this.__INPUT__,"submit",t=>{this._intercept(t.detail)})),this.props.mask&&this.setAttribute("mask",""),this._updateFixedStat(),this.props.mask&&(this._handlMask=$.outside(this.root.children[1],t=>{t.target===this&&(this.props["mask-close"]?(!1===this.wrapped&&this.reject(null),this.close()):UNIQUE_TYPES.includes(this.props.type)&&(this.root.children[1].classList.toggle("scale",!0),setTimeout(t=>{this.root.children[1].classList.remove("scale")},100)))}),this.props["mask-color"]&&(this.style.backgroundColor=this.props["mask-color"])),this.props.blur&&this.root.children[1].classList.toggle("blur",!0);let t=this.props.from?"":"opacity:1;";if(this.props.background&&(t+=`background: ${this.props.background};`),(this.props.radius||0===this.props.radius)&&(t+=`border-radius: ${this.props.radius};`),this.props.size)for(let e in this.props.size)t+=`${e}:${this.props.size[e]};`;if(this.props.from){for(let e in this.props.from)t+=`${e}:${this.props.from[e]};`;setTimeout(t=>{let e="opacity:1;";for(let t in this.props.to)e+=`${t}:${this.props.to[t]};`;this.root.children[1].style.cssText+=e},50)}t&&(this.root.children[1].style.cssText+=t),"toast"===this.props.type&&(this.timer=setTimeout(()=>{toastInstance=null,this.close()},3e3)),"notify"===this.props.type&&(this._handleClose=$.bind(this.__TITLE__,"click",t=>{"WC-ICON"===t.target.tagName&&this.close()}))}disconnectedCallback(){$.clearOutside(this._handlMask),$.unbind(this.__TITLE__,"click",this._handleClose)}attributeChangedCallback(t,e,s){if(null!==s&&e!==s)switch(t){case"title":case"type":this[t]=s,this.removeAttribute(t);break;case"mask-color":case"background":this.props[t]=s;break;case"mask":case"mask-close":case"blur":this.props[t]=!0;break;case"radius":this.props.radius=s;break;case"left":case"right":case"top":case"bottom":this.props.from[t]=s,this.props.to=this.props.from,this.removeAttribute(t);break;case"fixed":this.fixed=!0}}}function _layer(t){var e=document.createElement("wc-layer");if(t.type||(t.type="common"),"toast"===t.type){var{type:s,content:o}=t;t={type:s,content:o,from:{top:0},to:{top:"30px"}},toastInstance&&toastInstance.close(!0),toastInstance=e}else e.props.mask=t.mask,!1===t.btns?e.props.btns=[]:t.btns&&t.btns.length?e.props.btns=t.btns:e.props.btns=lang.BTNS.concat(),t.intercept&&"function"==typeof t.intercept&&(e.props.intercept=t.intercept),e.props.mask=t.mask,e.props["mask-close"]=t["mask-close"],t.hasOwnProperty("overflow")&&(e.props.overflow=t.overflow),e.props["mask-color"]=t["mask-color"],e.props.blur=t.blur,e.props.radius=t.radius,e.props.background=t.background,t.size&&"object"==typeof t.size&&(e.props.size=t.size),UNIQUE_TYPES.includes(t.type)&&(uniqueInstance&&uniqueInstance.close(!0),uniqueInstance=e);return t.to&&"object"==typeof t.to&&(e.props.to=t.to,t.from&&"object"==typeof t.from?e.props.from=t.from:e.props.from=t.to),e.props.type=t.type,e.props.title=t.title,t.hasOwnProperty("fixed")&&(e.props.fixed=t.fixed),e.innerHTML=t.content,e.wrapped=!1,document.body.appendChild(e),e.promise}Object.assign(_layer,{alert(t,e=lang.TITLE){return this({type:"alert",title:e,content:t,mask:!0})},confirm(t,e=lang.TITLE,s){return"function"==typeof e&&(s=e,e=lang.TITLE),this({type:"confirm",title:e,content:t,mask:!0,intercept:s})},prompt(t=lang.TITLE,e){return this({type:"prompt",title:t,content:'',mask:!0,intercept:e})},frame(t,e={}){return this({...e,type:"frame",content:``,mask:!0,"mask-close":!0})},notify(t){return this({type:"notify",title:"通知",content:t,blur:!0,from:{right:"-300px",top:0},to:{right:0}})},toast(t,e="info"){var s=e;switch(e){case"info":case"warn":break;case"error":s="deny";break;case"success":s="get";break;default:s="info"}return this({content:`\n
    \n \n ${t}\n
    `,type:"toast"})}}),window.layer=_layer;export default _layer; + +if(!customElements.get('wc-layer')){ + customElements.define('wc-layer', Layer) +} diff --git a/src/lib/scroll/index.js b/src/lib/scroll/index.js new file mode 100644 index 0000000..d73c9d8 --- /dev/null +++ b/src/lib/scroll/index.js @@ -0,0 +1,15 @@ +/** + * + * @authors yutent (yutent@doui.cc) + * @date 2020-07-07 10:57:15 + * @version v2.0.1 + * + */ + +'use strict' + +import $ from"../utils.js";const IS_FF=!!window.sidebar;export default class Scroll extends HTMLElement{static get observedAttributes(){return["thumbX","thumbY","disabled","axis"]}constructor(){super(),Object.defineProperty(this,"root",{value:this.attachShadow({mode:"open"}),writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(this,"props",{value:{thumbX:0,thumbY:0,disabled:!1,axis:"xy"},writable:!0,enumerable:!1,configurable:!0}),this.root.innerHTML='
    ',this.__BOX__=this.root.children[1],this.__X__=this.root.children[2].children[0],this.__Y__=this.root.children[3].children[0]}get scrollTop(){return this.__BOX__.scrollTop}set scrollTop(t){if((t=+t)==t){var{sh:s,oh:i,yh:e}=this.props;this.__BOX__.scrollTop=t;var o=this.__BOX__.scrollTop/(s-i)*(i-e);this.props.thumbY=o,this.__Y__.style.transform=`translateY(${o}px)`}}get scrollLeft(){return this.__BOX__.scrollLeft}set scrollLeft(t){if((t=+t)==t){var{sw:s,ow:i,xw:e}=this.props;this.__BOX__.scrollLeft=t;var o=this.__BOX__.scrollLeft/(s-i)*(i-e);this.props.thumbX=o,this.__X__.style.transform=`translateX(${o}px)`}}get scrollHeight(){return this.__BOX__.scrollHeight}get disabled(){return this.props.disabled}set disabled(t){var s=typeof t;t!==this.props.disabled&&("boolean"===s&&t||"boolean"!==s?(this.props.disabled=!0,this.setAttribute("disabled","")):(this.props.disabled=!1,this.removeAttribute("disabled")))}_fetchScrollX(t){var{sw:s,ow:i,xw:e}=this.props;return t<0?t=0:t>i-e&&(t=i-e),this.__BOX__.scrollLeft=t/(i-e)*(s-i),this.__X__.style.transform=`translateX(${t}px)`,t}_fetchScrollY(t){var{sh:s,oh:i,yh:e}=this.props;return t<0?t=0:t>i-e&&(t=i-e),this.__BOX__.scrollTop=t/(i-e)*(s-i),this.__Y__.style.transform=`translateY(${t}px)`,t}connectedCallback(){this._initFn=$.bind(this.__BOX__,"mouseenter",t=>{if(!this.disabled){var s=this.__BOX__.offsetWidth,i=this.__BOX__.scrollWidth,e=this.__BOX__.offsetHeight,o=this.__BOX__.scrollHeight,h=e*e/o>>0,r=s*s/i>>0;h<50&&(h=50),r<50&&(r=50),r===s&&(r=0),h===e&&(h=0),this.props.oh=e,this.props.sh=o,this.props.ow=s,this.props.sw=i,this.props.yh=h,this.props.xw=r,this.__X__.style.width=r+"px",this.__Y__.style.height=h+"px"}}),this._wheelFn=$.bind(this.__BOX__,"wheel",t=>{if(!this.disabled){var{sh:s,oh:i,yh:e,sw:o,ow:h,xw:r}=this.props;if(r||e){var l,a,_=Date.now();if((!this.stamp||_-this.stamp>800)&&(this.stamp=_,this.times=1),IS_FF)l=t.deltaMode?10*t.deltaX:t.deltaX,a=t.deltaMode?10*t.deltaY:t.deltaY;else{var n=Math.abs(t.wheelDelta);n<120?(l=t.deltaX,a=t.deltaY):(l=t.deltaX/(n/120),a=t.deltaY/(n/120))}if(_-this.stamp<20&&(this.times+=.05,this.times>3&&(this.times=3)),l*=this.times,a*=this.times,"x"!==this.props.axis&&(this.__BOX__.scrollTop+=a,e)){var p=this.__BOX__.scrollTop/(s-i)*(i-e);if((0===(p>>=0)||i-e===p)&&p===this.props.thumbY)return;t.preventDefault(),t.stopPropagation(),this.props.thumbY=p,this.__Y__.style.transform=`translateY(${p}px)`}if("y"!==this.props.axis&&(this.__BOX__.scrollLeft+=l,r)){var d=this.__BOX__.scrollLeft/(o-h)*(h-r);if((0===(d>>=0)||h-r===d)&&d===this.props.thumbX)return;t.preventDefault(),t.stopPropagation(),this.props.thumbX=d,this.__X__.style.transform=`translateX(${d}px)`}this.stamp=_,this.dispatchEvent(new CustomEvent("scroll",{detail:{x:this.props.thumbX,y:this.props.thumbY}}))}}});var t,s,i,e,o=o=>{var{thumbY:h,thumbX:r}=this.props;null!==t&&(i=this._fetchScrollX(r+o.pageX-t)),null!==s&&(e=this._fetchScrollY(h+o.pageY-s))},h=r=>{t=null,s=null,this.props.thumbX=i,this.props.thumbY=e,$.unbind(document,"mousemove",o),$.unbind(document,"mouseup",h)};$.bind(this.__Y__,"mousedown",t=>{s=t.pageY,this.props.thumbY||(this.props.thumbY=0),this.disabled||($.bind(document,"mousemove",o),$.bind(document,"mouseup",h))}),$.bind(this.__X__,"mousedown",s=>{t=s.pageX,this.props.thumbX||(this.props.thumbX=0),this.disabled||($.bind(document,"mousemove",o),$.bind(document,"mouseup",h))}),this.__observer=new MutationObserver(this._initFn),this.__observer.observe(this,{childList:!0,subtree:!0,characterData:!0})}disconnectedCallback(){this.__observer.disconnect(),$.unbind(this.__BOX__,"mouseenter",this._initFn),$.unbind(this.__BOX__,"wheel",this._wheelFn)}attributeChangedCallback(t,s,i){if(null!==i&&s!==i)switch(t){case"axis":this.props.axis=i;break;case"disabled":this[t]=!0}}}; + +if(!customElements.get('wc-scroll')){ + customElements.define('wc-scroll', Scroll) +} diff --git a/src/lib/socket.js b/src/lib/socket.js new file mode 100644 index 0000000..94d7918 --- /dev/null +++ b/src/lib/socket.js @@ -0,0 +1,25 @@ +/** + * 与主进程的通讯 + * @author yutent + * @date 2020/07/14 11:42:02 + */ + +const { ipcRenderer } = require('electron') +const EventEmitter = require('events') +const util = require('util') + +class Socket { + constructor() { + ipcRenderer.on('app', (ev, conn) => { + this.emit(conn.type, conn.data) + }) + } + + dispatch(type = '', data = {}) { + return ipcRenderer.sendSync('app', { data, type }) + } +} + +util.inherits(Socket, EventEmitter) + +export default new Socket() diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 0000000..752ccd5 --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1 @@ +function noop(){}export default{nextTick:function(){let t=[];let e=document.createTextNode("\x3c!-- --\x3e");new MutationObserver(function(){let e=t.length;for(let n=0;n{if(n)if(n.path){for(var i=n.path.concat();i.length>3;)if(i.shift()===t)return}else{var o=n.explicitOriginalTarget||n.target;if(t===o||t.contains(o)||t.root&&t.root.contains(o))return}e(n)})},clearOutside(t=noop){this.unbind(document,"mousedown",t)}}; \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..40fd494 --- /dev/null +++ b/src/main.js @@ -0,0 +1,153 @@ +/** + * + * @author yutent + * @date 2019/09/16 20:51:19 + */ + +const { + app, + BrowserWindow, + protocol, + ipcMain, + net, + Notification +} = require('electron') +const path = require('path') +const fs = require('iofs') + +const { createMainWindow, createFloatWindow } = require('./tools/window') +const createMenu = require('./tools/menu') +const createTay = require('./tools/tray') + +const MIME_TYPES = { + '.js': 'text/javascript', + '.html': 'text/html', + '.htm': 'text/plain', + '.css': 'text/css', + '.jpg': 'image/jpg', + '.png': 'image/png', + '.gif': 'image/gif', + '.svg': 'image/svg+xml', + '.ico': 'image/ico' +} + +const ROOT = __dirname + +var timer + +function fetch(url) { + return new Promise((y, n) => { + var conn = net.request(url) + var r = [] + + conn.on('response', res => { + res.on('data', c => { + r.push(c) + }) + + res.on('end', _ => { + y(Buffer.concat(r).toString()) + }) + }) + + conn.on('error', e => { + n(e) + }) + + conn.end() + }) +} + +function ring() { + var n = 5 + var t = setInterval(() => { + var notify = new Notification({ + title: '搞基⏰', + subtitle: '神奇的2点半到啦', + body: '神奇的2点半到啦, 该加仓的加仓, 该卖的卖啦' + }) + notify.show() + n-- + if (n === 0) { + clearInterval(t) + } + }, 1000) +} + +/* ----------------------------------------------------- */ +app.commandLine.appendSwitch('--lang', 'zh-CN') +app.commandLine.appendSwitch('--autoplay-policy', 'no-user-gesture-required') + +protocol.registerSchemesAsPrivileged([ + { scheme: 'app', privileges: { secure: true, standard: true } } +]) + +/* ----------------------------------------------------- */ + +app.dock.hide() + +// 初始化应用 +app.once('ready', () => { + // 注册协议 + protocol.registerBufferProtocol('app', (req, cb) => { + let file = req.url.replace(/^app:\/\/local\//, '') + let ext = path.extname(req.url) + let buff = fs.cat(path.resolve(ROOT, file)) + cb({ data: buff, mimeType: MIME_TYPES[ext] }) + }) + + // 创建浏览器窗口 + app.__main__ = createMainWindow(path.resolve(ROOT, './images/app.png')) + app.__float__ = createFloatWindow() + + createMenu(app.__main__) + createTay(app.__float__, app.__main__) + + app.__main__.on('closed', () => { + app.__main__ = null + app.__float__ = null + app.exit() + }) + + // mac专属事件,点击dock栏图标,可激活窗口 + // app.on('activate', _ => { + // if (app.__main__) { + // app.__main__.restore() + // } + // }) +}) + +ipcMain.on('app', (ev, conn) => { + switch (conn.type) { + case 'fetch': + fetch(conn.data).then(r => { + ev.returnValue = r + }) + break + + case 'notify': + clearTimeout(timer) + var t1 = Date.now() + var t2 = new Date() + t2.setHours(14) + t2.setMinutes(30) + t2.setSeconds(0) + + if (t2.getTime() - t1 > 0) { + timer = setTimeout(ring, t2.getTime() - t1) + } + + ev.returnValue = true + break + + case 'data-reload': + app.__main__.webContents.send('app', { type: 'data-reload', data: null }) + ev.returnValue = true + break + + case 'devtools': + app.__main__.openDevTools() + ev.returnValue = true + break + } +}) diff --git a/src/tools/menu.js b/src/tools/menu.js new file mode 100644 index 0000000..5f63419 --- /dev/null +++ b/src/tools/menu.js @@ -0,0 +1,36 @@ +/** + * 菜单项 + * @author yutent + * @date 2020/12/10 19:30:02 + */ + +const { Menu } = require('electron') + +module.exports = function(win) { + var menuList = Menu.buildFromTemplate([ + { + label: '搞基数据', + submenu: [ + { role: 'about', label: '关于搞基数据' }, + { type: 'separator' }, + { + label: '退出', + accelerator: 'Command+Q', + click(a, b, ev) { + win.destroy() + } + } + ] + }, + { + label: '编辑', + submenu: [ + { role: 'cut', label: '剪切' }, + { role: 'copy', label: '复制' }, + { role: 'paste', label: '粘贴' }, + { role: 'selectall', label: '全选' } + ] + } + ]) + Menu.setApplicationMenu(menuList) +} diff --git a/src/tools/tray.js b/src/tools/tray.js new file mode 100644 index 0000000..2cf498a --- /dev/null +++ b/src/tools/tray.js @@ -0,0 +1,42 @@ +/** + * 托盘 + * @author yutent + * @date 2020/12/10 19:30:20 + */ + +const { Tray, Menu } = require('electron') +const path = require('path') +const ROOT = __dirname + +module.exports = function(mini, main) { + var menuList = Menu.buildFromTemplate([ + { + label: '显示主窗口', + click(a, b, ev) { + main.restore() + } + }, + { + label: '不搞基了', + accelerator: 'Command+Q', + click(a, b, ev) { + main.destroy() + } + } + ]) + var tray = new Tray(path.join(ROOT, '../images/tray.png')) + + tray.on('click', _ => { + var b = tray.getBounds() + mini.setBounds({ x: b.x - 120, y: b.y + b.height }) + mini.show() + mini.focus() + mini.webContents.send('app', { type: 'float-visible', data: null }) + }) + + tray.on('right-click', _ => { + tray.popUpContextMenu(menuList) + }) + + main.__tray__ = tray +} diff --git a/src/tools/window.js b/src/tools/window.js new file mode 100644 index 0000000..db16d3c --- /dev/null +++ b/src/tools/window.js @@ -0,0 +1,76 @@ +/** + * + * @author yutent + * @date 2020/12/10 14:57:49 + */ + +const { BrowserWindow } = require('electron') + +/** + * 应用主窗口 + */ +exports.createMainWindow = function(icon) { + var win = new BrowserWindow({ + title: '搞基数据', + width: 1024, + height: 540, + frame: false, + titleBarStyle: 'hiddenInset', + resizable: false, + maximizable: false, + icon, + transparent: true, + vibrancy: 'hud', + visualEffectState: 'active', + webPreferences: { + // webSecurity: false, + experimentalFeatures: true, + nodeIntegration: true, + spellcheck: false + }, + show: false + }) + + win.loadURL('app://local/index.html') + + // win.on('ready-to-show', _ => { + // win.show() + // win.openDevTools() + // }) + + win.on('close', ev => { + ev.preventDefault() + win.hide() + }) + + return win +} + +// 创建悬浮窗口 +exports.createFloatWindow = function() { + var win = new BrowserWindow({ + width: 280, + height: 360, + resizable: false, + maximizable: false, + frame: false, + show: false, + vibrancy: 'hud', + visualEffectState: 'active', + webPreferences: { + experimentalFeatures: true, + nodeIntegration: true, + spellcheck: false + } + }) + + // win.openDevTools() + + win.on('blur', ev => { + win.hide() + }) + + win.loadURL('app://local/float.html') + + return win +} diff --git a/src/view.html b/src/view.html new file mode 100644 index 0000000..13184a1 --- /dev/null +++ b/src/view.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + +
    + +
    +
    +

    + +
    + +
    + + + +
    +
    +
    啥基都没有...
    +
    +
    + + + + \ No newline at end of file