mirror of
https://github.com/eugene-serb/wavelovers.git
synced 2023-09-09 23:41:16 +03:00
commit
7f6de5e894
@ -3,7 +3,10 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#4ECBD9" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#087E8B" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<link rel="canonical" href="https://wavelovers.ru/404" />
|
||||
<link rel="shortcut icon" type="image/x-icon" href="https://wavelovers.ru/img/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://wavelovers.ru/img/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://wavelovers.ru/img/favicon-32x32.png" />
|
||||
|
@ -6,6 +6,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
@ -71,7 +73,7 @@
|
||||
<header class="header">
|
||||
<div class="header-wrapper container">
|
||||
<div class="logo-wrapper">
|
||||
<span class="logo-wrapper__logo">Wavelovers</span>
|
||||
<span class="logo-wrapper__logo" translate="no">Wavelovers</span>
|
||||
</div>
|
||||
<nav class="menu-wrapper">
|
||||
<ul class="navigation">
|
||||
@ -139,7 +141,7 @@
|
||||
<span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a>
|
||||
</div>
|
||||
<div class="annotation created-by">
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a>
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -76,8 +76,8 @@
|
||||
--color-table-header-text: var(--color-white);
|
||||
--color-table-item: var(--color-c);
|
||||
/* Components colors */
|
||||
--color-header-background: var(--color-b);
|
||||
--color-header-borderline: var(--color-a);
|
||||
--color-header-background: var(--color-a);
|
||||
--color-header-borderline: var(--color-b);
|
||||
--color-header-selection: var(--color-b);
|
||||
--color-header-logo: var(--color-white);
|
||||
--color-header-navigation-link: var(--color-white);
|
||||
|
@ -6,6 +6,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
@ -71,7 +73,7 @@
|
||||
<header class="header">
|
||||
<div class="header-wrapper container">
|
||||
<div class="logo-wrapper">
|
||||
<span class="logo-wrapper__logo">Wavelovers</span>
|
||||
<span class="logo-wrapper__logo" translate="no">Wavelovers</span>
|
||||
</div>
|
||||
<nav class="menu-wrapper">
|
||||
<ul class="navigation">
|
||||
@ -139,7 +141,7 @@
|
||||
<span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a>
|
||||
</div>
|
||||
<div class="annotation created-by">
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a>
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!doctype html><html lang="en-us" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"><head><title>Wavelovers</title><meta charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="color-scheme" content="light dark"/><meta name="robots" content="all"/><link rel="canonical" href="https://wavelovers.ru/"/><link rel="stylesheet" href="https://wavelovers.ru/css/styles.css"/><link rel="shortcut icon" type="image/x-icon" href="https://wavelovers.ru/img/favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="https://wavelovers.ru/img/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="https://wavelovers.ru/img/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="https://wavelovers.ru/img/favicon-16x16.png"/><link rel="manifest" href="https://wavelovers.ru/site.webmanifest"/><meta name="author" content="Eugene Serb"/><meta name="copyright" content="Wavelovers, 2022"/><meta name="publisher-email" content="eugene.serb@gmail.com"/><meta name="publisher-url" content="https://eugene-serb.github.io/"/><meta name="keywords" content="Wavelovers, Wave Lovers, Wavemaster, Wave Master, Vibration Master, Vibration, Gamepad, Gamepad Vibration, Vibrate Gamepad, Phone Vibration, Gamepad Tester, Phone Vibration Tester, Vibration Tester, Massager, Vibrator, Satisfyer, Womanizer, Relax, геймпад, джойстик, вибратор, вибромассажер, вибро, вибромассажёр из геймпада, тестер вибрации геймпада, тестер вибрации телефона"/><meta name="description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta property="og:title" content="Wavelovers"/><meta property="og:site_name" content="Wavelovers"/><meta property="og:description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta property="og:url" content="https://wavelovers.ru/"/><meta property="og:image" content="https://wavelovers.ru/img/og.png"/><meta property="vk:image" content="https://wavelovers.ru/img/og.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:creator" content="@eugene_serb"/><meta name="twitter:title" content="Wavelovers"/><meta name="twitter:description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta name="twitter:image" content="https://wavelovers.ru/img/og.png"/><style>[v-cloak] {
|
||||
<!doctype html><html lang="en-us" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"><head><title>Wavelovers</title><meta charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396"/><meta name="color-scheme" content="light dark"/><meta name="robots" content="all"/><link rel="canonical" href="https://wavelovers.ru/"/><link rel="stylesheet" href="https://wavelovers.ru/css/styles.css"/><link rel="shortcut icon" type="image/x-icon" href="https://wavelovers.ru/img/favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="https://wavelovers.ru/img/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="https://wavelovers.ru/img/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="https://wavelovers.ru/img/favicon-16x16.png"/><link rel="manifest" href="https://wavelovers.ru/site.webmanifest"/><meta name="author" content="Eugene Serb"/><meta name="copyright" content="Wavelovers, 2022"/><meta name="publisher-email" content="eugene.serb@gmail.com"/><meta name="publisher-url" content="https://eugene-serb.github.io/"/><meta name="keywords" content="Wavelovers, Wave Lovers, Wavemaster, Wave Master, Vibration Master, Vibration, Gamepad, Gamepad Vibration, Vibrate Gamepad, Phone Vibration, Gamepad Tester, Phone Vibration Tester, Vibration Tester, Massager, Vibrator, Satisfyer, Womanizer, Relax, геймпад, джойстик, вибратор, вибромассажер, вибро, вибромассажёр из геймпада, тестер вибрации геймпада, тестер вибрации телефона"/><meta name="description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta property="og:title" content="Wavelovers"/><meta property="og:site_name" content="Wavelovers"/><meta property="og:description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta property="og:url" content="https://wavelovers.ru/"/><meta property="og:image" content="https://wavelovers.ru/img/og.png"/><meta property="vk:image" content="https://wavelovers.ru/img/og.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:creator" content="@eugene_serb"/><meta name="twitter:title" content="Wavelovers"/><meta name="twitter:description" content="Wavelovers. Use your device vibration correctly. Make a massager out of a gamepad."/><meta name="twitter:image" content="https://wavelovers.ru/img/og.png"/><style>[v-cloak] {
|
||||
display: none;
|
||||
}</style><script async src="https://www.googletagmanager.com/gtag/js?id=G-59FM5E4MVD"></script><script>window.dataLayer = window.dataLayer || [];
|
||||
function gtag() { dataLayer.push(arguments); }
|
||||
@ -15,4 +15,4 @@
|
||||
trackLinks: true,
|
||||
accurateTrackBounce: true,
|
||||
webvisor: true
|
||||
});</script><script defer="defer" src="/js/chunk-vendors.9c4f6371.js"></script><script defer="defer" src="/js/app.5de4fb60.js"></script><link href="/css/app.f87473b2.css" rel="stylesheet"></head><body><header class="header"><div class="header-wrapper container"><div class="logo-wrapper"><span class="logo-wrapper__logo">Wavelovers</span></div><nav class="menu-wrapper"><ul class="navigation"><li class="navigation__item"><a href="https://wavelovers.ru/" target="_self" class="navigation__link">Home</a></li><li class="navigation__item"><a href="https://wavelovers.ru/faq.html" target="_self" class="navigation__link">FAQ</a></li><li class="navigation__item"><a href="https://wavelovers.ru/about.html" target="_self" class="navigation__link">About</a></li><li class="navigation__item"><a href="https://wavelovers.ru/about.html#donate" target="_self" class="navigation__link">Donate</a></li></ul></nav></div></header><main class="page container"><h1 class="visually-hidden">Wavelovers</h1><div id="app" v-cloak></div></main><footer class="footer"><div class="footer-wrapper container"><div class="annotation"><span class="annotation__text">© 2022 Wavelovers. Content licensed under </span><a href="https://wavelovers.ru/LICENSE.md" target="_blank">GNU General Public License v3.0</a><br><span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a></div><div class="annotation created-by"><span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a></div></div></footer><noscript><div><img src="https://mc.yandex.ru/watch/89252711" style="position:absolute; left:-9999px;" alt=""/></div></noscript></body></html>
|
||||
});</script><script defer="defer" src="/js/chunk-vendors.9c4f6371.js"></script><script defer="defer" src="/js/app.17690bc6.js"></script><link href="/css/app.f87473b2.css" rel="stylesheet"></head><body><header class="header"><div class="header-wrapper container"><div class="logo-wrapper"><span class="logo-wrapper__logo" translate="no">Wavelovers</span></div><nav class="menu-wrapper"><ul class="navigation"><li class="navigation__item"><a href="https://wavelovers.ru/" target="_self" class="navigation__link">Home</a></li><li class="navigation__item"><a href="https://wavelovers.ru/faq.html" target="_self" class="navigation__link">FAQ</a></li><li class="navigation__item"><a href="https://wavelovers.ru/about.html" target="_self" class="navigation__link">About</a></li><li class="navigation__item"><a href="https://wavelovers.ru/about.html#donate" target="_self" class="navigation__link">Donate</a></li></ul></nav></div></header><main class="page container"><h1 class="visually-hidden">Wavelovers</h1><noscript>You need to enable JavaScript to run this app.</noscript><div id="app" v-cloak></div></main><footer class="footer"><div class="footer-wrapper container"><div class="annotation"><span class="annotation__text">© 2022 Wavelovers. Content licensed under </span><a href="https://wavelovers.ru/LICENSE.md" target="_blank">GNU General Public License v3.0</a><br><span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a></div><div class="annotation created-by"><span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a></div></div></footer><noscript><div><img src="https://mc.yandex.ru/watch/89252711" style="position:absolute; left:-9999px;" alt=""/></div></noscript></body></html>
|
2
docs/js/app.17690bc6.js
Normal file
2
docs/js/app.17690bc6.js
Normal file
File diff suppressed because one or more lines are too long
1
docs/js/app.17690bc6.js.map
Normal file
1
docs/js/app.17690bc6.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -3,18 +3,18 @@
|
||||
"short_name": "Wavelovers",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https://eugene-serb.github.io/wavelovers/img/android-chrome-192x192.png",
|
||||
"src": "https://wavelovers.ru/img/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "https://eugene-serb.github.io/wavelovers/img/android-chrome-512x512.png",
|
||||
"src": "https://wavelovers.ru/img/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#EFCFE3",
|
||||
"background_color": "#EFCFE3",
|
||||
"theme_color": "#EA9AB2",
|
||||
"background_color": "#EA9AB2",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
||||
|
@ -2,19 +2,19 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/about.html</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/faq.html</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<sitemap>
|
||||
<loc>https://wavelovers.ru/sitemap-internal.xml</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
</sitemap>
|
||||
</sitemapindex>
|
||||
|
||||
|
60
package-lock.json
generated
60
package-lock.json
generated
@ -2204,9 +2204,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.4.tgz",
|
||||
"integrity": "sha512-M0+G6V0Y4YV8cqzHssZpaNCqvYwlCiulmm0PwpNLF55r/+cT8Ol42CHRU1SEaYFH2rTwiiE1aYg/2g2rrtGdPA==",
|
||||
"version": "18.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.5.tgz",
|
||||
"integrity": "sha512-En7tneq+j0qAiVwysBD79y86MT3ModuoIJbe7JXp+sb5UAjInSShmK3nXXMioBzfF7rXC12hv12d4IyCVwN4dA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/normalize-package-data": {
|
||||
@ -4019,9 +4019,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001366",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001366.tgz",
|
||||
"integrity": "sha512-yy7XLWCubDobokgzudpkKux8e0UOOnLHE6mlNJBzT3lZJz6s5atSEzjoL+fsCPkI0G8MP5uVdDx1ur/fXEWkZA==",
|
||||
"version": "1.0.30001367",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz",
|
||||
"integrity": "sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@ -5166,9 +5166,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.4.189",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.189.tgz",
|
||||
"integrity": "sha512-dQ6Zn4ll2NofGtxPXaDfY2laIa6NyCQdqXYHdwH90GJQW0LpJJib0ZU/ERtbb0XkBEmUD2eJtagbOie3pdMiPg==",
|
||||
"version": "1.4.192",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.192.tgz",
|
||||
"integrity": "sha512-8nCXyIQY9An88NXAp+PuPy5h3/w5ZY7Iu2lag65Q0XREprcat5F8gKhoHsBUnQcFuCRnmevpR8yEBYRU3d2HDw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
@ -11489,9 +11489,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-dev-server/node_modules/ws": {
|
||||
"version": "8.8.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
|
||||
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
|
||||
"version": "8.8.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
|
||||
"integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
@ -11696,9 +11696,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "7.5.8",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz",
|
||||
"integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==",
|
||||
"version": "7.5.9",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8.3.0"
|
||||
@ -13478,9 +13478,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "18.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.4.tgz",
|
||||
"integrity": "sha512-M0+G6V0Y4YV8cqzHssZpaNCqvYwlCiulmm0PwpNLF55r/+cT8Ol42CHRU1SEaYFH2rTwiiE1aYg/2g2rrtGdPA==",
|
||||
"version": "18.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.5.tgz",
|
||||
"integrity": "sha512-En7tneq+j0qAiVwysBD79y86MT3ModuoIJbe7JXp+sb5UAjInSShmK3nXXMioBzfF7rXC12hv12d4IyCVwN4dA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/normalize-package-data": {
|
||||
@ -14856,9 +14856,9 @@
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001366",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001366.tgz",
|
||||
"integrity": "sha512-yy7XLWCubDobokgzudpkKux8e0UOOnLHE6mlNJBzT3lZJz6s5atSEzjoL+fsCPkI0G8MP5uVdDx1ur/fXEWkZA==",
|
||||
"version": "1.0.30001367",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz",
|
||||
"integrity": "sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw==",
|
||||
"dev": true
|
||||
},
|
||||
"case-sensitive-paths-webpack-plugin": {
|
||||
@ -15685,9 +15685,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.189",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.189.tgz",
|
||||
"integrity": "sha512-dQ6Zn4ll2NofGtxPXaDfY2laIa6NyCQdqXYHdwH90GJQW0LpJJib0ZU/ERtbb0XkBEmUD2eJtagbOie3pdMiPg==",
|
||||
"version": "1.4.192",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.192.tgz",
|
||||
"integrity": "sha512-8nCXyIQY9An88NXAp+PuPy5h3/w5ZY7Iu2lag65Q0XREprcat5F8gKhoHsBUnQcFuCRnmevpR8yEBYRU3d2HDw==",
|
||||
"dev": true
|
||||
},
|
||||
"emoji-regex": {
|
||||
@ -20397,9 +20397,9 @@
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.8.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
|
||||
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
|
||||
"version": "8.8.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
|
||||
"integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
}
|
||||
@ -20525,9 +20525,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.5.8",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz",
|
||||
"integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==",
|
||||
"version": "7.5.9",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
|
@ -3,7 +3,10 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#4ECBD9" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#087E8B" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<link rel="canonical" href="https://wavelovers.ru/404" />
|
||||
<link rel="shortcut icon" type="image/x-icon" href="https://wavelovers.ru/img/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://wavelovers.ru/img/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://wavelovers.ru/img/favicon-32x32.png" />
|
||||
|
@ -6,6 +6,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
@ -71,7 +73,7 @@
|
||||
<header class="header">
|
||||
<div class="header-wrapper container">
|
||||
<div class="logo-wrapper">
|
||||
<span class="logo-wrapper__logo">Wavelovers</span>
|
||||
<span class="logo-wrapper__logo" translate="no">Wavelovers</span>
|
||||
</div>
|
||||
<nav class="menu-wrapper">
|
||||
<ul class="navigation">
|
||||
@ -139,7 +141,7 @@
|
||||
<span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a>
|
||||
</div>
|
||||
<div class="annotation created-by">
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a>
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -76,8 +76,8 @@
|
||||
--color-table-header-text: var(--color-white);
|
||||
--color-table-item: var(--color-c);
|
||||
/* Components colors */
|
||||
--color-header-background: var(--color-b);
|
||||
--color-header-borderline: var(--color-a);
|
||||
--color-header-background: var(--color-a);
|
||||
--color-header-borderline: var(--color-b);
|
||||
--color-header-selection: var(--color-b);
|
||||
--color-header-logo: var(--color-white);
|
||||
--color-header-navigation-link: var(--color-white);
|
||||
|
@ -6,6 +6,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
@ -71,7 +73,7 @@
|
||||
<header class="header">
|
||||
<div class="header-wrapper container">
|
||||
<div class="logo-wrapper">
|
||||
<span class="logo-wrapper__logo">Wavelovers</span>
|
||||
<span class="logo-wrapper__logo" translate="no">Wavelovers</span>
|
||||
</div>
|
||||
<nav class="menu-wrapper">
|
||||
<ul class="navigation">
|
||||
@ -139,7 +141,7 @@
|
||||
<span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a>
|
||||
</div>
|
||||
<div class="annotation created-by">
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a>
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -6,6 +6,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#EA9AB2" />
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#E27396" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
@ -77,7 +79,7 @@
|
||||
<header class="header">
|
||||
<div class="header-wrapper container">
|
||||
<div class="logo-wrapper">
|
||||
<span class="logo-wrapper__logo">Wavelovers</span>
|
||||
<span class="logo-wrapper__logo" translate="no">Wavelovers</span>
|
||||
</div>
|
||||
<nav class="menu-wrapper">
|
||||
<ul class="navigation">
|
||||
@ -100,6 +102,7 @@
|
||||
|
||||
<main class="page container">
|
||||
<h1 class="visually-hidden">Wavelovers</h1>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="app" v-cloak></div>
|
||||
</main>
|
||||
|
||||
@ -110,7 +113,7 @@
|
||||
<span class="annotation__text">This site is open source. </span><a href="https://github.com/eugene-serb/wavelovers/" target="_blank">Improve this page.</a>
|
||||
</div>
|
||||
<div class="annotation created-by">
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank">Eugene Serb</a>
|
||||
<span class="annotation__text">Created by</span><a href="https://eugene-serb.github.io/" target="_blank" translate="no">Eugene Serb</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -3,18 +3,18 @@
|
||||
"short_name": "Wavelovers",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https://eugene-serb.github.io/wavelovers/img/android-chrome-192x192.png",
|
||||
"src": "https://wavelovers.ru/img/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "https://eugene-serb.github.io/wavelovers/img/android-chrome-512x512.png",
|
||||
"src": "https://wavelovers.ru/img/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#EFCFE3",
|
||||
"background_color": "#EFCFE3",
|
||||
"theme_color": "#EA9AB2",
|
||||
"background_color": "#EA9AB2",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
||||
|
@ -2,19 +2,19 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/about.html</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://wavelovers.ru/faq.html</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<sitemap>
|
||||
<loc>https://wavelovers.ru/sitemap-internal.xml</loc>
|
||||
<lastmod>2022-07-14</lastmod>
|
||||
<lastmod>2022-07-17</lastmod>
|
||||
</sitemap>
|
||||
</sitemapindex>
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
},
|
||||
methods: {
|
||||
change(index: number): void {
|
||||
this.$emit('change', index);
|
||||
this.$emit('change', index as number);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -32,7 +32,7 @@
|
||||
},
|
||||
methods: {
|
||||
change(index: number): void {
|
||||
this.$emit('change', index);
|
||||
this.$emit('change', index as number);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
2
src/components/Vibrator.d.ts
vendored
2
src/components/Vibrator.d.ts
vendored
@ -1 +1 @@
|
||||
declare module 'Vibrator'
|
||||
declare module 'Vibrator';
|
@ -1,17 +1,21 @@
|
||||
interface IPatternUnit {
|
||||
export type TPattern = {
|
||||
pattern: TPatternUnit[];
|
||||
}
|
||||
|
||||
export type TPatternUnit = {
|
||||
startDelay: number,
|
||||
duration: number,
|
||||
weakMagnitude: number,
|
||||
strongMagnitude: number,
|
||||
}
|
||||
|
||||
interface IVibrationActuator {
|
||||
export interface IVibrationActuator {
|
||||
type: string;
|
||||
reset(): void;
|
||||
playEffect(mode: string, pattern: IPatternUnit): void;
|
||||
playEffect(mode: string, pattern: TPatternUnit): void;
|
||||
}
|
||||
|
||||
interface IGamepad {
|
||||
export interface IGamepad {
|
||||
id: string;
|
||||
index: number;
|
||||
timestamp: number;
|
||||
@ -19,24 +23,24 @@ interface IGamepad {
|
||||
vibrationActuator: IVibrationActuator;
|
||||
}
|
||||
|
||||
interface IVibrator {
|
||||
export interface IVibrator {
|
||||
readonly id: number,
|
||||
readonly canVibrate: boolean;
|
||||
isVibrating: boolean;
|
||||
unit: IGamepad;
|
||||
pattern: IPatternUnit[];
|
||||
pattern: TPatternUnit[];
|
||||
update(): void;
|
||||
reset(): void;
|
||||
vibrate(pattern: IPatternUnit[]): void;
|
||||
vibrate(pattern: TPatternUnit[]): void;
|
||||
sleep(ms: number): Promise<number>;
|
||||
}
|
||||
|
||||
export default class Vibrator implements IVibrator {
|
||||
export class Vibrator implements IVibrator {
|
||||
readonly id: number;
|
||||
readonly canVibrate: boolean;
|
||||
isVibrating: boolean;
|
||||
unit: IGamepad;
|
||||
pattern: IPatternUnit[];
|
||||
pattern: TPatternUnit[];
|
||||
|
||||
constructor(unit: IGamepad) {
|
||||
this.unit = unit;
|
||||
@ -56,7 +60,7 @@ export default class Vibrator implements IVibrator {
|
||||
this.unit.vibrationActuator.reset();
|
||||
}
|
||||
|
||||
async vibrate(pattern: IPatternUnit[]) {
|
||||
async vibrate(pattern: TPatternUnit[]) {
|
||||
this.isVibrating = true;
|
||||
this.pattern = pattern;
|
||||
|
||||
@ -75,5 +79,4 @@ export default class Vibrator implements IVibrator {
|
||||
sleep(ms: number): Promise<number> {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -17,44 +17,12 @@
|
||||
import PatternList from '@/components/PatternList.vue';
|
||||
import GamepadList from '@/components/GamepadList.vue';
|
||||
import MessageItem from '@/components/MessageItem.vue';
|
||||
import Vibrator from '@/components/Vibrator';
|
||||
|
||||
interface IVibrationActuator {
|
||||
type: string;
|
||||
reset(): void;
|
||||
playEffect(mode: string, pattern: IPatternUnit): void;
|
||||
}
|
||||
|
||||
interface IGamepad {
|
||||
id: string;
|
||||
index: number;
|
||||
timestamp: number;
|
||||
connected: boolean;
|
||||
vibrationActuator: IVibrationActuator;
|
||||
}
|
||||
import { Vibrator, IGamepad, TPattern, TPatternUnit } from '@/components/Vibrator';
|
||||
|
||||
interface Event {
|
||||
gamepad: IGamepad | any;
|
||||
}
|
||||
|
||||
interface IPattern {
|
||||
pattern: IPatternUnit[];
|
||||
}
|
||||
|
||||
interface IPatternUnit {
|
||||
startDelay: number,
|
||||
duration: number,
|
||||
weakMagnitude: number,
|
||||
strongMagnitude: number,
|
||||
}
|
||||
|
||||
interface IVibrator {
|
||||
unit: IGamepad;
|
||||
update(): void;
|
||||
reset(): void;
|
||||
vibrate(pattern: IPatternUnit[]): void;
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
name: 'WaveloversApp',
|
||||
components: {
|
||||
@ -64,8 +32,8 @@
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
gamepads: [] as IVibrator[],
|
||||
patterns: [] as IPattern[],
|
||||
gamepads: [] as Vibrator[],
|
||||
patterns: [] as TPattern[],
|
||||
isActive: false,
|
||||
mode: 0,
|
||||
};
|
||||
@ -96,14 +64,14 @@
|
||||
this.gamepads.push(new Vibrator(event.gamepad));
|
||||
}
|
||||
},
|
||||
deleteGamepad(event: Event) {
|
||||
deleteGamepad(event: Event): void {
|
||||
this.gamepads.forEach((gamepad, index) => {
|
||||
if (gamepad.unit.id === event.gamepad.id) {
|
||||
this.gamepads.splice(index, 1);
|
||||
}
|
||||
});
|
||||
},
|
||||
change(index: number) {
|
||||
change(index: number): void {
|
||||
if (this.mode === index) {
|
||||
this.isActive = !this.isActive;
|
||||
this.reset();
|
||||
@ -116,12 +84,12 @@
|
||||
this.vibrate();
|
||||
}
|
||||
},
|
||||
vibrate() {
|
||||
vibrate(): void {
|
||||
this.gamepads.forEach(gamepad => {
|
||||
gamepad.vibrate(this.patterns[this.mode].pattern);
|
||||
gamepad.vibrate(this.patterns[this.mode].pattern as TPatternUnit[]);
|
||||
});
|
||||
},
|
||||
reset() {
|
||||
reset(): void {
|
||||
this.gamepads.forEach(gamepad => {
|
||||
gamepad.reset();
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user