[add] first
This commit is contained in:
commit
9bf7ed297a
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"recommendations": ["johnsoncodehk.volar"]
|
||||
}
|
16
README.md
Normal file
16
README.md
Normal file
@ -0,0 +1,16 @@
|
||||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar)
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates. However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can enable Volar's Take Over mode by following these steps:
|
||||
|
||||
1. Run `Extensions: Show Built-in Extensions` from VS Code's command palette, look for `TypeScript and JavaScript Language Features`, then right click and select `Disable (Workspace)`. By default, Take Over mode will enable itself if the default TypeScript extension is disabled.
|
||||
2. Reload the VS Code window by running `Developer: Reload Window` from the command palette.
|
||||
|
||||
You can learn more about Take Over mode [here](https://github.com/johnsoncodehk/volar/discussions/471).
|
106
index.html
Normal file
106
index.html
Normal file
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>LP Casino 測試</title>
|
||||
|
||||
<!-- SmartAppBanner -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="black">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" type="text/css" href="/banner/smart-app-banner.css">
|
||||
<link rel="apple-touch-icon" href="./src/assets/icon.png">
|
||||
<link rel="android-touch-icon" href="./src/assets/icon.png" />
|
||||
<link rel="windows-touch-icon" href="./src/assets/icon.png" />
|
||||
|
||||
<style type="text/css">
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript" src="./banner/smart-app-banner.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
|
||||
<!--没有应用下载应用-->
|
||||
<script>
|
||||
var u = navigator.userAgent;
|
||||
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
|
||||
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
|
||||
(function () {
|
||||
|
||||
OnLoad();
|
||||
|
||||
function OnLoad() {
|
||||
_clearAllCookie();
|
||||
_addMeta();
|
||||
}
|
||||
|
||||
function _clearAllCookie() {
|
||||
document.cookie.split(";").forEach(function (c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
|
||||
}
|
||||
|
||||
function _addMeta() {
|
||||
if (isiOS) {
|
||||
var headNode = document.getElementsByTagName("head")[0];
|
||||
var sbNode = document.createElement('meta');
|
||||
headNode.appendChild(sbNode);
|
||||
run('ios');
|
||||
} else if (isAndroid) {
|
||||
run('android');
|
||||
} else {
|
||||
run('windows');
|
||||
}
|
||||
}
|
||||
|
||||
banner = undefined;
|
||||
function run(force) {
|
||||
var n = document.querySelector('.smartbanner');
|
||||
if (n) {
|
||||
n.parentNode.removeChild(n);
|
||||
}
|
||||
new SmartBanner({
|
||||
title: '萊博娛樂城',
|
||||
author: '萊博娛樂城',
|
||||
button: '下載',
|
||||
scale: 'auto',
|
||||
url: {
|
||||
ios: 'https://line.me/R/app/1657864491-kA7gnVMp',
|
||||
android: 'https://line.me/R/app/1657864491-kA7gnVMp',
|
||||
windows: 'https://liff.line.me/1657864491-kA7gnVMp/'
|
||||
},
|
||||
force: force,
|
||||
daysHidden: 0,
|
||||
daysReminder: 0,
|
||||
layer: false,
|
||||
hideOnInstall: false,
|
||||
iOSUniversalApp: true,
|
||||
store: {
|
||||
ios: 'In Line Play',
|
||||
android: 'In Line Play',
|
||||
windows: 'In Line Web'
|
||||
},
|
||||
price: {
|
||||
ios: 'FREE',
|
||||
android: 'FREE',
|
||||
windows: 'FREE'
|
||||
}
|
||||
});
|
||||
};
|
||||
})()
|
||||
</script>
|
||||
|
||||
</html>
|
19345
package-lock.json
generated
Normal file
19345
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
28
package.json
Normal file
28
package.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "lp-casino-deeplink",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"start": "npm run dev",
|
||||
"dev": "vite --host",
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vite build",
|
||||
"build1": "vue-tsc --noEmit && vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vue/cli": "^5.0.4",
|
||||
"@vue/compiler-sfc": "^3.2.32",
|
||||
"bootstrap": "^5.1.3",
|
||||
"element-plus": "^2.1.9",
|
||||
"moment": "^2.29.2",
|
||||
"vue": "^3.2.25"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^2.3.1",
|
||||
"typescript": "^4.5.4",
|
||||
"vite": "^4.0.0",
|
||||
"vue-tsc": "^0.29.8"
|
||||
},
|
||||
"@vue/compiler-sfc": "file: node_modules/@vue/compiler-sfc"
|
||||
}
|
292
public/banner/smart-app-banner.css
Normal file
292
public/banner/smart-app-banner.css
Normal file
@ -0,0 +1,292 @@
|
||||
.smartbanner-show {
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.smartbanner-show .smartbanner {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/** Default **/
|
||||
.smartbanner {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
line-height: 80px;
|
||||
font-family: 'Helvetica Neue', sans-serif;
|
||||
background: #f4f4f4;
|
||||
z-index: 9998;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
overflow: hidden;
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
|
||||
.smartbanner-container {
|
||||
margin: 0 auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.smartbanner-close {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: 0 5px 0 5px;
|
||||
font-family: 'ArialRoundedMTBold', Arial;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
color: #888;
|
||||
text-decoration: none;
|
||||
border: 0;
|
||||
border-radius: 14px;
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
}
|
||||
|
||||
.smartbanner-close:active,
|
||||
.smartbanner-close:hover {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.smartbanner-icon {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 57px;
|
||||
height: 57px;
|
||||
margin-right: 12px;
|
||||
background-size: cover;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.smartbanner-info {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 44%;
|
||||
font-size: 11px;
|
||||
line-height: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.smartbanner-title {
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.smartbanner-button {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto 0;
|
||||
height: 24px;
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
color: #6a6a6a;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.smartbanner-button:active,
|
||||
.smartbanner-button:hover {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.smartbanner-button-text {
|
||||
}
|
||||
|
||||
.smartbanner-button-text:active,
|
||||
.smartbanner-button-text:hover {
|
||||
}
|
||||
|
||||
/** iOS **/
|
||||
.smartbanner-ios {
|
||||
background: #f4f4f4;
|
||||
background: linear-gradient(to bottom, #f4f4f4, #cdcdcd);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
||||
line-height: 80px;
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-close {
|
||||
border: 0;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
color: #888;
|
||||
text-shadow: 0 1px 0 white;
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-close:active,
|
||||
.smartbanner-ios .smartbanner-close:hover {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-icon {
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
background-size: cover;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-info {
|
||||
color: #6a6a6a;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-title {
|
||||
color: #4d4d4d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-button {
|
||||
padding: 0 10px;
|
||||
min-width: 10%;
|
||||
color: #6a6a6a;
|
||||
background: #efefef;
|
||||
background: linear-gradient(to bottom, #efefef, #dcdcdc);
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px #bfbfbf, 0 1px 0 rgba(255, 255, 255, 0.6), 0 2px 0 rgba(255, 255, 255, 0.7) inset;
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-button:active,
|
||||
.smartbanner-ios .smartbanner-button:hover {
|
||||
background: #dcdcdc;
|
||||
background: linear-gradient(to bottom, #dcdcdc, #efefef);
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-button-text {
|
||||
}
|
||||
|
||||
.smartbanner-ios .smartbanner-button-text:active,
|
||||
.smartbanner-ios .smartbanner-button-text:hover {
|
||||
}
|
||||
|
||||
/** Android **/
|
||||
.smartbanner-android {
|
||||
background: #3d3d3d url(data:image/gif;base64,R0lGODlhCAAIAIABAFVVVf///yH5BAEHAAEALAAAAAAIAAgAAAINRG4XudroGJBRsYcxKAA7);
|
||||
box-shadow: inset 0 4px 0 #88b131;
|
||||
line-height: 82px;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-close {
|
||||
border: 0;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
line-height: 17px;
|
||||
margin-right: 7px;
|
||||
color: #b1b1b3;
|
||||
background: #1c1e21;
|
||||
text-shadow: 0 1px 1px #000;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.8) inset, 0 1px 1px rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-close:active,
|
||||
.smartbanner-android .smartbanner-close:hover {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-icon {
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-info {
|
||||
color: #ccc;
|
||||
text-shadow: 0 1px 2px #000;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-title {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-button {
|
||||
min-width: 12%;
|
||||
color: #d1d1d1;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border-radius: 0;
|
||||
box-shadow: 0 0 0 1px #333, 0 0 0 2px #dddcdc;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-button:active,
|
||||
.smartbanner-android .smartbanner-button:hover {
|
||||
background: none;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-button-text {
|
||||
text-align: center;
|
||||
display: block;
|
||||
padding: 0 10px;
|
||||
background: #42b6c9;
|
||||
background: linear-gradient(to bottom, #42b6c9, #39a9bb);
|
||||
text-transform: none;
|
||||
text-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.smartbanner-android .smartbanner-button-text:active,
|
||||
.smartbanner-android .smartbanner-button-text:hover {
|
||||
background: #2ac7e1;
|
||||
}
|
||||
|
||||
/** Windows **/
|
||||
.smartbanner-windows {
|
||||
background: #f4f4f4;
|
||||
background: linear-gradient(to bottom, #f4f4f4, #cdcdcd);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
||||
line-height: 80px;
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-close {
|
||||
border: 0;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
color: #888;
|
||||
text-shadow: 0 1px 0 white;
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-close:active,
|
||||
.smartbanner-windows .smartbanner-close:hover {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-icon {
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
background-size: cover;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-info {
|
||||
color: #6a6a6a;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-title {
|
||||
color: #4d4d4d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-button {
|
||||
padding: 0 10px;
|
||||
min-width: 10%;
|
||||
color: #6a6a6a;
|
||||
background: #efefef;
|
||||
background: linear-gradient(to bottom, #efefef, #dcdcdc);
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px #bfbfbf, 0 1px 0 rgba(255, 255, 255, 0.6), 0 2px 0 rgba(255, 255, 255, 0.7) inset;
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-button:active,
|
||||
.smartbanner-windows .smartbanner-button:hover {
|
||||
background: #dcdcdc;
|
||||
background: linear-gradient(to bottom, #dcdcdc, #efefef);
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-button-text {
|
||||
}
|
||||
|
||||
.smartbanner-windows .smartbanner-button-text:active,
|
||||
.smartbanner-windows .smartbanner-button-text:hover {
|
||||
}
|
123
public/banner/smart-app-banner.js
Normal file
123
public/banner/smart-app-banner.js
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
UAParser.js v0.7.18
|
||||
Lightweight JavaScript-based User-Agent string parser
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
|
||||
Copyright ? 2012-2016 Faisal Salman <fyzlman@gmail.com>
|
||||
Dual licensed under GPLv2 or MIT
|
||||
*/
|
||||
var $jscomp = $jscomp || {}; $jscomp.scope = {}; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; $jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function (a, d, b) { a != Array.prototype && a != Object.prototype && (a[d] = b.value) }; $jscomp.getGlobal = function (a) { return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a }; $jscomp.global = $jscomp.getGlobal(this);
|
||||
$jscomp.polyfill = function (a, d, b, e) { if (d) { b = $jscomp.global; a = a.split("."); for (e = 0; e < a.length - 1; e++) { var c = a[e]; c in b || (b[c] = {}); b = b[c] } a = a[a.length - 1]; e = b[a]; d = d(e); d != e && null != d && $jscomp.defineProperty(b, a, { configurable: !0, writable: !0, value: d }) } }; $jscomp.polyfill("Object.getOwnPropertySymbols", function (a) { return a ? a : function () { return [] } }, "es6", "es5"); $jscomp.SYMBOL_PREFIX = "jscomp_symbol_";
|
||||
$jscomp.initSymbol = function () { $jscomp.initSymbol = function () { }; $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol) }; $jscomp.Symbol = function () { var a = 0; return function (d) { return $jscomp.SYMBOL_PREFIX + (d || "") + a++ } }();
|
||||
$jscomp.initSymbolIterator = function () { $jscomp.initSymbol(); var a = $jscomp.global.Symbol.iterator; a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); "function" != typeof Array.prototype[a] && $jscomp.defineProperty(Array.prototype, a, { configurable: !0, writable: !0, value: function () { return $jscomp.arrayIterator(this) } }); $jscomp.initSymbolIterator = function () { } }; $jscomp.arrayIterator = function (a) { var d = 0; return $jscomp.iteratorPrototype(function () { return d < a.length ? { done: !1, value: a[d++] } : { done: !0 } }) };
|
||||
$jscomp.iteratorPrototype = function (a) { $jscomp.initSymbolIterator(); a = { next: a }; a[$jscomp.global.Symbol.iterator] = function () { return this }; return a }; $jscomp.iteratorFromArray = function (a, d) { $jscomp.initSymbolIterator(); a instanceof String && (a += ""); var b = 0, e = { next: function () { if (b < a.length) { var c = b++; return { value: d(c, a[c]), done: !1 } } e.next = function () { return { done: !0, value: void 0 } }; return e.next() } }; e[Symbol.iterator] = function () { return e }; return e };
|
||||
$jscomp.polyfill("Array.prototype.keys", function (a) { return a ? a : function () { return $jscomp.iteratorFromArray(this, function (a) { return a }) } }, "es6", "es3"); $jscomp.owns = function (a, d) { return Object.prototype.hasOwnProperty.call(a, d) }; $jscomp.assign = "function" == typeof Object.assign ? Object.assign : function (a, d) { for (var b = 1; b < arguments.length; b++) { var e = arguments[b]; if (e) for (var c in e) $jscomp.owns(e, c) && (a[c] = e[c]) } return a }; $jscomp.polyfill("Object.assign", function (a) { return a || $jscomp.assign }, "es6", "es3");
|
||||
(function (a) { "object" === typeof exports && "undefined" !== typeof module ? module.exports = a() : "function" === typeof define && define.amd ? define([], a) : ("undefined" !== typeof window ? window : "undefined" !== typeof global ? global : "undefined" !== typeof self ? self : this).SmartBanner = a() })(function () {
|
||||
return function () {
|
||||
function a(d, b, e) {
|
||||
function c(f, k) {
|
||||
if (!b[f]) {
|
||||
if (!d[f]) {
|
||||
var r = "function" == typeof require && require; if (!k && r) return r(f, !0); if (m) return m(f, !0); k = Error("Cannot find module '" + f + "'"); throw k.code = "MODULE_NOT_FOUND",
|
||||
k;
|
||||
} k = b[f] = { exports: {} }; d[f][0].call(k.exports, function (a) { return c(d[f][1][a] || a) }, k, k.exports, a, d, b, e)
|
||||
} return b[f].exports
|
||||
} for (var m = "function" == typeof require && require, f = 0; f < e.length; f++)c(e[f]); return c
|
||||
} return a
|
||||
}()({
|
||||
1: [function (a, d, b) {
|
||||
var e = a("object-assign"), c = a("component-query"), m = a("get-doc"), f = a("cookie-cutter"), n = a("ua-parser-js"), k = (navigator.language || navigator.userLanguage || navigator.browserLanguage).slice(-2) || "us", r = m && m.documentElement, g = {
|
||||
ios: {
|
||||
appMeta: "apple-itunes-app", iconRels: ["apple-touch-icon-precomposed",
|
||||
"apple-touch-icon"], getStoreLink: function () { return "https://itunes.apple.com/" + this.options.appStoreLanguage + "/app/id" + this.appId + "?mt=8" }
|
||||
}, android: { appMeta: "google-play-app", iconRels: ["android-touch-icon", "apple-touch-icon-precomposed", "apple-touch-icon"], getStoreLink: function () { return "http://play.google.com/store/apps/details?id=" + this.appId } }, windows: {
|
||||
appMeta: "msApplication-ID", iconRels: ["windows-touch-icon", "apple-touch-icon-precomposed", "apple-touch-icon"], getStoreLink: function () {
|
||||
return "http://www.windowsphone.com/s?appid=" +
|
||||
this.appId
|
||||
}
|
||||
}
|
||||
}; a = function (a) {
|
||||
var c = n(navigator.userAgent); this.options = e({}, { daysHidden: 15, daysReminder: 90, appStoreLanguage: k, button: "OPEN", store: { ios: "On the App Store", android: "In Google Play", windows: "In the Windows Store" }, price: { ios: "FREE", android: "FREE", windows: "FREE" }, theme: "", icon: "", force: "" }, a || {}); this.options.force ? this.type = this.options.force : "Windows Phone" === c.os.name || "Windows Mobile" === c.os.name ? this.type = "windows" : "iOS" === c.os.name ? this.type = "ios" : "Android" === c.os.name && (this.type =
|
||||
"android"); if (this.type && this.options.store[this.type]) { this.appMeta = g[this.type].appMeta; this.parseAppId(); a = "ios" === this.type && "Mobile Safari" === c.browser.name && 6 <= parseInt(c.os.version, 10); var l = navigator.standalone, b = f.get(this.appId + "-smartbanner-closed"), d = f.get(this.appId + "-smartbanner-installed"); a || l || b || d || (e(this, g[this.type]), !this.appId && "IOS" === c.os.name && "Safari" === c.browser.name) || (this.create(), this.show()) }
|
||||
}; a.prototype = {
|
||||
constructor: a, create: function () {
|
||||
var a = this.options.url[this.type] ?? this.getStoreLink(),
|
||||
e = this.options.price[this.type] + " - " + this.options.store[this.type]; if (this.options.icon) var f = this.options.icon; else for (var b = 0; b < this.iconRels.length; b++) { var d = c('link[rel="' + this.iconRels[b] + '"]'); if (d) { f = d.getAttribute("href"); break } } var t = m.createElement("div"); t.className = "smartbanner smartbanner-" + (this.options.theme || this.type); t.innerHTML = '<div class="smartbanner-container"><a href="javascript:void(0);" class="smartbanner-close">×</a><span class="smartbanner-icon" style="background-image: url(' +
|
||||
f + ')"></span><div class="smartbanner-info"><div class="smartbanner-title">' + this.options.title + "</div><div>" + this.options.author + "</div><span>" + e + '</span></div><a href="' + a + '" class="smartbanner-button"><span class="smartbanner-button-text">' + this.options.button + "</span></a></div>"; m.body ? m.body.appendChild(t) : m && m.addEventListener("DOMContentLoaded", function () { m.body.appendChild(t) }); c(".smartbanner-button", t).addEventListener("click", this.install.bind(this), !1); c(".smartbanner-close", t).addEventListener("click",
|
||||
this.close.bind(this), !1)
|
||||
}, hide: function () { r.classList.remove("smartbanner-show"); if ("function" === typeof this.options.close) return this.options.close() }, show: function () { r.classList.add("smartbanner-show"); if ("function" === typeof this.options.show) return this.options.show() }, close: function () { this.hide(); f.set(this.appId + "-smartbanner-closed", "true", { path: "/", expires: new Date(Number(new Date) + 864E5 * this.options.daysHidden) }); if ("function" === typeof this.options.close) return this.options.close() }, install: function () {
|
||||
this.hide();
|
||||
f.set(this.appId + "-smartbanner-installed", "true", { path: "/", expires: new Date(Number(new Date) + 864E5 * this.options.daysReminder) }); if ("function" === typeof this.options.close) return this.options.close()
|
||||
}, parseAppId: function () { var a = c('meta[name="' + this.appMeta + '"]'); if (a) return this.appId = "windows" === this.type ? a.getAttribute("content") : /app-id=([^\s,]+)/.exec(a.getAttribute("content"))[1] }
|
||||
}; d.exports = a
|
||||
}, { "component-query": 2, "cookie-cutter": 3, "get-doc": 4, "object-assign": 6, "ua-parser-js": 7 }], 2: [function (a,
|
||||
d, b) { function e(a, e) { return e.querySelector(a) } b = d.exports = function (a, b) { b = b || document; return e(a, b) }; b.all = function (a, e) { e = e || document; return e.querySelectorAll(a) }; b.engine = function (a) { if (!a.one) throw Error(".one callback required"); if (!a.all) throw Error(".all callback required"); e = a.one; b.all = a.all; return b } }, {}], 3: [function (a, d, b) {
|
||||
b = d.exports = function (a) {
|
||||
a || (a = {}); "string" === typeof a && (a = { cookie: a }); void 0 === a.cookie && (a.cookie = ""); return {
|
||||
get: function (c) {
|
||||
for (var b = a.cookie.split(/;\s*/), f = 0; f <
|
||||
b.length; f++) { var e = b[f].split("="); if (unescape(e[0]) === c) return unescape(e[1]) }
|
||||
}, set: function (c, b, f) { f || (f = {}); c = escape(c) + "=" + escape(b); f.expires && (c += "; expires=" + f.expires); f.path && (c += "; path=" + escape(f.path)); f.domain && (c += "; domain=" + escape(f.domain)); f.secure && (c += "; secure"); return a.cookie = c }
|
||||
}
|
||||
}; "undefined" !== typeof document && (a = b(document), b.get = a.get, b.set = a.set)
|
||||
}, {}], 4: [function (a, d, b) { a = a("has-dom"); d.exports = a() ? document : null }, { "has-dom": 5 }], 5: [function (a, d, b) {
|
||||
d.exports = function () {
|
||||
return "undefined" !==
|
||||
typeof window && "undefined" !== typeof document && "function" === typeof document.createElement
|
||||
}
|
||||
}, {}], 6: [function (a, d, b) {
|
||||
var e = Object.getOwnPropertySymbols, c = Object.prototype.hasOwnProperty, m = Object.prototype.propertyIsEnumerable; d.exports = function () {
|
||||
try {
|
||||
if (!Object.assign) return !1; var a = new String("abc"); a[5] = "de"; if ("5" === Object.getOwnPropertyNames(a)[0]) return !1; var c = {}; for (a = 0; 10 > a; a++)c["_" + String.fromCharCode(a)] = a; if ("0123456789" !== Object.getOwnPropertyNames(c).map(function (a) { return c[a] }).join("")) return !1;
|
||||
var b = {}; "abcdefghijklmnopqrst".split("").forEach(function (a) { b[a] = a }); return "abcdefghijklmnopqrst" !== Object.keys(Object.assign({}, b)).join("") ? !1 : !0
|
||||
} catch (r) { return !1 }
|
||||
}() ? Object.assign : function (a, b) { if (null === a || void 0 === a) throw new TypeError("Object.assign cannot be called with null or undefined"); var d = Object(a); for (var f, g = 1; g < arguments.length; g++) { var p = Object(arguments[g]); for (var n in p) c.call(p, n) && (d[n] = p[n]); if (e) { f = e(p); for (var l = 0; l < f.length; l++)m.call(p, f[l]) && (d[f[l]] = p[f[l]]) } } return d }
|
||||
},
|
||||
{}], 7: [function (a, d, b) {
|
||||
(function (a, c) {
|
||||
var e = { extend: function (a, c) { var b = {}, e; for (e in a) b[e] = c[e] && 0 === c[e].length % 2 ? c[e].concat(a[e]) : a[e]; return b }, has: function (a, c) { return "string" === typeof a ? -1 !== c.toLowerCase().indexOf(a.toLowerCase()) : !1 }, lowerize: function (a) { return a.toLowerCase() }, major: function (a) { return "string" === typeof a ? a.replace(/[^\d\.]/g, "").split(".")[0] : c }, trim: function (a) { return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") } }, f = function (a, b) {
|
||||
for (var e = 0, d, f, l, h, g, q; e < b.length &&
|
||||
!g;) { var k = b[e], m = b[e + 1]; for (d = f = 0; d < k.length && !g;)if (g = k[d++].exec(a)) for (l = 0; l < m.length; l++)q = g[++f], h = m[l], "object" === typeof h && 0 < h.length ? 2 == h.length ? this[h[0]] = "function" == typeof h[1] ? h[1].call(this, q) : h[1] : 3 == h.length ? this[h[0]] = "function" !== typeof h[1] || h[1].exec && h[1].test ? q ? q.replace(h[1], h[2]) : c : q ? h[1].call(this, q, h[2]) : c : 4 == h.length && (this[h[0]] = q ? h[3].call(this, q.replace(h[1], h[2])) : c) : this[h] = q ? q : c; e += 2 }
|
||||
}, n = function (a, b) {
|
||||
for (var d in b) if ("object" === typeof b[d] && 0 < b[d].length) for (var f =
|
||||
0; f < b[d].length; f++) { if (e.has(b[d][f], a)) return "?" === d ? c : d } else if (e.has(b[d], a)) return "?" === d ? c : d; return a
|
||||
}, k = { ME: "4.90", "NT 3.11": "NT3.51", "NT 4.0": "NT4.0", 2E3: "NT 5.0", XP: ["NT 5.1", "NT 5.2"], Vista: "NT 6.0", 7: "NT 6.1", 8: "NT 6.2", "8.1": "NT 6.3", 10: ["NT 6.4", "NT 10.0"], RT: "ARM" }, r = {
|
||||
browser: [[/(opera\smini)\/([\w\.-]+)/i, /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, /(opera).+version\/([\w\.]+)/i, /(opera)[\/\s]+([\w\.]+)/i], ["name", "version"], [/(opios)[\/\s]+([\w\.]+)/i], [["name", "Opera Mini"], "version"],
|
||||
[/\s(opr)\/([\w\.]+)/i], [["name", "Opera"], "version"], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i, /(?:ms|\()(ie)\s([\w\.]+)/i, /(rekonq)\/([\w\.]*)/i, /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark)\/([\w\.-]+)/i], ["name", "version"], [/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i], [["name", "IE"], "version"], [/(edge|edgios|edgea)\/((\d+)?[\w\.]+)/i],
|
||||
[["name", "Edge"], "version"], [/(yabrowser)\/([\w\.]+)/i], [["name", "Yandex"], "version"], [/(puffin)\/([\w\.]+)/i], [["name", "Puffin"], "version"], [/((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i], [["name", "UCBrowser"], "version"], [/(comodo_dragon)\/([\w\.]+)/i], [["name", /_/g, " "], "version"], [/(micromessenger)\/([\w\.]+)/i], [["name", "WeChat"], "version"], [/(qqbrowserlite)\/([\w\.]+)/i], ["name", "version"], [/(QQ)\/([\d\.]+)/i], ["name", "version"], [/m?(qqbrowser)[\/\s]?([\w\.]+)/i], ["name", "version"],
|
||||
[/(BIDUBrowser)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(2345Explorer)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(MetaSr)[\/\s]?([\w\.]+)/i], ["name"], [/(LBBROWSER)/i], ["name"], [/xiaomi\/miuibrowser\/([\w\.]+)/i], ["version", ["name", "MIUI Browser"]], [/;fbav\/([\w\.]+);/i], ["version", ["name", "Facebook"]], [/headlesschrome(?:\/([\w\.]+)|\s)/i], ["version", ["name", "Chrome Headless"]], [/\swv\).+(chrome)\/([\w\.]+)/i], [["name", /(.+)/, "$1 WebView"], "version"], [/((?:oculus|samsung)browser)\/([\w\.]+)/i], [["name",
|
||||
/(.+(?:g|us))(.+)/, "$1 $2"], "version"], [/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i], ["version", ["name", "Android Browser"]], [/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i], ["name", "version"], [/(dolfin)\/([\w\.]+)/i], [["name", "Dolphin"], "version"], [/((?:android.+)crmo|crios)\/([\w\.]+)/i], [["name", "Chrome"], "version"], [/(coast)\/([\w\.]+)/i], [["name", "Opera Coast"], "version"], [/fxios\/([\w\.-]+)/i], ["version", ["name", "Firefox"]], [/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],
|
||||
["version", ["name", "Mobile Safari"]], [/version\/([\w\.]+).+?(mobile\s?safari|safari)/i], ["version", "name"], [/webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i], [["name", "GSA"], "version"], [/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i], ["name", ["version", n, { "1.0": "/8", "1.2": "/1", "1.3": "/3", "2.0": "/412", "2.0.2": "/416", "2.0.3": "/417", "2.0.4": "/419", "?": "/" }]], [/(konqueror)\/([\w\.]+)/i, /(webkit|khtml)\/([\w\.]+)/i], ["name", "version"], [/(navigator|netscape)\/([\w\.-]+)/i], [["name", "Netscape"],
|
||||
"version"], [/(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i, /(mozilla)\/([\w\.]+).+rv:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i, /(links)\s\(([\w\.]+)/i, /(gobrowser)\/?([\w\.]*)/i, /(ice\s?browser)\/v?([\w\._]+)/i, /(mosaic)[\/\s]([\w\.]+)/i], ["name", "version"]], cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],
|
||||
[["architecture", "amd64"]], [/(ia32(?=;))/i], [["architecture", e.lowerize]], [/((?:i[346]|x)86)[;\)]/i], [["architecture", "ia32"]], [/windows\s(ce|mobile);\sppc;/i], [["architecture", "arm"]], [/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i], [["architecture", /ower/, "", e.lowerize]], [/(sun4\w)[;\)]/i], [["architecture", "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i], [["architecture", e.lowerize]]], device: [[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],
|
||||
["model", "vendor", ["type", "tablet"]], [/applecoremedia\/[\w\.]+ \((ipad)/], ["model", ["vendor", "Apple"], ["type", "tablet"]], [/(apple\s{0,1}tv)/i], [["model", "Apple TV"], ["vendor", "Apple"]], [/(archos)\s(gamepad2?)/i, /(hp).+(touchpad)/i, /(hp).+(tablet)/i, /(kindle)\/([\w\.]+)/i, /\s(nook)[\w\s]+build\/(\w+)/i, /(dell)\s(strea[kpr\s\d]*[\dko])/i], ["vendor", "model", ["type", "tablet"]], [/(kf[A-z]+)\sbuild\/.+silk\//i], ["model", ["vendor", "Amazon"], ["type", "tablet"]], [/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i],
|
||||
[["model", n, { "Fire Phone": ["SD", "KF"] }], ["vendor", "Amazon"], ["type", "mobile"]], [/\((ip[honed|\s\w*]+);.+(apple)/i], ["model", "vendor", ["type", "mobile"]], [/\((ip[honed|\s\w*]+);/i], ["model", ["vendor", "Apple"], ["type", "mobile"]], [/(blackberry)[\s-]?(\w+)/i, /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i, /(hp)\s([\w\s]+\w)/i, /(asus)-?(\w+)/i], ["vendor", "model", ["type", "mobile"]], [/\(bb10;\s(\w+)/i], ["model", ["vendor", "BlackBerry"], ["type", "mobile"]],
|
||||
[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i], ["model", ["vendor", "Asus"], ["type", "tablet"]], [/(sony)\s(tablet\s[ps])\sbuild\//i, /(sony)?(?:sgp.+)\sbuild\//i], [["vendor", "Sony"], ["model", "Xperia Tablet"], ["type", "tablet"]], [/android.+\s([c-g]\d{4}|so[-l]\w+)\sbuild\//i], ["model", ["vendor", "Sony"], ["type", "mobile"]], [/\s(ouya)\s/i, /(nintendo)\s([wids3u]+)/i], ["vendor", "model", ["type", "console"]], [/android.+;\s(shield)\sbuild/i], ["model", ["vendor", "Nvidia"], ["type", "console"]],
|
||||
[/(playstation\s[34portablevi]+)/i], ["model", ["vendor", "Sony"], ["type", "console"]], [/(sprint\s(\w+))/i], [["vendor", n, { HTC: "APA", Sprint: "Sprint" }], ["model", n, { "Evo Shift 4G": "7373KT" }], ["type", "mobile"]], [/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i], ["vendor", "model", ["type", "tablet"]], [/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, /(zte)-(\w*)/i, /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i], ["vendor", ["model", /_/g, " "], ["type", "mobile"]], [/(nexus\s9)/i], ["model", ["vendor", "HTC"],
|
||||
["type", "tablet"]], [/d\/huawei([\w\s-]+)[;\)]/i, /(nexus\s6p)/i], ["model", ["vendor", "Huawei"], ["type", "mobile"]], [/(microsoft);\s(lumia[\s\w]+)/i], ["vendor", "model", ["type", "mobile"]], [/[\s\(;](xbox(?:\sone)?)[\s\);]/i], ["model", ["vendor", "Microsoft"], ["type", "console"]], [/(kin\.[onetw]{3})/i], [["model", /\./g, " "], ["vendor", "Microsoft"], ["type", "mobile"]], [/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i, /mot[\s-]?(\w*)/i, /(XT\d{3,4}) build\//i, /(nexus\s6)/i], ["model",
|
||||
["vendor", "Motorola"], ["type", "mobile"]], [/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i], ["model", ["vendor", "Motorola"], ["type", "tablet"]], [/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i], [["vendor", e.trim], ["model", e.trim], ["type", "smarttv"]], [/hbbtv.+maple;(\d+)/i], [["model", /^/, "SmartTV"], ["vendor", "Samsung"], ["type", "smarttv"]], [/\(dtv[\);].+(aquos)/i], ["model", ["vendor", "Sharp"], ["type", "smarttv"]], [/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i, /((SM-T\w+))/i],
|
||||
[["vendor", "Samsung"], "model", ["type", "tablet"]], [/smart-tv.+(samsung)/i], ["vendor", ["type", "smarttv"], "model"], [/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i, /(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i, /sec-((sgh\w+))/i], [["vendor", "Samsung"], "model", ["type", "mobile"]], [/sie-(\w*)/i], ["model", ["vendor", "Siemens"], ["type", "mobile"]], [/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]*)/i], [["vendor", "Nokia"], "model", ["type", "mobile"]], [/android\s3\.[\s\w;-]{10}(a\d{3})/i], ["model", ["vendor",
|
||||
"Acer"], ["type", "tablet"]], [/android.+([vl]k\-?\d{3})\s+build/i], ["model", ["vendor", "LG"], ["type", "tablet"]], [/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i], [["vendor", "LG"], "model", ["type", "tablet"]], [/(lg) netcast\.tv/i], ["vendor", "model", ["type", "smarttv"]], [/(nexus\s[45])/i, /lg[e;\s\/-]+(\w*)/i, /android.+lg(\-?[\d\w]+)\s+build/i], ["model", ["vendor", "LG"], ["type", "mobile"]], [/android.+(ideatab[a-z0-9\-\s]+)/i], ["model", ["vendor", "Lenovo"], ["type", "tablet"]], [/linux;.+((jolla));/i], ["vendor",
|
||||
"model", ["type", "mobile"]], [/((pebble))app\/[\d\.]+\s/i], ["vendor", "model", ["type", "wearable"]], [/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i], ["vendor", "model", ["type", "mobile"]], [/crkey/i], [["model", "Chromecast"], ["vendor", "Google"]], [/android.+;\s(glass)\s\d/i], ["model", ["vendor", "Google"], ["type", "wearable"]], [/android.+;\s(pixel c)\s/i], ["model", ["vendor", "Google"], ["type", "tablet"]], [/android.+;\s(pixel xl|pixel)\s/i], ["model", ["vendor", "Google"], ["type", "mobile"]], [/android.+;\s(\w+)\s+build\/hm\1/i,
|
||||
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, /android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i, /android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i], [["model", /_/g, " "], ["vendor", "Xiaomi"], ["type", "mobile"]], [/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i], [["model", /_/g, " "], ["vendor", "Xiaomi"], ["type", "tablet"]], [/android.+;\s(m[1-5]\snote)\sbuild/i], ["model", ["vendor", "Meizu"], ["type", "tablet"]], [/android.+a000(1)\s+build/i,
|
||||
/android.+oneplus\s(a\d{4})\s+build/i], ["model", ["vendor", "OnePlus"], ["type", "mobile"]], [/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i], ["model", ["vendor", "RCA"], ["type", "tablet"]], [/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i], ["model", ["vendor", "Dell"], ["type", "tablet"]], [/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i], ["model", ["vendor", "Verizon"], ["type", "tablet"]], [/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i], [["vendor", "Barnes & Noble"], "model", ["type", "tablet"]], [/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i],
|
||||
["model", ["vendor", "NuVision"], ["type", "tablet"]], [/android.+;\s(k88)\sbuild/i], ["model", ["vendor", "ZTE"], ["type", "tablet"]], [/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i], ["model", ["vendor", "Swiss"], ["type", "mobile"]], [/android.+[;\/]\s*(zur\d{3})\s+build/i], ["model", ["vendor", "Swiss"], ["type", "tablet"]], [/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i], ["model", ["vendor", "Zeki"], ["type", "tablet"]], [/(android).+[;\/]\s+([YR]\d{2})\s+build/i, /android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i],
|
||||
[["vendor", "Dragon Touch"], "model", ["type", "tablet"]], [/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i], ["model", ["vendor", "Insignia"], ["type", "tablet"]], [/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i], ["model", ["vendor", "NextBook"], ["type", "tablet"]], [/android.+[;\/]\s*(Xtreme_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i], [["vendor", "Voice"], "model", ["type", "mobile"]], [/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i], [["vendor", "LvTel"], "model", ["type", "mobile"]], [/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i],
|
||||
["model", ["vendor", "Envizen"], ["type", "tablet"]], [/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i], ["model", ["vendor", "MachSpeed"], ["type", "tablet"]], [/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/android.+[;\/]\s*TU_(1491)\s+build/i], ["model", ["vendor", "Rotor"], ["type", "tablet"]], [/android.+(KS(.+))\s+build/i], ["model", ["vendor", "Amazon"], ["type", "tablet"]],
|
||||
[/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/\s(tablet|tab)[;\/]/i, /\s(mobile)(?:[;\/]|\ssafari)/i], [["type", e.lowerize], "vendor", "model"], [/(android[\w\.\s\-]{0,9});.+build/i], ["model", ["vendor", "Generic"]]], engine: [[/windows.+\sedge\/([\w\.]+)/i], ["version", ["name", "EdgeHTML"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, /(icab)[\/\s]([23]\.[\d\.]+)/i], ["name", "version"],
|
||||
[/rv:([\w\.]{1,9}).+(gecko)/i], ["version", "name"]], os: [[/microsoft\s(windows)\s(vista|xp)/i], ["name", "version"], [/(windows)\snt\s6\.2;\s(arm)/i, /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i], ["name", ["version", n, k]], [/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i], [["name", "Windows"], ["version", n, k]], [/\((bb)(10);/i], [["name", "BlackBerry"], "version"], [/(blackberry)\w*\/?([\w\.]*)/i, /(tizen)[\/\s]([\w\.]+)/i, /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]*)/i,
|
||||
/linux;.+(sailfish);/i], ["name", "version"], [/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i], [["name", "Symbian"], "version"], [/\((series40);/i], ["name"], [/mozilla.+\(mobile;.+gecko.+firefox/i], [["name", "Firefox OS"], "version"], [/(nintendo|playstation)\s([wids34portablevu]+)/i, /(mint)[\/\s\(]?(\w*)/i, /(mageia|vectorlinux)[;\s]/i, /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i, /(hurd|linux)\s?([\w\.]*)/i,
|
||||
/(gnu)\s?([\w\.]*)/i], ["name", "version"], [/(cros)\s[\w]+\s([\w\.]+\w)/i], [["name", "Chromium OS"], "version"], [/(sunos)\s?([\w\.\d]*)/i], [["name", "Solaris"], "version"], [/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i], ["name", "version"], [/(haiku)\s(\w+)/i], ["name", "version"], [/cfnetwork\/.+darwin/i, /ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i], [["version", /_/g, "."], ["name", "iOS"]], [/(mac\sos\sx)\s?([\w\s\.]*)/i, /(macintosh|mac(?=_powerpc)\s)/i], [["name", "Mac OS"], ["version", /_/g, "."]], [/((?:open)?solaris)[\/\s-]?([\w\.]*)/i,
|
||||
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i, /(unix)\s?([\w\.]*)/i], ["name", "version"]]
|
||||
}, g = function (b, d) {
|
||||
"object" === typeof b && (d = b, b = c); if (!(this instanceof g)) return (new g(b, d)).getResult(); var l = b || (a && a.navigator && a.navigator.userAgent ? a.navigator.userAgent : ""), k = d ? e.extend(r, d) : r; this.getBrowser = function () { var a = { name: c, version: c }; f.call(a, l, k.browser); a.major = e.major(a.version); return a }; this.getCPU = function () {
|
||||
var a = { architecture: c }; f.call(a,
|
||||
l, k.cpu); return a
|
||||
}; this.getDevice = function () { var a = { vendor: c, model: c, type: c }; f.call(a, l, k.device); return a }; this.getEngine = function () { var a = { name: c, version: c }; f.call(a, l, k.engine); return a }; this.getOS = function () { var a = { name: c, version: c }; f.call(a, l, k.os); return a }; this.getResult = function () { return { ua: this.getUA(), browser: this.getBrowser(), engine: this.getEngine(), os: this.getOS(), device: this.getDevice(), cpu: this.getCPU() } }; this.getUA = function () { return l }; this.setUA = function (a) { l = a; return this }; return this
|
||||
};
|
||||
g.VERSION = "0.7.18"; g.BROWSER = { NAME: "name", MAJOR: "major", VERSION: "version" }; g.CPU = { ARCHITECTURE: "architecture" }; g.DEVICE = { MODEL: "model", VENDOR: "vendor", TYPE: "type", CONSOLE: "console", MOBILE: "mobile", SMARTTV: "smarttv", TABLET: "tablet", WEARABLE: "wearable", EMBEDDED: "embedded" }; g.ENGINE = { NAME: "name", VERSION: "version" }; g.OS = { NAME: "name", VERSION: "version" }; "undefined" !== typeof b ? ("undefined" !== typeof d && d.exports && (b = d.exports = g), b.UAParser = g) : a && (a.UAParser = g); var p = a && (a.jQuery || a.Zepto); if ("undefined" !==
|
||||
typeof p) { var u = new g; p.ua = u.getResult(); p.ua.get = function () { return u.getUA() }; p.ua.set = function (a) { u.setUA(a); a = u.getResult(); for (var b in a) p.ua[b] = a[b] } }
|
||||
})("object" === typeof window ? window : this)
|
||||
}, {}]
|
||||
}, {}, [1])(1)
|
||||
});
|
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 264 KiB |
22
src/App.vue
Normal file
22
src/App.vue
Normal file
@ -0,0 +1,22 @@
|
||||
<script setup lang="ts">
|
||||
import LP_Casino_Deeplink from './components/LP_Casino_Deeplink.vue';
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<LP_Casino_Deeplink />
|
||||
</template>
|
||||
|
||||
<style>
|
||||
@import url('../src/assets/fonts.css');
|
||||
@import url('../src/assets/mystyle.css');
|
||||
|
||||
#app {
|
||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
/* text-align: center; */
|
||||
color: #2671d4;
|
||||
margin-top: 0px;
|
||||
font-family: 'Zen Maru Gothic', sans-serif;
|
||||
}
|
||||
</style>
|
13
src/assets/fonts.css
Normal file
13
src/assets/fonts.css
Normal file
@ -0,0 +1,13 @@
|
||||
@font-face {
|
||||
/* 重命名字体名 */
|
||||
font-family: 'Zen Maru Gothic';
|
||||
src: url('./fonts/ZenMaruGothic-Regular.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.btn {
|
||||
font-size: 25px;
|
||||
/* width: 200px; */
|
||||
/* height: 60px; */
|
||||
}
|
BIN
src/assets/fonts/ZenMaruGothic-Regular.ttf
Normal file
BIN
src/assets/fonts/ZenMaruGothic-Regular.ttf
Normal file
Binary file not shown.
BIN
src/assets/icon.png
Normal file
BIN
src/assets/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 593 KiB |
BIN
src/assets/logo.png
Normal file
BIN
src/assets/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
62
src/assets/mystyle.css
Normal file
62
src/assets/mystyle.css
Normal file
@ -0,0 +1,62 @@
|
||||
/* The switch - the box around the slider */
|
||||
.switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 60px;
|
||||
height: 34px;
|
||||
}
|
||||
|
||||
/* Hide default HTML checkbox */
|
||||
.switch input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/* The slider */
|
||||
.slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #ccc;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
input:checked + .slider {
|
||||
background-color: #2196F3;
|
||||
}
|
||||
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 1px #2196F3;
|
||||
}
|
||||
|
||||
input:checked + .slider:before {
|
||||
-webkit-transform: translateX(26px);
|
||||
-ms-transform: translateX(26px);
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
/* Rounded sliders */
|
||||
.slider.round {
|
||||
border-radius: 34px;
|
||||
}
|
||||
|
||||
.slider.round:before {
|
||||
border-radius: 50%;
|
||||
}
|
106
src/components/LP_Casino_Deeplink.vue
Normal file
106
src/components/LP_Casino_Deeplink.vue
Normal file
@ -0,0 +1,106 @@
|
||||
<script setup lang="ts">
|
||||
import { ElDialog } from 'element-plus';
|
||||
import { ref } from "vue";
|
||||
import { LP_Casino_Deeplink } from "../script/LP_Casino_Deeplink";
|
||||
import Popup from './Popup.vue';
|
||||
|
||||
const linetypeDefault = ref('')
|
||||
const servertypeDefault = ref('')
|
||||
const hostportDefault = ref('')
|
||||
const patchDefault = ref('')
|
||||
const linetype = ref(0)
|
||||
const servertype = ref(0)
|
||||
const hostport = ref(0)
|
||||
const patch = ref(0)
|
||||
const iscustom = ref(false)
|
||||
const PopupVisible = ref(false)
|
||||
const PopupCallback = ref(Function)
|
||||
const PopupInfo = ref('')
|
||||
const input3 = ref('')
|
||||
const self = {
|
||||
linetypeDefault: linetypeDefault,
|
||||
servertypeDefault: servertypeDefault,
|
||||
hostportDefault: hostportDefault,
|
||||
patchDefault: patchDefault,
|
||||
linetype: linetype,
|
||||
servertype: servertype,
|
||||
hostport: hostport,
|
||||
patch: patch,
|
||||
iscustom: iscustom,
|
||||
PopupVisible: PopupVisible,
|
||||
PopupCallback: PopupCallback,
|
||||
PopupInfo: PopupInfo,
|
||||
Script: null
|
||||
}
|
||||
const Script = new LP_Casino_Deeplink(self);
|
||||
self.Script = Script;
|
||||
const LinetypeData = Script.GetLineType();
|
||||
const ServertypeData = Script.GetServerType();
|
||||
const HostportData = Script.GetHostport();
|
||||
const Patch = Script.GetPatch();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-dialog v-model="PopupVisible" width="30%" :show-close="false">
|
||||
<Popup :APP="self" />
|
||||
</el-dialog>
|
||||
<div>
|
||||
<h1>
|
||||
<div>
|
||||
linetype:
|
||||
<el-select v-model="linetypeDefault" filterable @change="(data: any) => { Script.SelectLinetype(data) }">
|
||||
<el-option v-for="(item, index) in LinetypeData" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
servertype:
|
||||
<el-select v-model="servertypeDefault" filterable
|
||||
@change="(data: any) => { Script.SelectServertype(data) }">
|
||||
<el-option v-for="(item, index) in ServertypeData" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
hostport:
|
||||
<el-select v-model="hostportDefault" filterable @change="(data: any) => { Script.SelectHostport(data) }">
|
||||
<el-option v-for="(item, index) in HostportData" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
patch:
|
||||
<el-select v-model="patchDefault" filterable @change="(data: any) => { Script.SelectPatch(data) }">
|
||||
<el-option v-for="(item, index) in Patch" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
使用自己帶進來的URL參數
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="iscustom">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
<el-button type="success" @click.native="() => { Script.OnclickOpen() }" size="large" round>開啟遊戲>>
|
||||
</el-button>
|
||||
<!-- <div>
|
||||
<el-button type="warning" @click.native="() => { Script.Install_InternalTest(+input3) }" size="large" round>
|
||||
前往
|
||||
</el-button>
|
||||
<el-input v-model="input3" placeholder="Google Play商店(內部測試) 版本號" class="input-with-select"
|
||||
style="width:25%; font-size:25px; text-align">
|
||||
</el-input>
|
||||
Google Play商店(內部測試) 版本號
|
||||
</div> -->
|
||||
<br>
|
||||
<a href="bjcasino://get/message?GetOtherUserProfile=100000185">跟建喵做朋友>></a>
|
||||
<br><br>
|
||||
<a href="bjcasino://get/message?GetOtherUserProfile=100000157">跟豆豆做朋友>></a>
|
||||
<br><br>
|
||||
<a href="bjcasino://get/message?GetOtherUserProfile=100000148">跟柏威做朋友>></a>
|
||||
<br><br>
|
||||
<a href="bjcasino://get/message?OnClickChatAndChat=100000157">跟豆豆聊聊天>></a>
|
||||
<br><br>
|
||||
</h1>
|
||||
</div>
|
||||
</template>
|
20
src/components/Popup.vue
Normal file
20
src/components/Popup.vue
Normal file
@ -0,0 +1,20 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
|
||||
const props = defineProps<{ APP: any }>()
|
||||
|
||||
const input = ref('')
|
||||
const APP = props.APP
|
||||
function Send(content: string) {
|
||||
APP.PopupVisible.value = false;
|
||||
APP.PopupCallback.value(content);
|
||||
}
|
||||
const info = APP.PopupInfo
|
||||
</script>
|
||||
|
||||
<template>
|
||||
{{ info }}
|
||||
<el-input v-model="input" />
|
||||
<el-button type="primary" @click.native="() => { Send(input) }" size="large" round>確定
|
||||
</el-button>
|
||||
</template>
|
8
src/env.d.ts
vendored
Normal file
8
src/env.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
declare module '*.vue' {
|
||||
import type { DefineComponent } from 'vue'
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
||||
const component: DefineComponent<{}, {}, any>
|
||||
export default component
|
||||
}
|
10
src/main.ts
Normal file
10
src/main.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import "bootstrap";
|
||||
import "bootstrap/dist/css/bootstrap.min.css";
|
||||
import ElementPlus from "element-plus";
|
||||
import "element-plus/dist/index.css";
|
||||
import locale from "element-plus/lib/locale/lang/zh-tw";
|
||||
import { createApp } from "vue";
|
||||
import App from "./App.vue";
|
||||
|
||||
|
||||
createApp(App).use(ElementPlus, { locale }).mount("#app");
|
350
src/script/LP_Casino_Deeplink.ts
Normal file
350
src/script/LP_Casino_Deeplink.ts
Normal file
@ -0,0 +1,350 @@
|
||||
|
||||
export class LP_Casino_Deeplink {
|
||||
|
||||
//#region public
|
||||
|
||||
public Linetype: any[] = [4, ["外版", "B2B", "Test", "QA", "內版"]];
|
||||
public Servertype: any[] = [5, ["不選擇版本", "外版", "B2B", "Test", "QA", "內版"]];
|
||||
public Hostport: any[] = [5, ["不選擇版本", "外版", "B2B", "Test", "QA", "內版"]];
|
||||
public Patch: any[] = [5, [
|
||||
"不選擇版本",
|
||||
"外版",
|
||||
"B2B",
|
||||
"Test",
|
||||
"QA",
|
||||
"內版",
|
||||
"建喵-內版",
|
||||
"建喵-Test",
|
||||
"建喵-B2B",
|
||||
"建喵-外版",
|
||||
]];
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region private
|
||||
|
||||
private _client: any;
|
||||
|
||||
private _u = navigator.userAgent;
|
||||
private _isAndroid = this._u.indexOf("Android") > -1 || this._u.indexOf("Adr") > -1;
|
||||
private _isiOS = !!this._u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region Lifecycle
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
constructor(client: any) {
|
||||
this._client = client;
|
||||
this.onLoad();
|
||||
}
|
||||
|
||||
public onLoad() {
|
||||
this._client.linetype.value = this.Linetype[0];
|
||||
this._client.servertype.value = this.Servertype[0];
|
||||
this._client.hostport.value = this.Hostport[0];
|
||||
this._client.patch.value = this.Patch[0];
|
||||
this._client.linetypeDefault.value = this.Linetype[1][this._client.linetype.value];
|
||||
this._client.servertypeDefault.value = this.Servertype[1][this._client.servertype.value];
|
||||
this._client.hostportDefault.value = this.Hostport[1][this._client.hostport.value];
|
||||
this._client.patchDefault.value = this.Patch[1][this._client.patch.value];
|
||||
// this.GetLanIP();
|
||||
|
||||
// if (!this._isAndroid && !this._isiOS) {
|
||||
// this._client.isBtn_WanOpen.value = true;
|
||||
// }
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region Get Data
|
||||
|
||||
public SelectLinetype(data: any) {
|
||||
// data为el-option上:value绑定的对象
|
||||
this._client.linetype.value = data;
|
||||
|
||||
let select: string = this.Linetype[1][data];
|
||||
|
||||
if (select) {
|
||||
let servertype: number;
|
||||
for (let i = 0; i < this.Servertype[1].length; i++) {
|
||||
const servertypetName = this.Servertype[1][i];
|
||||
if (servertypetName === select) {
|
||||
servertype = i;
|
||||
}
|
||||
}
|
||||
this._client.servertype.value = servertype;
|
||||
this._client.servertypeDefault.value = this.Servertype[1][this._client.servertype.value];
|
||||
|
||||
let hostport: number;
|
||||
for (let i = 0; i < this.Hostport[1].length; i++) {
|
||||
const hostportName = this.Hostport[1][i];
|
||||
if (hostportName === select) {
|
||||
hostport = i;
|
||||
}
|
||||
}
|
||||
this._client.hostport.value = hostport;
|
||||
this._client.hostportDefault.value = this.Hostport[1][this._client.hostport.value];
|
||||
|
||||
let patch: number;
|
||||
for (let i = 0; i < this.Patch[1].length; i++) {
|
||||
const patchName = this.Patch[1][i];
|
||||
if (patchName === select) {
|
||||
patch = i;
|
||||
}
|
||||
}
|
||||
this._client.patch.value = patch;
|
||||
this._client.patchDefault.value = this.Patch[1][this._client.patch.value];
|
||||
}
|
||||
}
|
||||
|
||||
public SelectServertype(data: any) {
|
||||
// data为el-option上:value绑定的对象
|
||||
this._client.servertype.value = data;
|
||||
}
|
||||
|
||||
public SelectHostport(data: any) {
|
||||
// data为el-option上:value绑定的对象
|
||||
this._client.hostport.value = data;
|
||||
}
|
||||
|
||||
public SelectPatch(data: any) {
|
||||
// data为el-option上:value绑定的对象
|
||||
this._client.patch.value = data;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region Get Data
|
||||
|
||||
public GetLineType(): { key: string; value: string; label: string; }[] {
|
||||
const linetypes: any[] = this.Linetype[1];
|
||||
let options: any[] = [];
|
||||
for (let i: number = 0; i < linetypes.length; i++) {
|
||||
const linetype = linetypes[i];
|
||||
options.push({
|
||||
value: i,
|
||||
label: linetype,
|
||||
});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
public GetServerType(): { key: string; value: string; label: string; }[] {
|
||||
const servertypes: any[] = this.Servertype[1];
|
||||
let options: any[] = [];
|
||||
for (let i: number = 0; i < servertypes.length; i++) {
|
||||
const servertype = servertypes[i];
|
||||
options.push({
|
||||
value: i,
|
||||
label: servertype,
|
||||
});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
public GetHostport(): { key: string; value: string; label: string; }[] {
|
||||
const hostports: any[] = this.Hostport[1];
|
||||
let options: any[] = [];
|
||||
for (let i: number = 0; i < hostports.length; i++) {
|
||||
const hostport = hostports[i];
|
||||
options.push({
|
||||
value: i,
|
||||
label: hostport,
|
||||
});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
public GetPatch(): { key: string; value: string; label: string; }[] {
|
||||
const patchs: any[] = this.Patch[1];
|
||||
let options: any[] = [];
|
||||
for (let i: number = 0; i < patchs.length; i++) {
|
||||
const patch = patchs[i];
|
||||
options.push({
|
||||
value: i,
|
||||
label: patch,
|
||||
});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region Custom
|
||||
|
||||
public OnclickOpen(isWan: boolean = false, obj: Object = {}) {
|
||||
let hostport = this._client.hostport.value;
|
||||
let linetype = +this._client.linetype.value;
|
||||
let servertype = +this._client.servertype.value;
|
||||
let patch = +this._client.patch.value;
|
||||
let gameUrl = "https://liff.line.me/1657713613-we8Gk929?showtype=2";
|
||||
let E_iscustom: any = document.getElementById("iscustom");
|
||||
let iscustom = E_iscustom.checked;
|
||||
let URLscheme: any = {};
|
||||
|
||||
if (obj["deviceid"]) {
|
||||
URLscheme["deviceid"] = obj["deviceid"];
|
||||
}
|
||||
|
||||
switch (servertype) {
|
||||
case 0: {
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
URLscheme["servertype"] = servertype;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (hostport) {
|
||||
|
||||
// 不選擇環境
|
||||
case 0: {
|
||||
break;
|
||||
}
|
||||
|
||||
// 外版
|
||||
case 1: {
|
||||
URLscheme["host"] = "https://patch.lybobet.com/";
|
||||
URLscheme["port"] = "9005";
|
||||
break;
|
||||
}
|
||||
|
||||
// B2B
|
||||
case 2: {
|
||||
URLscheme["host"] = "https://patch-b2b.lybobet.com/";
|
||||
URLscheme["port"] = "9005";
|
||||
break;
|
||||
}
|
||||
|
||||
// Test
|
||||
case 3: {
|
||||
URLscheme["host"] = "https://patch-testing.lybobet.com/";
|
||||
URLscheme["port"] = "9005";
|
||||
break;
|
||||
}
|
||||
|
||||
// QA
|
||||
case 4: {
|
||||
URLscheme["host"] = "https://patch-qa.lybobet.com/";
|
||||
URLscheme["port"] = "9005";
|
||||
break;
|
||||
}
|
||||
|
||||
// 內版
|
||||
case 5: {
|
||||
URLscheme["host"] = "https://patch-dev.lybobet.com/";
|
||||
URLscheme["port"] = "9005";
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (patch) {
|
||||
case 0: {
|
||||
break;
|
||||
}
|
||||
|
||||
// 外版
|
||||
case 1: {
|
||||
URLscheme["patch"] = "https://patch.lybobet.com/";
|
||||
break;
|
||||
}
|
||||
|
||||
// B2B
|
||||
case 2: {
|
||||
URLscheme["patch"] = "https://patch-b2b.lybobet.com/";
|
||||
break;
|
||||
}
|
||||
|
||||
// Test
|
||||
case 3: {
|
||||
URLscheme["patch"] = "https://patch-testing.lybobet.com/";
|
||||
break;
|
||||
}
|
||||
|
||||
// QA
|
||||
case 4: {
|
||||
URLscheme["patch"] = "https://patch-qa.lybobet.com/";
|
||||
break;
|
||||
}
|
||||
|
||||
// 內版
|
||||
case 5: {
|
||||
URLscheme["patch"] = "https://patch-dev.lybobet.com/";
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (linetype) {
|
||||
// 外版
|
||||
case 0: {
|
||||
gameUrl = "1657864491-kA7gnVMp";
|
||||
break;
|
||||
}
|
||||
|
||||
// B2B
|
||||
case 1: {
|
||||
gameUrl = "1657864484-YeqWEV9O";
|
||||
break;
|
||||
}
|
||||
|
||||
// Test
|
||||
case 2: {
|
||||
gameUrl = "1657864500-N3YEgz6p";
|
||||
break;
|
||||
}
|
||||
|
||||
// QA
|
||||
case 3: {
|
||||
gameUrl = "1657864462-xM7dgPGK";
|
||||
break;
|
||||
}
|
||||
|
||||
// 內版
|
||||
case 4: {
|
||||
gameUrl = "1657713613-we8Gk929";
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let url = "";
|
||||
if (iscustom) {
|
||||
let URLscheme = new URL(location.href);
|
||||
if (this._isiOS || this._isAndroid) {
|
||||
url = `https://line.me/R/app/${gameUrl}/${URLscheme.search}`;
|
||||
} else {
|
||||
url = `https://liff.line.me/${gameUrl}/${URLscheme.search}`;
|
||||
}
|
||||
} else {
|
||||
let _URLSearchParams = new URLSearchParams(URLscheme).toString();
|
||||
let _decodeURI = decodeURIComponent(_URLSearchParams);
|
||||
if (this._isiOS || this._isAndroid) {
|
||||
url = `https://line.me/R/app/${gameUrl}/${_decodeURI ? `?${_decodeURI}` : ""}`;
|
||||
} else {
|
||||
url = `https://liff.line.me/${gameUrl}/${_decodeURI ? `?${_decodeURI}` : ""}`;
|
||||
}
|
||||
}
|
||||
if (this._isiOS || this._isAndroid) {
|
||||
window.open(url, "_self");
|
||||
} else {
|
||||
window.open(url, "_blank");
|
||||
}
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}
|
11
src/script/Tools.ts
Normal file
11
src/script/Tools.ts
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
export class Tools {
|
||||
|
||||
//#region Custom
|
||||
|
||||
public static Sleep(ms: any): Promise<unknown> {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}
|
28
tsconfig.json
Normal file
28
tsconfig.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"useDefineForClassFields": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
// "strict": true,
|
||||
"jsx": "preserve",
|
||||
"sourceMap": true,
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": true,
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"src/**/*.d.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
}
|
||||
]
|
||||
}
|
8
tsconfig.node.json
Normal file
8
tsconfig.node.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node"
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
8
vite.config.ts
Normal file
8
vite.config.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { defineConfig } from 'vite'
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
base: "./",
|
||||
plugins: [vue(),]
|
||||
})
|
Loading…
Reference in New Issue
Block a user