Icônes + CSS et intégration Backend

This commit is contained in:
Angels-dev
2024-08-22 02:37:48 +02:00
parent 81507c7f30
commit 529315354f
49 changed files with 730 additions and 44 deletions

1
.env Normal file
View File

@@ -0,0 +1 @@
VITE_BACKEND_URL=https://api-mainframe.zac.ovh

1
faviconData.json Normal file

File diff suppressed because one or more lines are too long

65
faviconDescription.json Normal file
View File

@@ -0,0 +1,65 @@
{
"masterPicture": "public/mainframe.png",
"iconsPath": "public/",
"design": {
"ios": {
"pictureAspect": "noChange",
"assets": {
"ios6AndPriorIcons": false,
"ios7AndLaterIcons": true,
"precomposedIcons": true,
"declareOnlyDefaultIcon": true
},
"appName": "MainFrame"
},
"desktopBrowser": {
"design": "background",
"backgroundColor": "#333333",
"backgroundRadius": 0.3,
"imageScale": 0.9
},
"windows": {
"pictureAspect": "noChange",
"backgroundColor": "#333333",
"onConflict": "override",
"assets": {
"windows80Ie10Tile": true,
"windows10Ie11EdgeTiles": {
"small": true,
"medium": true,
"big": true,
"rectangle": true
}
},
"appName": "MainFrame"
},
"androidChrome": {
"pictureAspect": "noChange",
"themeColor": "#333333",
"manifest": {
"name": "MainFrame",
"startUrl": "https://mainframe.zac.ovh",
"display": "standalone",
"orientation": "notSet",
"onConflict": "override",
"declared": true
},
"assets": {
"legacyIcon": false,
"lowResolutionIcons": true
}
},
"safariPinnedTab": {
"pictureAspect": "blackAndWhite",
"threshold": 23.90625,
"themeColor": "#333333"
}
},
"settings": {
"scalingAlgorithm": "Mitchell",
"errorOnImageTooSmall": false,
"readmeFile": false,
"htmlCodeFile": true,
"usePathAsIs": false
}
}

View File

@@ -1,9 +1,23 @@
<!DOCTYPE html>
<!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">
<meta charset="UTF-8" />
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png" />
<link rel="manifest" href="site.webmanifest" />
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#333333" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="icon" href="favicon.ico" media="(prefers-color-scheme: light)">
<link rel="icon" href="favicon.ico" media="(prefers-color-scheme: dark)">
<meta name="apple-mobile-web-app-title" content="MainFrame" />
<meta name="application-name" content="MainFrame" />
<meta name="msapplication-TileColor" content="#333333" />
<meta name="msapplication-TileImage" content="mstile-144x144.png" />
<meta name="msapplication-config" content="browserconfig.xml" />
<meta name="theme-color" content="#333333" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>

260
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "zac-mainframe",
"version": "0.0.1",
"name": "zac-mainframe-front",
"version": "0.0.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "zac-mainframe",
"version": "0.0.1",
"name": "zac-mainframe-front",
"version": "0.0.2",
"dependencies": {
"@fortawesome/fontawesome-free": "^6.6.0",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
@@ -14,15 +14,18 @@
"@fortawesome/free-regular-svg-icons": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/vue-fontawesome": "^3.0.8",
"axios": "^1.7.4",
"dotenv": "^16.4.5",
"js-confetti": "^0.12.0",
"pinia": "^2.2.2",
"vue": "^3.4.29",
"vue-cookies": "^1.8.4",
"vue-i18n": "^9.14.0",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
"@types/node": "^20.14.5",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0",
@@ -696,6 +699,50 @@
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/@intlify/core-base": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
"integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
"license": "MIT",
"dependencies": {
"@intlify/message-compiler": "9.14.0",
"@intlify/shared": "9.14.0"
},
"engines": {
"node": ">= 16"
},
"funding": {
"url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@intlify/message-compiler": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
"integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
"license": "MIT",
"dependencies": {
"@intlify/shared": "9.14.0",
"source-map-js": "^1.0.2"
},
"engines": {
"node": ">= 16"
},
"funding": {
"url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@intlify/shared": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
"integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
"license": "MIT",
"engines": {
"node": ">= 16"
},
"funding": {
"url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
@@ -999,13 +1046,15 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.14.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
"integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
"version": "20.16.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
"integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"undici-types": "~5.26.4"
"undici-types": "~6.19.2"
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
@@ -1523,6 +1572,23 @@
"node": ">=8"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/axios": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1607,6 +1673,18 @@
"dev": true,
"license": "MIT"
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/computeds": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz",
@@ -1687,6 +1765,15 @@
"dev": true,
"license": "MIT"
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1713,6 +1800,18 @@
"node": ">=6.0.0"
}
},
"node_modules/dotenv": {
"version": "16.4.5",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/entities": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
@@ -2157,6 +2256,40 @@
"dev": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2554,6 +2687,27 @@
"node": ">=8.6"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -2823,6 +2977,58 @@
"node": ">=0.10"
}
},
"node_modules/pinia": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.2.tgz",
"integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==",
"license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.6.3",
"vue-demi": "^0.14.10"
},
"funding": {
"url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
"@vue/composition-api": "^1.4.0",
"typescript": ">=4.4.4",
"vue": "^2.6.14 || ^3.3.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
},
"typescript": {
"optional": true
}
}
},
"node_modules/pinia/node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/postcss": {
"version": "8.4.41",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
@@ -2904,6 +3110,12 @@
"node": ">=6.0.0"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -3258,11 +3470,13 @@
}
},
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true,
"license": "MIT"
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/uri-js": {
"version": "4.4.1",
@@ -3400,6 +3614,26 @@
"eslint": ">=6.0.0"
}
},
"node_modules/vue-i18n": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.0.tgz",
"integrity": "sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==",
"license": "MIT",
"dependencies": {
"@intlify/core-base": "9.14.0",
"@intlify/shared": "9.14.0",
"@vue/devtools-api": "^6.5.0"
},
"engines": {
"node": ">= 16"
},
"funding": {
"url": "https://github.com/sponsors/kazupon"
},
"peerDependencies": {
"vue": "^3.0.0"
}
},
"node_modules/vue-router": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz",

View File

@@ -19,15 +19,18 @@
"@fortawesome/free-regular-svg-icons": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/vue-fontawesome": "^3.0.8",
"axios": "^1.7.4",
"dotenv": "^16.4.5",
"js-confetti": "^0.12.0",
"pinia": "^2.2.2",
"vue": "^3.4.29",
"vue-cookies": "^1.8.4",
"vue-i18n": "^9.14.0",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
"@types/node": "^20.14.5",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

12
public/browserconfig.xml Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="public/mstile-70x70.png"/>
<square150x150logo src="public/mstile-150x150.png"/>
<square310x310logo src="public/mstile-310x310.png"/>
<wide310x150logo src="public/mstile-310x150.png"/>
<TileColor>#333333</TileColor>
</tile>
</msapplication>
</browserconfig>

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 15 KiB

12
public/html_code.html Normal file
View File

@@ -0,0 +1,12 @@
<link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="public/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="public/favicon-16x16.png">
<link rel="manifest" href="public/site.webmanifest">
<link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#333333">
<link rel="shortcut icon" href="public/favicon.ico">
<meta name="apple-mobile-web-app-title" content="MainFrame">
<meta name="application-name" content="MainFrame">
<meta name="msapplication-TileColor" content="#333333">
<meta name="msapplication-TileImage" content="public/mstile-144x144.png">
<meta name="msapplication-config" content="public/browserconfig.xml">
<meta name="theme-color" content="#333333">

20
public/index.html Normal file
View File

@@ -0,0 +1,20 @@
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
<link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="public/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="public/favicon-16x16.png">
<link rel="manifest" href="public/site.webmanifest">
<link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#333333">
<link rel="shortcut icon" href="public/favicon.ico">
<meta name="apple-mobile-web-app-title" content="MainFrame">
<meta name="application-name" content="MainFrame">
<meta name="msapplication-TileColor" content="#333333">
<meta name="msapplication-TileImage" content="public/mstile-144x144.png">
<meta name="msapplication-config" content="public/browserconfig.xml">
<meta name="theme-color" content="#333333"></head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body></html>

BIN
public/mainframe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

BIN
public/mstile-144x144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
public/mstile-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
public/mstile-310x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
public/mstile-310x310.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
public/mstile-70x70.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="600.000000pt" height="600.000000pt" viewBox="0 0 600.000000 600.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,600.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M30 5981 c0 -11 -3 -11 -15 -1 -13 11 -15 -321 -15 -2981 l0 -2994
2684 0 c1476 0 2682 3 2679 7 -2 5 5 8 16 8 12 0 21 -4 21 -10 0 -5 11 -10 25
-10 14 0 25 5 25 10 0 6 5 10 11 10 5 0 7 -4 4 -10 -4 -6 8 -10 29 -10 19 0
37 6 39 13 4 9 8 9 15 -2 8 -11 10 -11 15 0 4 10 6 10 6 2 1 -15 51 -18 51 -3
0 6 5 10 11 10 5 0 8 -4 5 -8 -9 -14 77 -13 86 0 6 10 10 10 16 1 9 -14 54
-13 65 2 5 7 10 6 15 -3 8 -12 51 -11 85 3 10 4 17 3 17 -4 0 -6 17 -11 40
-11 l40 0 0 3001 0 3000 -2985 -3 c-2523 -3 -2985 -5 -2985 -17z m5942 -24 c4
-6 6 -646 5 -1421 -2 -1325 -3 -1409 -19 -1420 -15 -9 -215 188 -1441 1419
l-1424 1430 106 5 c58 3 704 4 1435 2 1044 -2 1332 -5 1338 -15z m-2994 0 c9
-11 11 -346 10 -1463 l-3 -1449 -55 -1 c-61 -1 -2841 -6 -2877 -5 l-23 1 3
1458 2 1457 1010 5 c556 3 1215 7 1466 8 388 3 457 2 467 -11z m1487 -1463
c781 -785 1422 -1432 1424 -1438 2 -6 -48 39 -110 100 -63 61 -190 184 -283
275 -93 90 -176 172 -185 183 -9 10 -40 41 -70 70 -30 28 -68 67 -85 86 -17
19 -141 145 -275 279 -184 184 -246 240 -253 230 -7 -10 -8 -8 -3 8 5 20 -7
37 -27 38 -5 0 -7 2 -6 5 4 8 -66 79 -75 77 -4 -1 -16 12 -27 30 -21 34 -55
58 -70 48 -6 -3 -7 1 -4 10 7 17 -103 138 -118 129 -4 -3 -8 1 -8 9 0 20 -58
69 -72 61 -7 -4 -8 -3 -4 5 4 6 2 19 -5 27 -10 12 -14 12 -22 2 -7 -10 -8 -9
-4 3 5 16 -178 206 -195 201 -5 -1 -13 10 -19 25 -7 16 -13 23 -16 16 -8 -21
-20 -15 -19 10 1 15 -4 22 -17 20 -12 0 -16 4 -13 12 3 8 -2 19 -10 25 -9 9
-14 9 -14 2 0 -6 -7 -9 -15 -6 -12 5 -13 10 -4 20 6 8 9 15 5 15 -3 1 -10 2
-15 3 -5 0 -13 5 -18 10 -5 5 -2 6 6 1 10 -6 12 -4 7 4 -5 7 -15 10 -23 7 -11
-5 -13 -1 -7 17 3 12 3 19 -1 15 -5 -5 -15 1 -22 12 -8 11 -20 17 -26 14 -7
-4 -9 -3 -4 1 9 10 -63 86 -75 79 -4 -3 -5 2 -2 10 3 9 1 16 -5 16 -6 0 -11
-5 -11 -11 0 -5 -5 -7 -11 -3 -8 4 -7 9 2 14 15 10 -43 62 -74 67 -12 2 -23 6
-26 10 -3 3 5 3 19 0 20 -5 15 3 -30 47 -30 30 -58 52 -62 49 -4 -2 -5 4 -1
13 5 13 3 16 -10 11 -9 -3 -26 2 -39 13 -13 11 -17 19 -10 20 6 0 12 -4 12 -9
0 -5 8 -12 18 -15 9 -4 -3 13 -27 38 -25 25 -50 42 -57 39 -8 -3 -14 0 -14 7
0 6 5 8 10 5 6 -3 10 -1 10 5 0 8 -9 10 -27 5 -23 -5 -25 -4 -14 9 8 9 11 16
7 16 -15 0 -22 2 -33 12 -8 6 -19 6 -33 -2 -12 -6 -24 -9 -27 -7 -2 3 5 8 16
12 12 3 21 11 21 17 0 6 10 3 23 -8 19 -17 19 -16 -3 9 -13 15 -29 26 -36 23
-6 -2 -11 3 -10 12 1 11 -5 16 -18 14 -11 -2 -15 1 -11 7 3 6 1 11 -5 11 -7 0
-10 6 -7 13 7 19 -24 36 -48 26 -11 -4 -29 -8 -40 -8 -17 0 -16 2 5 11 14 6
32 10 40 9 10 -2 7 6 -9 23 -14 14 -27 24 -29 21 -10 -10 -62 30 -62 48 0 14
-5 17 -16 13 -14 -5 -15 -4 -5 8 10 12 9 17 -8 28 -20 12 -29 38 -13 38 4 0
646 -642 1427 -1426z m-1422 1334 c2 -7 1 -22 -3 -33 -6 -17 -8 -15 -12 13 -4
31 5 45 15 20z m165 -133 c-3 -3 -9 2 -12 12 -6 14 -5 15 5 6 7 -7 10 -15 7
-18z m22 -60 c0 -5 -5 -3 -10 5 -5 8 -10 20 -10 25 0 6 5 3 10 -5 5 -8 10 -19
10 -25z m-170 15 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4
-4 4 -10z m180 -96 c-8 -8 -23 -20 -34 -26 -14 -6 -11 -1 8 16 32 29 45 34 26
10z m-90 -56 c0 -5 -9 -3 -20 4 -11 7 -20 16 -20 20 0 5 9 3 20 -4 11 -7 20
-16 20 -20z m257 -4 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
m-187 -25 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10 16 0 6 5 7 10 4 6 -3 10 -11 10
-16z m-70 1 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
10 -10z m23 -24 c4 -10 1 -13 -7 -10 -7 3 -16 -2 -19 -10 -4 -9 -12 -16 -18
-16 -7 0 -2 11 11 25 28 29 26 29 33 11z m31 -2 c3 -8 2 -12 -4 -9 -6 3 -10
10 -10 16 0 14 7 11 14 -7z m-35 -76 c13 -4 13 -5 0 -10 -9 -4 -21 2 -29 15
-11 19 -11 20 1 11 8 -6 21 -13 28 -16z m391 -10 c0 -6 -6 -5 -15 2 -8 7 -15
14 -15 16 0 2 7 1 15 -2 8 -4 15 -11 15 -16z m-320 2 c0 -5 -5 -10 -11 -10 -5
0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m59 -20 c11 -24 11 -24 -3 -6 -9
11 -16 24 -16 30 0 12 5 7 19 -24z m-144 -10 c3 -6 -1 -7 -9 -4 -18 7 -21 14
-7 14 6 0 13 -4 16 -10z m210 -8 c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3 15
-9 12 -12z m-165 -57 c0 -8 -2 -15 -4 -15 -2 0 -6 7 -10 15 -3 8 -1 15 4 15 6
0 10 -7 10 -15z m140 11 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16
-4z m-88 -13 c-6 -2 -9 -10 -6 -15 4 -7 2 -8 -5 -4 -13 9 -5 26 12 25 9 0 8
-2 -1 -6z m502 -9 c3 -8 2 -12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14 -7z
m-474 -49 c-7 -9 -15 -13 -19 -10 -3 3 1 10 9 15 21 14 24 12 10 -5z m395 -13
c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3 15 -9 12 -12z m40 8 c3 -5 1 -10 -4
-10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m-387 -46 c-4 -3 -12 5
-18 18 -12 22 -12 22 6 6 10 -10 15 -20 12 -24z m142 12 c0 -3 -4 -8 -10 -11
-5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-260 -10 c0 -2 -7 -7
-16 -10 -8 -3 -12 -2 -9 4 6 10 25 14 25 6z m580 -20 c0 -3 -4 -8 -10 -11 -5
-3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-520 -20 c0 -3 -4 -8 -10
-11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m220 -10 c0 -3 -4 -8
-10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m40 -26 c-6 -11
-15 -20 -20 -20 -6 0 -2 9 7 20 10 11 19 20 21 20 1 0 -2 -9 -8 -20z m-320
-15 c13 -14 21 -25 18 -25 -2 0 -15 11 -28 25 -13 14 -21 25 -18 25 2 0 15
-11 28 -25z m120 -35 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10
6 0 10 -4 10 -10z m203 -25 c-3 -9 -8 -14 -10 -11 -3 3 -2 9 2 15 9 16 15 13
8 -4z m267 -19 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10
-2 10 -4z m-149 -39 c-10 -9 -11 -8 -5 6 3 10 9 15 12 12 3 -3 0 -11 -7 -18z
m-46 -7 c3 -6 -1 -7 -9 -4 -18 7 -21 14 -7 14 6 0 13 -4 16 -10z m-150 -20 c3
-5 -4 -6 -15 -3 -11 3 -22 9 -25 13 -3 5 4 6 15 3 11 -3 22 -9 25 -13z m550 0
c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m-25
-10 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z
m-490 -40 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4
-10z m65 -10 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
-10z m535 -30 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11
-4 11 -10z m-22 -175 c-3 -3 -9 2 -12 12 -6 14 -5 15 5 6 7 -7 10 -15 7 -18z
m-78 11 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10
-4z m-335 -86 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4
11 -10z m415 -55 c-7 -8 -17 -15 -22 -15 -6 0 -5 7 2 15 7 8 17 15 22 15 6 0
5 -7 -2 -15z m405 -85 c3 -6 -1 -7 -9 -4 -18 7 -21 14 -7 14 6 0 13 -4 16 -10z
m145 -134 c0 -2 -7 -9 -15 -16 -13 -11 -14 -10 -9 4 5 14 24 23 24 12z m-1130
-10 c0 -2 -8 -10 -17 -17 -16 -13 -17 -12 -4 4 13 16 21 21 21 13z m865 -96
c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m655
-284 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z
m-1450 -946 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
10 -10z m253 3 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m100 0
c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z m1981 -12 c14 -12 -87
-116 -805 -830 -1862 -1850 -2054 -2039 -2063 -2030 -13 12 -10 204 9 564 3
66 8 179 10 250 2 72 5 130 6 130 0 0 2 36 4 80 2 44 6 123 8 176 2 53 8 102
12 109 5 9 4 11 -3 6 -7 -4 -12 -2 -12 3 0 6 4 11 8 11 5 0 8 32 7 71 0 39 2
72 6 75 4 2 6 16 3 29 -3 16 0 25 8 25 10 0 10 2 -1 9 -8 5 -9 11 -3 15 6 4 7
20 2 42 -6 24 -5 43 3 56 9 15 9 20 -2 27 -10 6 -10 10 -1 16 7 4 9 17 5 32
-3 14 -2 22 3 19 12 -7 10 27 -1 35 -4 3 -3 18 3 34 8 22 8 30 -2 37 -10 7
-10 11 4 21 12 10 14 17 6 30 -6 11 -6 23 -1 30 13 17 10 36 -7 48 -12 9 -12
10 3 5 15 -5 17 -2 12 13 -3 11 -2 22 4 25 11 7 9 25 -3 45 -5 8 -3 17 5 23
11 7 11 11 1 15 -6 2 -10 8 -7 13 11 18 12 70 1 70 -7 0 -8 3 -1 8 6 4 11 39
12 77 0 39 4 84 7 100 13 56 14 145 2 138 -6 -4 -3 6 8 21 10 16 13 25 7 22
-7 -5 -11 4 -11 24 0 22 4 29 13 24 9 -6 9 -5 0 8 -7 8 -10 18 -6 21 3 4 1 7
-6 7 -7 0 -9 5 -6 10 4 6 11 8 16 5 5 -3 6 1 3 9 -3 8 0 24 6 37 11 19 10 21
-4 16 -14 -6 -16 -3 -11 14 5 15 4 19 -4 15 -14 -9 -14 0 -1 25 8 14 7 19 -1
19 -21 0 23 35 45 36 12 1 68 4 126 7 58 3 299 8 535 11 237 4 489 8 560 11
72 3 396 8 720 11 325 4 591 7 592 8 11 9 164 -3 177 -13z m-2910 -2 c8 -8 9
-2881 0 -2902 -5 -15 -41 -16 -438 -12 -237 2 -624 4 -861 5 -236 0 -567 0
-735 0 -168 0 -442 2 -610 3 l-305 2 -2 1452 -2 1453 712 2 c1219 5 2235 3
2241 -3z m2946 -43 c0 -2 -17 -16 -37 -31 l-38 -28 29 31 c26 28 46 40 46 28z
m37 -24 c10 -6 12 -314 10 -1419 -1 -776 -4 -1413 -7 -1416 -9 -9 -2880 -16
-2880 -8 0 10 118 128 1624 1625 654 649 1199 1191 1210 1203 23 25 26 26 43
15z m-117 -45 c0 -1 -44 -45 -97 -97 l-98 -95 95 98 c88 90 100 102 100 94z
m-355 -357 c-87 -87 -160 -158 -162 -156 -3 3 310 316 317 316 3 0 -67 -72
-155 -160z m-175 -173 c0 -2 -15 -16 -32 -33 l-33 -29 29 33 c28 30 36 37 36
29z m-70 -70 c0 -1 -56 -58 -125 -127 -69 -69 -125 -122 -125 -119 0 6 242
249 247 249 2 0 3 -1 3 -3z m-400 -402 c-79 -79 -145 -143 -147 -141 -4 4 279
286 287 286 3 0 -60 -65 -140 -145z m-210 -208 c0 -1 -28 -29 -62 -62 -43 -41
-50 -46 -23 -16 50 56 85 88 85 78z m-180 -182 c-24 -25 -46 -45 -49 -45 -3 0
15 20 39 45 24 25 46 45 49 45 3 0 -15 -20 -39 -45z m-70 -68 c0 -2 -13 -16
-30 -32 -16 -16 -30 -25 -30 -21 0 4 12 18 26 31 25 24 34 29 34 22z m-70 -70
c0 -2 -18 -21 -40 -42 -22 -21 -40 -35 -40 -31 0 5 17 24 37 42 35 32 43 38
43 31z m-150 -152 c-7 -8 -17 -15 -22 -15 -6 0 -5 7 2 15 7 8 17 15 22 15 6 0
5 -7 -2 -15z m-50 -48 c0 -1 -23 -25 -51 -52 -57 -55 -56 -42 0 17 31 31 51
45 51 35z m-110 -107 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2
0 4 -4 4 -10z m-55 -60 c-21 -22 -43 -40 -49 -40 -5 0 10 18 34 40 24 22 46
40 49 40 3 0 -13 -18 -34 -40z m-95 -90 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10
3 6 8 10 11 10 2 0 4 -4 4 -10z m-100 -104 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1
-10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-50 -50 c0 -2 -7 -7 -16 -10 -8 -3
-12 -2 -9 4 6 10 25 14 25 6z m-250 -240 c0 -2 -8 -10 -17 -17 -16 -13 -17
-12 -4 4 13 16 21 21 21 13z m-120 -120 c0 -2 -8 -10 -17 -17 -16 -13 -17 -12
-4 4 13 16 21 21 21 13z m-110 -109 c0 -2 -19 -21 -42 -42 l-43 -40 40 43 c36
39 45 47 45 39z m-130 -130 c0 -2 -10 -12 -22 -23 l-23 -19 19 23 c18 21 26
27 26 19z"/>
<path d="M96 193 c-11 -11 -7 -20 9 -20 8 0 15 4 15 8 0 11 -16 20 -24 12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

55
public/site.webmanifest Normal file
View File

@@ -0,0 +1,55 @@
{
"name": "MainFrame",
"short_name": "MainFrame",
"icons": [
{
"src": "android-chrome-36x36.png",
"sizes": "36x36",
"type": "image/png"
},
{
"src": "android-chrome-48x48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "android-chrome-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "android-chrome-96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "android-chrome-144x144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "android-chrome-256x256.png",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "android-chrome-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#333333",
"background_color": "#333333",
"start_url": "https://mainframe.zac.ovh",
"display": "standalone"
}

View File

@@ -1,5 +1,20 @@
<script setup lang="ts">
import { RouterView, RouterLink } from 'vue-router'
import { ref, provide, onMounted } from 'vue'
import { checkUser } from '@/utils/discord'
import type { Ref } from 'vue'
import type { User } from '@/utils/discord'
// État de l'utilisateur et de son avatar
const user: Ref<User | null> = ref(null)
const avatar = ref('')
provide('user', user) // Fournit l'utilisateur aux composants enfants
onMounted(async () => {
user.value = await checkUser() // Vérifie l'authentification lors du montage du composant
avatar.value = user.value ? `https://cdn.discordapp.com/avatars/${user.value.id}/${user.value.avatar}?size=48` : ''
})
</script>
<template>
@@ -12,6 +27,7 @@ import { RouterView, RouterLink } from 'vue-router'
<router-link to="/">Index</router-link>
<p>|</p>
<router-link to="/discord">Discord</router-link>
<img v-if="user" :src=avatar>
</nav>
</header>
@@ -50,6 +66,10 @@ nav * {
margin-left: 20px;
}
nav img {
border-radius: 20%;
}
h1 {
text-align: center;
left: 0;

View File

@@ -60,6 +60,7 @@
body {
min-height: 100vh;
margin: 0;
color: var(--color-text);
background: var(--color-background);
transition:

View File

@@ -3,8 +3,10 @@
/* VUE STYLE */
#app {
/* max-width: 1280px; */
margin: 0 auto;
padding: 2rem;
/* margin: 0 auto; */
/* padding: 2rem;*/
height: inherit;
width: inherit;
font-weight: normal;
}
@@ -29,8 +31,8 @@ a,
}
#app {
display: grid;
grid-template-columns: 1fr 1fr;
/* display: grid; */
/* grid-template-columns: 1fr 1fr; */
padding: 0 2rem;
}
}
@@ -61,7 +63,10 @@ a,
}
.main {
margin-left: 200px; /* 200px is the width of the header vl position */
margin-top: 60px; /* 60px is the height of the header navbar */
height: calc(100% - 60px);
margin-left: 200px; /* 200px is the width of the header vl position (or sidebar) */
width: calc(100% - 200px);
/* padding: 0px 10px; */
}

View File

@@ -3,6 +3,8 @@ import { library } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { createI18n } from 'vue-i18n'
import cookies from 'vue-cookies'
import App from './App.vue'
@@ -12,6 +14,8 @@ import './assets/main.css'
library.add(fas, fab)
createApp(App)
.use(createPinia())
.use(createI18n({}))
.use(router)
.use(cookies)
.component('font-awesome-icon', FontAwesomeIcon)

View File

@@ -1,6 +1,4 @@
import { createRouter, createWebHistory } from 'vue-router'
import { inject } from 'vue'
import type { VueCookies } from 'vue-cookies'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@@ -9,6 +7,7 @@ const router = createRouter({
path: '/',
name: 'index',
component: () => import('../views/IndexView.vue'),
meta: { title: 'MainFrame' },
children: [
{
path: '',
@@ -26,7 +25,7 @@ const router = createRouter({
path: '/discord',
name: 'discord',
component: () => import('../views/DiscordView.vue'),
meta: { discordAuth: true },
meta: { title: 'MainFrame | Discord', discordAuth: true },
children: [
{
path: '',
@@ -43,15 +42,9 @@ const router = createRouter({
]
})
router.beforeEach((to) => {
const $cookies = inject<VueCookies>('$cookies')
if (!$cookies) return console.log('Error: $cookies is not injected')
if (to.meta.discordAuth && !$cookies.isKey('DISCORD_CODE')) {
window.location.href =
'https://discord.com/oauth2/authorize?client_id=1274800564449841172&response_type=code&redirect_uri=https%3A%2F%2Fmainframe.zac.ovh%2Fdiscord&scope=identify'
return
}
router.beforeEach((to, from, next) => {
document.title = to.meta.title as string
next()
})
export default router

58
src/utils/discord.ts Normal file
View File

@@ -0,0 +1,58 @@
import axios from 'axios'
export interface User {
id: string
username: string
discriminator: string
global_name?: string
avatar?: string
bot?: boolean
system?: boolean
mfa_enabled?: boolean
banner?: string
accent_color?: number
locale?: string
verified?: boolean
email?: string
flags?: number
premium_type?: number
public_flags?: number
avatar_decoration_data?: {
sku_id: number
asset: string
}
}
// Fonction pour rediriger vers Discord pour l'authentification
export function login() {
window.location.href = import.meta.env.VITE_BACKEND_URL + '/discord/auth/redirect';
}
// Fonction pour se déconnecter
export function logout(user_value: User | null) {
user_value = null
return user_value
// Effectue une requête à ton API pour déconnecter l'utilisateur, supprimer la session, etc.
// Ou simplement rediriger vers une page d'accueil sans session
}
export async function checkBots() {
try {
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/bots', { withCredentials: true })
return response.data
} catch (err) { return null }
}
export async function checkUser() {
try {
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user', { withCredentials: true })
return response.data
} catch (err) { return null }
}
export async function checkUserGuilds() {
try {
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/guilds', { withCredentials: true })
return response.data
} catch (err) { return null }
}

View File

@@ -1,5 +1,28 @@
<script setup lang="ts">
import { inject } from 'vue'
import type { Ref } from 'vue'
import type { User } from '@/utils/discord'
const user: Ref<User | null> | undefined = inject('user')
const bots: Ref<User[] | null> | undefined = inject('bots')
</script>
<template>
<div class="main">
<h1>Test Dashboard Discord</h1>
<div class="title">
<h1>Test Dashboard Discord</h1>
<div v-if="user">
<p>Vous êtes connecté en tant que {{ user.global_name }}.</p>
<p>Vous avez l'ID {{ user.id }}.</p>
</div>
<p v-else>Vous n'êtes pas connecté.</p>
</div>
<div class="bots">
<h2>Bots</h2>
<div v-for="bot in bots" :key="bot.id">
<p>{{ bot.username }}</p>
<p>{{ bot.id }}</p>
</div>
</div>
</div>
</template>

View File

@@ -1,13 +1,24 @@
<script setup lang="ts">
import { RouterLink, RouterView, useRoute } from 'vue-router'
import { inject } from 'vue'
import type { VueCookies } from 'vue-cookies'
import { RouterLink, RouterView } from 'vue-router'
import { checkBots, checkUserGuilds, login, logout } from '@/utils/discord'
import { ref, provide, inject, onMounted } from 'vue'
import type { Ref } from 'vue'
import type { User } from '@/utils/discord'
const $route = useRoute()
const $cookies = inject<VueCookies>('$cookies')
if (!$cookies) throw new Error('Missing VueCookies')
// État de l'utilisateur et des bots
const user: Ref<User | null> | undefined = inject('user')
const bots = ref([])
const guilds = ref([])
if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/discord', 'mainframe.zac.ovh', true, 'Strict')
provide('bots', bots) // Fournit les bots aux composants enfants
provide('guilds', guilds) // Fournit les guilds aux composants enfants
onMounted(async () => {
if (user) {
bots.value = await checkBots()
guilds.value = await checkUserGuilds()
}
})
</script>
<template>
@@ -15,6 +26,8 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
<div class="sidenav">
<router-link to="/discord">Dashboard</router-link>
<router-link to="/config">Config</router-link>
<button v-if="!user" @click="login">Se connecter</button>
<button v-if="user" @click="logout(user)">Se déconnecter</button>
</div>
<router-view v-slot="{ Component }">
@@ -23,4 +36,11 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
</transition>
</router-view>
</div>
</template>
</template>
<style scoped>
.sidenav button {
position: absolute;
bottom: 60px;
}
</style>