ali 3 年 前
コミット
d1072cd45e
100 ファイル変更、2375 行追加、0 行削除
  1. 11 0
      .dockerignore
  2. 9 0
      .editorconfig
  3. 14 0
      .env.example
  4. 11 0
      .eslintignore
  5. 131 0
      .eslintrc.js
  6. 72 0
      .github/workflows/codeql-analysis.yml
  7. 21 0
      .github/workflows/docker-image.yml
  8. 32 0
      .github/workflows/node.js.yml
  9. 38 0
      .gitignore
  10. 3 0
      .npmrc
  11. 12 0
      .vscode/extensions.json
  12. 16 0
      .vscode/settings.json
  13. 56 0
      Dockerfile
  14. 42 0
      README.md
  15. 17 0
      docker-compose.yml
  16. 17 0
      index.html
  17. 39 0
      jsconfig.json
  18. 21 0
      nginx/Dockerfile
  19. 102 0
      nginx/default.conf
  20. 86 0
      package.json
  21. 27 0
      postcss.config.js
  22. BIN
      public/assets/images/admin/layout/admin-logo.png
  23. BIN
      public/assets/images/auth/login-image-left.png
  24. BIN
      public/assets/images/auth/login-image-right.png
  25. BIN
      public/assets/images/web/homepage-first-section-background.png
  26. BIN
      public/assets/images/web/homepage-first-section-logo.png
  27. BIN
      public/assets/images/web/user-top-menu-logo.png
  28. BIN
      public/favicon.ico
  29. 51 0
      public/firebase-messaging-sw.js
  30. BIN
      public/icons/apple-icon-120x120.png
  31. BIN
      public/icons/apple-icon-152x152.png
  32. BIN
      public/icons/apple-icon-167x167.png
  33. BIN
      public/icons/apple-icon-180x180.png
  34. BIN
      public/icons/favicon-128x128.png
  35. BIN
      public/icons/favicon-16x16.png
  36. BIN
      public/icons/favicon-32x32.png
  37. BIN
      public/icons/favicon-96x96.png
  38. BIN
      public/icons/icon-128x128.png
  39. BIN
      public/icons/icon-144x144.png
  40. BIN
      public/icons/icon-152x152.png
  41. BIN
      public/icons/icon-192x192.png
  42. BIN
      public/icons/icon-384x384.png
  43. BIN
      public/icons/icon-48x48.png
  44. BIN
      public/icons/icon-512x512.png
  45. BIN
      public/icons/icon-72x72.png
  46. BIN
      public/icons/icon-96x96.png
  47. BIN
      public/icons/ms-icon-144x144.png
  48. 0 0
      public/icons/safari-pinned-tab.svg
  49. BIN
      public/img/QuestionBank/toolbar-back-ground.png
  50. BIN
      public/img/mapMarker.png
  51. 15 0
      public/najva-messaging-sw.js
  52. 483 0
      quasar.config.js
  53. 3 0
      quasar.extensions.json
  54. 101 0
      src-capacitor/android/.gitignore
  55. 2 0
      src-capacitor/android/app/.gitignore
  56. 63 0
      src-capacitor/android/app/build.gradle
  57. 20 0
      src-capacitor/android/app/capacitor.build.gradle
  58. 21 0
      src-capacitor/android/app/proguard-rules.pro
  59. 20 0
      src-capacitor/android/app/release/output-metadata.json
  60. 26 0
      src-capacitor/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
  61. 48 0
      src-capacitor/android/app/src/main/AndroidManifest.xml
  62. BIN
      src-capacitor/android/app/src/main/ic_alaa_launcher-playstore.png
  63. 34 0
      src-capacitor/android/app/src/main/java/ir/sanatisharif/android/konkur96/MainActivity.java
  64. 110 0
      src-capacitor/android/app/src/main/java/ir/sanatisharif/android/konkur96/SplashScreenActivity.java
  65. 74 0
      src-capacitor/android/app/src/main/res/drawable/ic_alaa_launcher_background.xml
  66. 12 0
      src-capacitor/android/app/src/main/res/layout/activity_main.xml
  67. 20 0
      src-capacitor/android/app/src/main/res/layout/activity_splash_screen.xml
  68. 5 0
      src-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_alaa_launcher.xml
  69. 5 0
      src-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_alaa_launcher_round.xml
  70. BIN
      src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher.png
  71. BIN
      src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher_foreground.png
  72. BIN
      src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher_round.png
  73. BIN
      src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher.png
  74. BIN
      src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher_foreground.png
  75. BIN
      src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher_round.png
  76. BIN
      src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher.png
  77. BIN
      src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher_foreground.png
  78. BIN
      src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher_round.png
  79. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher.png
  80. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher_foreground.png
  81. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher_round.png
  82. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher.png
  83. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher_foreground.png
  84. BIN
      src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher_round.png
  85. 0 0
      src-capacitor/android/app/src/main/res/raw/alaa_splash.json
  86. 5 0
      src-capacitor/android/app/src/main/res/values/colors.xml
  87. 4 0
      src-capacitor/android/app/src/main/res/values/ic_launcher_background.xml
  88. 7 0
      src-capacitor/android/app/src/main/res/values/strings.xml
  89. 23 0
      src-capacitor/android/app/src/main/res/values/styles.xml
  90. 5 0
      src-capacitor/android/app/src/main/res/xml/file_paths.xml
  91. 18 0
      src-capacitor/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
  92. 29 0
      src-capacitor/android/build.gradle
  93. 9 0
      src-capacitor/android/capacitor.settings.gradle
  94. 22 0
      src-capacitor/android/gradle.properties
  95. BIN
      src-capacitor/android/gradle/wrapper/gradle-wrapper.jar
  96. 6 0
      src-capacitor/android/gradle/wrapper/gradle-wrapper.properties
  97. 244 0
      src-capacitor/android/gradlew
  98. 92 0
      src-capacitor/android/gradlew.bat
  99. 5 0
      src-capacitor/android/settings.gradle
  100. 16 0
      src-capacitor/android/variables.gradle

+ 11 - 0
.dockerignore

@@ -0,0 +1,11 @@
+node_modules
+npm-debug.log
+Dockerfile*
+docker-compose*
+.dockerignore
+.git
+.gitignore
+.env.example
+README.md
+LICENSE
+.vscode

+ 9 - 0
.editorconfig

@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true

+ 14 - 0
.env.example

@@ -0,0 +1,14 @@
+APP_API_SERVER=http://palizvani.hghweb.ir/api
+VUEX_PERSISTED_STATE_KEY=vuex
+GET_TIME_SERVER=/time
+APP_API=/api
+NGINX_PORT=8081
+SSR_PORT=3000
+APP_ENV=development
+LINUX_ANDROID_STUDIO=/home/user/Downloads/android-studio-2022.2.1.18-linux/android-studio/bin/studio.sh
+ANDROID_APPLICATION_ID=ir.palizvani.android
+ANDROID_APP_NAME=palizvani
+GOOGLE_TAG_MANAGER_TOKEN=GTM-PNP1111
+HEAP_MEMORY_ALLOCATION_INTERVAL=10000
+MAX_HEAP_MEMORY_ALLOCATION_IN_PERCENT=70
+LOG_REQUEST=true

+ 11 - 0
.eslintignore

@@ -0,0 +1,11 @@
+/dist
+/src-bex/www
+/src-capacitor
+/src-cordova
+/.quasar
+/node_modules
+/src-ssr
+babel.config.js
+/src/assets/js/Minio.js
+/public/najva-messaging-sw.js
+

+ 131 - 0
.eslintrc.js

@@ -0,0 +1,131 @@
+module.exports = {
+  // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy
+  // This option interrupts the configuration hierarchy at this file
+  // Remove this if you have a higher level ESLint config file (it usually happens into a mono repos)
+  root: true,
+
+  parserOptions: {
+    ecmaVersion: '2021', // Allows for the parsing of modern ECMAScript features
+    ecmaFeatures: {
+      experimentalObjectRestSpread: true
+    }
+  },
+
+  env: {
+    node: true,
+    browser: true,
+    'vue/setup-compiler-macros': true
+  },
+
+  // Rules order is important, please avoid shuffling them
+  extends: [
+    // Base ESLint recommended rules
+    // 'eslint:recommended',
+
+    // Uncomment any of the lines below to choose desired strictness,
+    // but leave only one uncommented!
+    // See https://eslint.vuejs.org/rules/#available-rules
+    'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention)
+    // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability)
+    // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead)
+
+    'standard'
+
+  ],
+
+  plugins: [
+    // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-files
+    // required to lint *.vue files
+    'vue'
+
+  ],
+
+  globals: {
+    ga: 'readonly', // Google Analytics
+    cordova: 'readonly',
+    __statics: 'readonly',
+    __QUASAR_SSR__: 'readonly',
+    __QUASAR_SSR_SERVER__: 'readonly',
+    __QUASAR_SSR_CLIENT__: 'readonly',
+    __QUASAR_SSR_PWA__: 'readonly',
+    process: 'readonly',
+    Capacitor: 'readonly',
+    chrome: 'readonly'
+  },
+
+  // add your custom rules here
+  rules: {
+    // allow async-await
+    'generator-star-spacing': 'off',
+    // allow paren-less arrow functions
+    'arrow-parens': 'off',
+    'one-var': 'off',
+    'no-void': 'off',
+    'multiline-ternary': 'off',
+
+    'import/first': 'off',
+    'import/named': 'error',
+    'import/namespace': 'error',
+    'import/default': 'error',
+    'import/export': 'error',
+    // 'simple-import-sort/imports': 'error',
+    // 'simple-import-sort/exports': 'error',
+    'import/extensions': 'off',
+    'import/no-unresolved': 'off',
+    'import/no-extraneous-dependencies': 'off',
+
+    'prefer-promise-reject-errors': 'off',
+    'no-unused-vars': 'error',
+
+    'vue/attributes-order': 'error',
+    'vue/order-in-components': 'error',
+    'vue/max-attributes-per-line': 'error',
+    'vue/html-indent': 'error',
+    'vue/html-closing-bracket-spacing': 'error',
+    'vue/no-multi-spaces': 'error',
+    'no-console': [
+      'warn',
+      { allow: ['clear', 'info', 'error', 'dir', 'trace', 'groupEnd', 'groupCollapsed'] }
+    ],
+
+    'vue/multi-word-component-names': 'off',
+    'vue/no-v-text-v-html-on-component': 'off',
+    'vue/component-name-in-template-casing': [
+      'error',
+      'kebab-case',
+      {
+        ignores: []
+      }
+    ],
+    'vue/html-closing-bracket-newline': [
+      'error',
+      {
+        singleline: 'never',
+        multiline: 'never'
+      }
+    ],
+    'vue/html-self-closing': [
+      'error',
+      {
+        html: {
+          void: 'never',
+          normal: 'always',
+          component: 'always'
+        },
+        svg: 'always',
+        math: 'always'
+      }
+    ],
+    'vue/first-attribute-linebreak': [
+      'error',
+      {
+        singleline: 'beside',
+        multiline: 'beside'
+      }
+    ],
+    // allow debugger during development only
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+    'space-before-function-paren': 0
+
+  }
+}

+ 72 - 0
.github/workflows/codeql-analysis.yml

@@ -0,0 +1,72 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+  push:
+    branches: [ "master" ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ "master" ]
+  schedule:
+    - cron: '39 0 * * 3'
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ubuntu-latest
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+
+    strategy:
+      fail-fast: false
+      matrix:
+        language: [ 'javascript' ]
+        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
+        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v3
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v2
+      with:
+        languages: ${{ matrix.language }}
+        # If you wish to specify custom queries, you can do so here or in a config file.
+        # By default, queries listed here will override any specified in a config file.
+        # Prefix the list here with "+" to use these queries and those in the config file.
+        
+        # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+        # queries: security-extended,security-and-quality
+
+        
+    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
+    # If this step fails, then you should remove it and run the build manually (see below)
+    - name: Autobuild
+      uses: github/codeql-action/autobuild@v2
+
+    # ℹ️ Command-line programs to run using the OS shell.
+    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+    #   If the Autobuild fails above, remove it and uncomment the following three lines. 
+    #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
+
+    # - run: |
+    #   echo "Run, Build Application using script"
+    #   ./location_of_script_within_repo/buildscript.sh
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v2

+ 21 - 0
.github/workflows/docker-image.yml

@@ -0,0 +1,21 @@
+name: Docker Image CI
+
+on:
+  push:
+    branches: [ "master", "dev" ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ "master", "dev" ]
+  schedule:
+    - cron: '39 0 * * 3'
+
+jobs:
+
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Build the Docker image
+        run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)

+ 32 - 0
.github/workflows/node.js.yml

@@ -0,0 +1,32 @@
+# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
+
+name: Node.js CI
+
+on:
+  push:
+    branches: [ "dev" ]
+  pull_request:
+    branches: [ "dev" ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        node-version: [16.x, 18.x]
+        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+    steps:
+    - uses: actions/checkout@v3
+    - name: Use Node.js ${{ matrix.node-version }}
+      uses: actions/setup-node@v3
+      with:
+        node-version: ${{ matrix.node-version }}
+        cache: 'npm'
+    - run: yarn
+    - run: yarn lint
+    - run: yarn build:ssr --if-present
+    # - run: npm test

+ 38 - 0
.gitignore

@@ -0,0 +1,38 @@
+.DS_Store
+.thumbs.db
+.env
+node_modules
+
+# Quasar core related directories
+.quasar
+/dist
+
+# Cordova related directories and files
+/src-cordova/node_modules
+/src-cordova/platforms
+/src-cordova/plugins
+/src-cordova/www
+
+# Capacitor related directories and files
+/src-capacitor/www
+/src-capacitor/node_modules
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+
+# widget.json
+/src/components/Widgets/widget.json
+/src/components/Widgets/PageBuilderComponents.js
+/src/components/Widgets/PageBuilderOptionPanels.js
+
+
+*.code-workspace

+ 3 - 0
.npmrc

@@ -0,0 +1,3 @@
+# pnpm-related options
+shamefully-hoist=true
+strict-peer-dependencies=false

+ 12 - 0
.vscode/extensions.json

@@ -0,0 +1,12 @@
+{
+  "recommendations": [
+    "dbaeumer.vscode-eslint",
+    
+    "octref.vetur"
+  ],
+  "unwantedRecommendations": [
+    "hookyqr.beautify",
+    "dbaeumer.jshint",
+    "ms-vscode.vscode-typescript-tslint-plugin"
+  ]
+}

+ 16 - 0
.vscode/settings.json

@@ -0,0 +1,16 @@
+{
+  "vetur.validation.template": false,
+  "vetur.format.enable": false,
+  "eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"],
+
+  "vetur.experimental.templateInterpolationService": false,
+  "editor.defaultFormatter": "rvest.vs-code-prettier-eslint",
+  "editor.formatOnPaste": false, // required
+  "editor.formatOnType": false, // required
+  "editor.formatOnSave": true, // optional
+  "editor.formatOnSaveMode": "file", // required to format on save
+  "files.autoSave": "onFocusChange",
+  "[javascript]": {
+    "editor.defaultFormatter": "Vue.volar"
+  } // optional but recommended
+}

+ 56 - 0
Dockerfile

@@ -0,0 +1,56 @@
+FROM node:16.16.0-alpine as prebuild
+
+# Set working directory
+WORKDIR /var/www/app
+
+COPY ./package*.json ./
+
+# Install dependencies
+RUN yarn install --production --frozen-lockfile
+
+
+ARG ALAA_API_V2_SERVER=https://alaatv.com/api/v2
+ARG ALAA_API_V1_SERVER=https://alaatv.com/api/v1
+ARG ALAA_WEB_SERVER=https://alaatv.com
+ARG ALAA_MINIO_SERVER=https://stage-minio.alaatv.com
+ARG VUEX_PERSISTED_STATE_KEY=vuex
+ARG GET_TIME_SERVER=/time
+ARG ALAA_API_V1=/alaa/api/v1
+ARG ALAA_API_V2=/alaa/api/v2
+ARG ALAA_WEB=/alaa
+ARG ALAA_MINIO=/minio
+ARG NGINX_PORT=8081
+ARG SSR_PORT=3000
+ARG GOOGLE_TAG_MANAGER_TOKEN=GTM-PNP8RDW
+ARG HEAP_MEMORY_ALLOCATION_INTERVAL=10000
+ARG MAX_HEAP_MEMORY_ALLOCATION_IN_PERCENT=70
+ARG LOG_REQUEST=true
+
+# Copy all files
+COPY ./ ./
+
+# Build app on SSR mode
+RUN yarn build:ssr
+
+
+##############################################
+
+
+FROM node:16.16.0-alpine
+
+
+COPY --from=prebuild /var/www/app/dist/ssr /var/www/app/dist/ssr
+
+WORKDIR /var/www/app/dist/ssr
+
+RUN yarn install
+
+# Expose the listening port
+EXPOSE 3000
+
+# Run container as non-root (unprivileged) user
+# The "node" user is provided in the Node.js Alpine base image
+
+USER node
+
+CMD ["node", "/var/www/app/dist/ssr/index.js"]

+ 42 - 0
README.md

@@ -0,0 +1,42 @@
+# Quasar App (alaatv-front-vite)
+
+A Quasar Project
+
+## Install the dependencies
+```bash
+yarn
+# or
+npm install
+```
+
+## env file
+```bash
+cp .env.example .env
+```
+
+### Start the app in development mode (hot-code reloading, error reporting, etc.)
+```bash
+yarn ssr
+```
+
+
+### Lint the files
+```bash
+yarn lint
+# or
+npm run lint
+```
+
+
+
+### Build the app for production (ssr)
+```bash
+yarn ci
+yarn build:ssr
+cd dist/ssr
+yarn install
+yarn start
+```
+
+### Customize the configuration
+See [Configuring quasar.config.js](https://v2.quasar.dev/quasar-cli-vite/quasar-config-js).

+ 17 - 0
docker-compose.yml

@@ -0,0 +1,17 @@
+version: "3.3"
+services:
+  nextjs:
+    build: ./
+    network_mode: "host"
+    restart: "always"
+  nginx:
+    build: ./nginx
+    network_mode: "host"
+    volumes:
+      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
+    depends_on:
+      - nextjs
+#    ports:
+#      - "8081:80"
+#    ports:
+#      - "${NGINX_PORT}:80"

+ 17 - 0
index.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="format-detection" content="telephone=no">
+    <meta name="msapplication-tap-highlight" content="no">
+    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">
+    <link rel="icon" type="image/png" sizes="16x16" href="https://nodes.alaatv.com/upload/alaa-logo-favicon.png">
+    <link rel="icon" type="image/png" sizes="128x128" href="https://nodes.alaatv.com/upload/alaa-logo-favicon.png">
+    <link rel="icon" type="image/png" sizes="96x96" href="https://nodes.alaatv.com/upload/alaa-logo-favicon.png">
+    <link rel="icon" type="image/png" sizes="32x32" href="https://nodes.alaatv.com/upload/alaa-logo-favicon.png">
+    <link rel="icon" type="image/ico" href="https://nodes.alaatv.com/upload/alaa-logo.png">
+  </head>
+  <body>
+    <!-- quasar:entry-point -->
+  </body>
+</html>

+ 39 - 0
jsconfig.json

@@ -0,0 +1,39 @@
+{
+  "compilerOptions": {
+    "baseUrl": ".",
+    "paths": {
+      "src/*": [
+        "src/*"
+      ],
+      "app/*": [
+        "*"
+      ],
+      "components/*": [
+        "src/components/*"
+      ],
+      "layouts/*": [
+        "src/layouts/*"
+      ],
+      "pages/*": [
+        "src/pages/*"
+      ],
+      "assets/*": [
+        "src/assets/*"
+      ],
+      "boot/*": [
+        "src/boot/*"
+      ],
+      "stores/*": [
+        "src/stores/*"
+      ],
+      "vue$": [
+        "node_modules/vue/dist/vue.runtime.esm-bundler.js"
+      ]
+    }
+  },
+  "exclude": [
+    "dist",
+    ".quasar",
+    "node_modules"
+  ]
+}

+ 21 - 0
nginx/Dockerfile

@@ -0,0 +1,21 @@
+FROM nginx:1.23.2-alpine
+
+# Remove any existing config files
+RUN rm /etc/nginx/conf.d/*
+
+# Copy config files
+# *.conf files in "conf.d/" dir get included in main config
+COPY ./default.conf /etc/nginx/conf.d/
+#COPY ./default.conf /etc/nginx/nginx.conf
+
+## Remove default nginx index page
+#RUN rm -rf /usr/share/nginx/html/*
+
+## Copy from the stahg 1
+#COPY --from=builder /usr/app/dist/ssr /usr/share/nginx/html
+
+# Expose the listening port
+EXPOSE 80
+
+# Launch NGINX
+CMD [ "nginx", "-g", "daemon off;" ]

+ 102 - 0
nginx/default.conf

@@ -0,0 +1,102 @@
+# Cache zone
+proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off;
+
+upstream nextjs {
+  server 127.0.0.1:3000;
+}
+
+server {
+  listen 80 default_server;
+
+  server_name _;
+
+  server_tokens off;
+
+  gzip on;
+  gzip_proxied any;
+  gzip_comp_level 4;
+  gzip_types text/css application/javascript image/svg+xml;
+
+  proxy_http_version 1.1;
+  proxy_set_header Upgrade $http_upgrade;
+  proxy_set_header Connection 'upgrade';
+  proxy_set_header Host $host;
+  proxy_cache_bypass $http_upgrade;
+
+    location /ping {
+        return 200 'ssl-nginx-PONG!: $http_upgrade';
+        add_header Content-Type text/plain;
+    }
+
+#   # BUILT ASSETS (E.G. JS BUNDLES)
+#   # Browser cache - max cache headers from Next.js as build id in url
+#   # Server cache - valid forever (cleared after cache "inactive" period)
+#   location /_next/static {
+#     proxy_cache STATIC;
+#     proxy_pass http://nextjs;
+#   }
+#
+#   # STATIC ASSETS (E.G. IMAGES)
+#   # Browser cache - "no-cache" headers from Next.js as no build id in url
+#   # Server cache - refresh regularly in case of changes
+#   location /static {
+#     proxy_cache STATIC;
+#     proxy_ignore_headers Cache-Control;
+#     proxy_cache_valid 60m;
+#     proxy_pass http://nextjs;
+#   }
+
+  # DYNAMIC ASSETS - NO CACHE
+  location / {
+    proxy_pass http://nextjs;
+  }
+
+  location ~ ^/alaa/api/v2/(.*)$ {
+      proxy_redirect off;
+      proxy_pass_request_headers on;
+      proxy_pass http://192.168.8.12:700/api/v2/$1?$query_string;
+  }
+
+  location ~ ^/alaa/api/v1/(.*)$ {
+      proxy_redirect off;
+      proxy_pass_request_headers on;
+      proxy_pass http://192.168.8.12:700/api/v1/$1?$query_string;
+  }
+#
+#   location /socket.io {
+#       proxy_redirect off;
+#       proxy_pass_request_headers on;
+#       proxy_set_header Upgrade $http_upgrade;
+#       proxy_set_header Connection "upgrade";
+#       proxy_pass https://80.210.26.206:501;
+#   }
+#
+#   location /register-service-worker.js {
+#       etag on;
+#       expires 600s;
+#       add_header Cache-Control "public, no-transform";
+#       try_files $uri $uri/ /register-service-worker.js;
+#   }
+#
+#   location /firebase-messaging-sw.js {
+#       etag on;
+#       expires 600s;
+#       add_header Cache-Control "public, no-transform";
+#       try_files $uri $uri/ /firebase-messaging-sw.js;
+#   }
+#
+#   location ~* \.(js|css)$ {
+#       etag on;
+#       expires 600s;
+#       add_header Cache-Control "public, no-transform";
+#       try_files $uri $uri/ /index.html?$query_string;
+#   }
+#
+#   location ~* \.(ico|woff|woff2|ttf|svg|png|map|eot)$ {
+#       etag on;
+#       expires 10h;
+#       add_header Cache-Control "public, no-transform";
+#       try_files $uri $uri/ /index.html?$query_string;
+#   }
+
+}

+ 86 - 0
package.json

@@ -0,0 +1,86 @@
+{
+  "name": "alaatv",
+  "version": "0.0.1",
+  "description": "alaatv with vite",
+  "productName": "alaatv",
+  "author": "Ali <aliesmaeeli20@gmail.com>",
+  "private": true,
+  "scripts": {
+    "lint": "eslint --fix --ext .js,.vue ./",
+    "test": "echo \"No test specified\" && exit 0",
+    "dev": "quasar dev",
+    "ssr": "quasar dev -m ssr",
+    "build": "quasar build",
+    "ci": "rm -rf node_modules && yarn install --production --frozen-lockfile",
+    "dev:ssr": "quasar dev -m ssr",
+    "dev:android": "quasar dev -m capacitor -T android",
+    "build:pwa": "quasar build -m pwa",
+    "build:ssr": "quasar build --mode ssr",
+    "pm2start": "pm2 start dist/ssr/index.js",
+    "start:ssr": "yarn ci && yarn build:ssr && cd dist/ssr && yarn install && yarn start"
+  },
+  "dependencies": {
+    "@capacitor/cli": "^5.0.4",
+    "@capacitor/core": "^5.0.4",
+    "@gtm-support/vue-gtm": "^2.0.0",
+    "@nodeguy/server-date": "^4.0.3",
+    "@quasar/app-vite": "^1.4.3",
+    "@quasar/extras": "^1.16.4",
+    "@vue-leaflet/vue-leaflet": "^0.7.0",
+    "autoprefixer": "^10.4.14",
+    "axios": "^1.4.0",
+    "cropperjs": "^1.5.13",
+    "deepmerge": "^4.3.1",
+    "dotenv": "^16.0.3",
+    "eslint": "8.22.0",
+    "eslint-config-standard": "^17.0.0",
+    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-n": "^15.6.0",
+    "eslint-plugin-promise": "^6.1.1",
+    "eslint-plugin-vue": "^9.9.0",
+    "express-requests-logger": "^4.0.0",
+    "firebase": "^9.23.0",
+    "fs": "^0.0.1-security",
+    "fslightbox-vue": "^2.0.2",
+    "js-abstract-model": "^0.1.32",
+    "leaflet": "^1.9.3",
+    "moment": "^2.29.4",
+    "moment-jalaali": "^0.9.6",
+    "postcss": "^8.4.21",
+    "postcss-rtlcss": "^4.0.4",
+    "process": "^0.11.10",
+    "quasar": "^2.12.0",
+    "quasar-app-extension-q-page-builder": "^0.1.44",
+    "quasar-crud": "^0.3.31",
+    "quasar-form-builder": "^0.1.98",
+    "quasar-template-builder": "^1.0.23",
+    "quasar-ui-q-page-builder": "^0.1.44",
+    "socket.io-client": "^4.6.1",
+    "sticky-sidebar-v2": "^1.1.1",
+    "video.js": "^8.3.0",
+    "videojs-brand": "^0.0.4",
+    "videojs-contrib-quality-levels": "^3.0.0",
+    "videojs-hls-quality-selector": "^1.1.4",
+    "vue": "^3.2.47",
+    "vue-advanced-cropper": "^2.8.8",
+    "vue-dragscroll": "^4.0.5",
+    "vue-router": "^4.1.6",
+    "vue3-carousel": "^0.3.1",
+    "vue3-otp-input": "^0.4.1",
+    "vuex": "^4.1.0",
+    "vuex-persistedstate": "^4.1.0",
+    "workbox-build": "^7.0.0",
+    "workbox-cacheable-response": "^7.0.0",
+    "workbox-core": "^7.0.0",
+    "workbox-expiration": "^7.0.0",
+    "workbox-precaching": "^7.0.0",
+    "workbox-routing": "^7.0.0",
+    "workbox-strategies": "^7.0.0",
+    "workbox-window": "^7.0.0"
+  },
+  "engines": {
+    "node": "^19 || ^18 || ^16 || ^14.19",
+    "npm": ">= 6.13.4",
+    "yarn": ">= 1.21.1"
+  }
+}

+ 27 - 0
postcss.config.js

@@ -0,0 +1,27 @@
+/* eslint-disable */
+// https://github.com/michael-ciniawsky/postcss-load-config
+
+module.exports = {
+  plugins: [
+    // https://github.com/postcss/autoprefixer
+    require('autoprefixer')({
+      overrideBrowserslist: [
+        'last 4 Chrome versions',
+        'last 4 Firefox versions',
+        'last 4 Edge versions',
+        'last 4 Safari versions',
+        'last 4 Android versions',
+        'last 4 ChromeAndroid versions',
+        'last 4 FirefoxAndroid versions',
+        'last 4 iOS versions'
+      ]
+    }),
+
+    // https://github.com/elchininet/postcss-rtlcss
+    // If you want to support RTL css, then
+    // 1. yarn/npm install postcss-rtlcss
+    // 2. optionally set quasar.config.js > framework > lang to an RTL language
+    // 3. uncomment the following line:
+    require('postcss-rtlcss')
+  ]
+}

BIN
public/assets/images/admin/layout/admin-logo.png


BIN
public/assets/images/auth/login-image-left.png


BIN
public/assets/images/auth/login-image-right.png


BIN
public/assets/images/web/homepage-first-section-background.png


BIN
public/assets/images/web/homepage-first-section-logo.png


BIN
public/assets/images/web/user-top-menu-logo.png


BIN
public/favicon.ico


+ 51 - 0
public/firebase-messaging-sw.js

@@ -0,0 +1,51 @@
+// eslint-disable-next-line
+importScripts('https://www.gstatic.com/firebasejs/8.2.4/firebase-app.js');
+// eslint-disable-next-line
+importScripts('https://www.gstatic.com/firebasejs/8.2.4/firebase-messaging.js');
+
+const firebaseConfig = {
+  apiKey: 'AIzaSyCaNMtlSmxykF-yZoTGGU6fRFOR_U9koBU',
+  authDomain: 'testalaa-3a227.firebaseapp.com',
+  projectId: 'testalaa-3a227',
+  storageBucket: 'testalaa-3a227.appspot.com',
+  messagingSenderId: '844877992016',
+  appId: '1:844877992016:web:9d1143b2d68150a5264155',
+  measurementId: 'G-14ZKWSMWNN'
+}
+
+// // Import the functions you need from the SDKs you need
+// import { initializeApp } from 'firebase/app'
+// import { getMessaging } from 'firebase/messaging'
+// // TODO: Add SDKs for Firebase products that you want to use
+// // https://firebase.google.com/docs/web/setup#available-libraries
+// // Initialize Firebase
+// const app = initializeApp(firebaseConfig)
+// // Initialize Firebase Cloud Messaging and get a reference to the service
+// const messaging = getMessaging(app)
+
+// eslint-disable-next-line
+firebase.initializeApp(firebaseConfig)
+// eslint-disable-next-line
+const messaging = firebase.messaging()
+
+messaging.getToken({ vapidKey: 'BO_z4fxtwD_L-TTQMh3OE7iIX77M2jezra4Kj7x9dI_nE8_OdLtmxUhJrvTOtS9sSClKqe1pEMA6gLNJr8sdfPY' })
+  .then((currentToken) => {
+    if (currentToken) {
+      // eslint-disable-next-line
+      console.warn('client token', currentToken)
+      const channel = new BroadcastChannel('sw-fcm-token')
+      channel.postMessage({ title: 'Hello from SW', fcm: currentToken })
+    } else {
+      // Show permission request UI
+      const channel = new BroadcastChannel('sw-permission-request')
+      channel.postMessage()
+      // eslint-disable-next-line
+      console.log('No registration token available. Request permission to generate one.')
+      // ...
+    }
+  })
+  .catch((err) => {
+    // eslint-disable-next-line
+    console.warn('An error occurred while retrieving token. ', err)
+    // ...
+  })

BIN
public/icons/apple-icon-120x120.png


BIN
public/icons/apple-icon-152x152.png


BIN
public/icons/apple-icon-167x167.png


BIN
public/icons/apple-icon-180x180.png


BIN
public/icons/favicon-128x128.png


BIN
public/icons/favicon-16x16.png


BIN
public/icons/favicon-32x32.png


BIN
public/icons/favicon-96x96.png


BIN
public/icons/icon-128x128.png


BIN
public/icons/icon-144x144.png


BIN
public/icons/icon-152x152.png


BIN
public/icons/icon-192x192.png


BIN
public/icons/icon-384x384.png


BIN
public/icons/icon-48x48.png


BIN
public/icons/icon-512x512.png


BIN
public/icons/icon-72x72.png


BIN
public/icons/icon-96x96.png


BIN
public/icons/ms-icon-144x144.png


ファイルの差分が大きいため隠しています
+ 0 - 0
public/icons/safari-pinned-tab.svg


BIN
public/img/QuestionBank/toolbar-back-ground.png


BIN
public/img/mapMarker.png


ファイルの差分が大きいため隠しています
+ 15 - 0
public/najva-messaging-sw.js


+ 483 - 0
quasar.config.js

@@ -0,0 +1,483 @@
+/* eslint-env node */
+
+/*
+ * This file runs in a Node context (it's NOT transpiled by Babel), so use only
+ * the ES6 features that are supported by your Node version. https://node.green/
+ */
+
+// Configuration for your app
+// https://v2.quasar.dev/quasar-cli-vite/quasar-config-js
+
+/* eslint-env node */
+// const ESLintPlugin = require('eslint-webpack-plugin')
+const { configure } = require('quasar/wrappers')
+// const path = require('path')
+const { generateWidgetList } = require('./src/widgetListGetter/index')
+require('dotenv').config()
+
+module.exports = configure(function (ctx) {
+  return {
+    // https://v2.quasar.dev/quasar-cli/supporting-ts
+    // supportTS: false,
+
+    eslint: {
+      // fix: true,
+      // include = [],
+      // exclude = [],
+      // rawOptions = {},
+      warnings: true,
+      errors: true
+    },
+
+    // https://v2.quasar.dev/quasar-cli/prefetch-feature
+    preFetch: true,
+
+    // app boot file (/src/boot)
+    // --> boot files are part of "main.js"
+    // https://v2.quasar.dev/quasar-cli/boot-files
+    boot: [
+      'VuexPersistedState', // load store from localstorage to use in other boots (ex: accessToken in axios boot)
+      // 'i18n',
+      'icon',
+      'axios',
+      'appConfig',
+      'middleware',
+      'bus',
+      'breadcrumbs',
+      'api-gateway',
+      'registerQPageBuilder',
+      'routesLayoutConfigs',
+      'GetRouteSettingFromServer',
+      'enums',
+      'gtm'
+    ],
+
+    // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css
+    css: [
+      'app.scss'
+    ],
+
+    // https://github.com/quasarframework/quasar/tree/dev/extras
+    extras: [
+      // 'ionicons-v4',
+      // 'mdi-v6',
+      // 'mdi-v5',
+      // 'fontawesome-v6',
+      // 'ionicons-v4',
+      // 'eva-icons',
+      // 'themify',
+      // 'line-awesome',
+      // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both!
+
+      // 'roboto-font', // optional, you are not bound to it
+      'material-icons' // optional, you are not bound to it
+    ],
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#build
+    build: {
+      vueRouterMode: 'history', // available values: 'hash', 'history'
+      productName: 'آموزش مجازی آلاء',
+      transpile: true,
+      // Add dependencies for transpiling with Babel (Array of string/regex)
+      // (from node_modules, which are by default not transpiled).
+      // Applies only if "transpile" is set to true.
+      transpileDependencies: [
+        'js-abstract-model',
+        'quasar-template-builder',
+        'quasar-ui-q-page-builder'
+      ],
+
+      rtl: true, // https://v2.quasar.dev/options/rtl-support
+      preloadChunks: true,
+      showProgress: false,
+      sourcemap: false,
+      gzip: true,
+      analyze: false,
+
+      env: process.env,
+
+      // https://v2.quasar.dev/quasar-cli/handling-webpack
+      // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
+      // chainWebpack (chain, { isServer, isClient }) {
+      //   // const hashh = '[id].[name].[chunkhash]'
+      //   // chain.output.filename('js/[name]/' + hashh + '.bundle.js')
+      //   // chain.output.chunkFilename('js/[name]/' + hashh + '.chunk.js')
+      //   // chain.plugin('eslint-webpack-plugin')
+      //   //   .use(ESLintPlugin, [{ extensions: ['js', 'vue'] }])
+      //   // chain.module.rule('fonts')
+      //   //   .use('url-loader')
+      //   //   .tap((options) => {
+      //   //     options.name = 'fonts/[path][name].[ext]'
+      //   //     return options
+      //   //   })
+      //
+      //   // disable cache for prod only, remove the if to disable it everywhere
+      //   // if (process.env.NODE_ENV === 'production') {
+      //   chain.module.rule('vue').uses.delete('cache-loader')
+      //   chain.module.rule('js').uses.delete('cache-loader')
+      //   chain.module.rule('ts').uses.delete('cache-loader')
+      //   chain.module.rule('tsx').uses.delete('cache-loader')
+      //   // }
+      //
+      //   // chain.plugin('friendly-errors').tap(args => {
+      //   //   // the actual transformer defined by vue-cli-3
+      //   //   const vueCli3Transformer = args[0].additionalTransformers[0]
+      //   //   args[0].additionalTransformers = [
+      //   //     // use the actual transformer
+      //   //     vueCli3Transformer,
+      //   //     // add an other transformer that 'empty' the desired error
+      //   //     error => {
+      //   //       const regexp = /\[mini-css-extract-plugin\]\nConflicting order between:/
+      //   //       if (regexp.test(error.message)) return {}
+      //   //       return error
+      //   //     }
+      //   //   ]
+      //   //   return args
+      //   // })
+      // },
+      // extendWebpack (cfg, { isServer, isClient }) {
+      //   cfg.resolve.alias = {
+      //     ...cfg.resolve.alias, // This adds the existing alias
+      //
+      //     root: path.resolve(__dirname, './src'),
+      //     // '@': path.resolve(__dirname,'./src'),
+      //     // '~': path.resolve(__dirname, './src'),
+      //
+      //     // This will make sure that the hosting test app is pointing to only one instance of vue.
+      //     vue: path.resolve(__dirname, './node_modules/vue')
+      //     // vue: path.resolve('./node_modules/vue')
+      //   }
+      //
+      //   cfg.watchOptions = {
+      //     aggregateTimeout: 200,
+      //     poll: 1000
+      //   }
+      //   cfg.optimization.splitChunks.minSize = 10000
+      //   cfg.optimization.splitChunks.maxSize = 250000
+      //
+      //   // cfg.plugins.push(new CopyWebpackPlugin({
+      //   //   patterns: [
+      //   //     {
+      //   //       // from: './src-pwa/firebase-messaging-sw.js',
+      //   //       from: path.resolve('./src/ServiceWorker/firebase-messaging-sw.js'),
+      //   //       to: path.resolve('./dist/pwa/firebase-messaging-sw.js')
+      //   //     }
+      //   //   ]
+      //   // }))
+      // },
+      beforeDev({ quasarConf }) {
+        generateWidgetList('./src/components/Widgets')
+      },
+      beforeBuild({ quasarConf }) {
+        generateWidgetList('./src/components/Widgets')
+      },
+
+      target: {
+        browser: ['es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1'],
+        node: 'node16'
+      },
+      minify: true,
+      polyfillModulePreload: true,
+
+      extendViteConf(viteConf) {
+        // viteConf.resolve = {
+        //   alias: {
+        //     src: path.resolve(__dirname, './src'),
+        //     boot: path.resolve(__dirname, './src/boot'),
+        //     app: path.resolve(__dirname, './'),
+        //     layouts: path.resolve(__dirname, './src/layouts'),
+        //     pages: path.resolve(__dirname, './src/pages'),
+        //     assets: path.resolve(__dirname, './src/assets'),
+        //     mixin: path.resolve(__dirname, './src/mixin'),
+        //     components: path.resolve(__dirname, './src/components'),
+        //     models: path.resolve(__dirname, './src/models'),
+        //     plugins: path.resolve(__dirname, './src/plugins'),
+        //     router: path.resolve(__dirname, './src/router'),
+        //     css: path.resolve(__dirname, './src/css'),
+        //     api: path.resolve(__dirname, './src/api')
+        //   },
+        //   extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
+        //   dedupe: [
+        //     'vue'
+        //   ]
+        // }
+      },
+      vitePlugins: [
+        // ['@intlify/vite-plugin-vue-i18n', {
+        //   // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
+        //   compositionOnly: false,
+        //
+        //   // you need to set i18n resource including paths !
+        //   include: path.resolve(__dirname, './src/i18n/**')
+        // }]
+        // require('@originjs/vite-plugin-commonjs').esbuildCommonjs(['minio'])
+
+        // [
+        //   require('@intlify/unplugin-vue-i18n').default,
+        //   {
+        //     // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
+        //     // compositionOnly: false,
+        //
+        //     // you need to set i18n resource including paths !
+        //     include: path.resolve(__dirname, './src/i18n/**')
+        //   }
+        // ]
+      ]
+    },
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#devServer
+    devServer: {
+      https: true,
+      port: 8083,
+      open: true, // opens browser window automatically
+      proxy: {
+        [process.env.APP_API]: {
+          target: process.env.APP_API_SERVER,
+          changeOrigin: true,
+          secure: false,
+          rewrite: (path) => path.replace(new RegExp('^' + process.env.APP_API), '') // vite
+        }
+      }
+    },
+
+    // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#framework
+    framework: {
+      config: {
+        notify: {
+          timeout: 5000,
+          position: 'top',
+          // multiLine: true,
+          classes: 'default-notify-class'
+        },
+        capacitor: {
+          iosStatusBarPadding: true, // add the dynamic top padding on iOS mobile devices
+
+          // Quasar handles app exit on mobile phone back button.
+          // backButtonExit: true/false/'*'/['/login', '/home', '/my-page'],
+
+          // On the other hand, the following completely
+          // disables Quasar's back button management.
+          backButton: true
+        }
+      },
+      cssAddon: true,
+
+      iconSet: 'material-icons', // Quasar icon set
+      lang: 'fa', // Quasar language pack (en-US)
+
+      // For special cases outside of where the auto-import strategy can have an impact
+      // (like functional components as one of the examples),
+      // you can manually specify Quasar components/directives to be available everywhere:
+      //
+      // components: [],
+      // directives: [],
+
+      // Quasar plugins
+      plugins: [
+        'Meta',
+        'Notify',
+        'Loading',
+        'Dialog',
+        'Cookies' // for cart
+      ]
+    },
+
+    // animations: 'all', // --- includes all animations
+    // https://v2.quasar.dev/options/animations
+    animations: [],
+    // animations: 'all',
+
+    // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#property-sourcefiles
+    sourceFiles: {
+    //   rootComponent: 'src/App.vue',
+    //   router: 'src/router/index',
+    //   store: 'src/store/index',
+
+      pwaRegisterServiceWorker: 'src-pwa/register-service-worker',
+      pwaServiceWorker: 'src-pwa/custom-service-worker',
+      pwaManifestFile: 'src-pwa/manifest.json'
+
+    //   electronMain: 'src-electron/electron-main',
+    //   electronPreload: 'src-electron/electron-preload'
+    },
+
+    // https://v2.quasar.dev/quasar-cli/developing-ssr/configuring-ssr
+    ssr: {
+      // ssrPwaHtmlFilename: 'offline.html', // do NOT use index.html as name!
+      // will mess up SSR
+
+      // extendSSRWebserverConf (esbuildConf) {},
+      // extendPackageJson (json) {},
+
+      pwa: true,
+
+      // manualStoreHydration: true,
+      // manualPostHydrationTrigger: true,
+
+      prodPort: process.env.SSR_PORT, // The default port that the production server should use
+      // (gets superseded if process.env.PORT is specified at runtime)
+
+      // maxAge: 1000 * 60 * 60 * 24 * 30,
+      maxAge: 1,
+      // Tell browser when a file from the server should expire from cache (in ms)
+
+      // chainWebpackWebserver (chain) {
+      //   chain.plugin('eslint-webpack-plugin')
+      //     .use(ESLintPlugin, [{ extensions: ['js'] }])
+      //   // disable cache for prod only, remove the if to disable it everywhere
+      //   // if (process.env.NODE_ENV === 'production') {
+      //   chain.module.rule('vue').uses.delete('cache-loader')
+      //   chain.module.rule('js').uses.delete('cache-loader')
+      //   chain.module.rule('ts').uses.delete('cache-loader')
+      //   chain.module.rule('tsx').uses.delete('cache-loader')
+      //   // }
+      // },
+
+      middlewares: [
+        ctx.prod ? 'compression' : '',
+        'render' // keep this as last one
+      ]
+    },
+
+    // https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa
+    pwa: {
+      workboxMode: 'injectManifest', // 'generateSW' or 'injectManifest'
+      injectPwaMetaTags: true,
+      swFilename: 'sw.js',
+      manifestFilename: 'manifest.json',
+      useCredentialsForManifestTag: false,
+      manifest: {
+        name: 'مدرسه آنلاین آلاء',
+        short_name: 'آلاء',
+        start_url: '/',
+        background_color: '#FFFFFF',
+        theme_color: '#ffc107',
+        description: 'آموزش مجازی آلاء',
+        display: 'standalone',
+        orientation: 'portrait',
+        icons: [
+          {
+            src: 'icons/icon-72x72.png',
+            sizes: '72x72',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-96x96.png',
+            sizes: '96x96',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-128x128.png',
+            sizes: '128x128',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-144x144.png',
+            sizes: '144x144',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-152x152.png',
+            sizes: '152x152',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-192x192.png',
+            sizes: '192x192',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-384x384.png',
+            sizes: '384x384',
+            type: 'image/png',
+            purpose: 'maskable any'
+          },
+          {
+            src: 'icons/icon-512x512.png',
+            sizes: '512x512',
+            type: 'image/png',
+            purpose: 'maskable any'
+          }
+        ]
+      },
+      extendGenerateSWOptions (cfg) {
+        cfg.skipWaiting = false
+        cfg.clientsClaim = false
+      }
+    },
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova
+    cordova: {
+      // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing
+    },
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor
+    capacitor: {
+      // (Optional!)
+      hideSplashscreen: false, // disables auto-hiding the Splashscreen by Quasar CLI
+
+      // (Optional!)
+      capacitorCliPreparationParams: ['sync', ctx.targetName]
+    },
+    bin: {
+      linuxAndroidStudio: process.env.LINUX_ANDROID_STUDIO
+    },
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli/developing-electron-apps/configuring-electron
+    electron: {
+      // extendElectronMainConf (esbuildConf)
+      // extendElectronPreloadConf (esbuildConf)
+
+      inspectPort: 5858,
+
+      bundler: 'packager', // 'packager' or 'builder'
+
+      packager: {
+        // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
+
+        // OS X / Mac App Store
+        // appBundleId: '',
+        // appCategoryType: '',
+        // osxSign: '',
+        // protocol: 'myapp://path',
+
+        // Windows only
+        // win32metadata: { ... }
+      },
+
+      builder: {
+        // https://www.electron.build/configuration/configuration
+
+        appId: 'alaatv-front-vite'
+      }
+
+      // // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
+      // chainWebpackMain (chain) {
+      //   chain.plugin('eslint-webpack-plugin')
+      //     .use(ESLintPlugin, [{ extensions: ['js'] }])
+      // },
+
+      // // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
+      // chainWebpackPreload (chain) {
+      //   chain.plugin('eslint-webpack-plugin')
+      //     .use(ESLintPlugin, [{ extensions: ['js'] }])
+      // }
+    },
+
+    // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex
+    bex: {
+      contentScripts: [
+        'my-content-script'
+      ]
+
+      // extendBexScriptsConf (esbuildConf) {}
+      // extendBexManifestJson (json) {}
+    }
+  }
+})

+ 3 - 0
quasar.extensions.json

@@ -0,0 +1,3 @@
+{
+  "q-page-builder": {}
+}

+ 101 - 0
src-capacitor/android/.gitignore

@@ -0,0 +1,101 @@
+# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
+
+# Built application files
+*.apk
+*.aar
+*.ap_
+*.aab
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+out/
+#  Uncomment the following line in case you need and you don't have the release build type files in your app
+# release/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation/
+
+# Android Studio captures folder
+captures/
+
+# IntelliJ
+*.iml
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/gradle.xml
+.idea/assetWizardSettings.xml
+.idea/dictionaries
+.idea/libraries
+# Android Studio 3 in .gitignore file.
+.idea/caches
+.idea/modules.xml
+# Comment next line if keeping position of elements in Navigation Editor is relevant for you
+.idea/navEditor.xml
+
+# Keystore files
+# Uncomment the following lines if you do not want to check your keystore files in.
+#*.jks
+#*.keystore
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
+.cxx/
+
+# Google Services (e.g. APIs or Firebase)
+# google-services.json
+
+# Freeline
+freeline.py
+freeline/
+freeline_project_description.json
+
+# fastlane
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots
+fastlane/test_output
+fastlane/readme.md
+
+# Version control
+vcs.xml
+
+# lint
+lint/intermediates/
+lint/generated/
+lint/outputs/
+lint/tmp/
+# lint/reports/
+
+# Android Profiling
+*.hprof
+
+# Cordova plugins for Capacitor
+capacitor-cordova-android-plugins
+
+# Copied web assets
+app/src/main/assets/public
+
+# Generated Config files
+app/src/main/assets/capacitor.config.json
+app/src/main/assets/capacitor.plugins.json
+app/src/main/res/xml/config.xml

+ 2 - 0
src-capacitor/android/app/.gitignore

@@ -0,0 +1,2 @@
+/build/*
+!/build/.npmkeep

+ 63 - 0
src-capacitor/android/app/build.gradle

@@ -0,0 +1,63 @@
+apply plugin: 'com.android.application'
+
+android {
+  namespace "ir.sanatisharif.android.konkur96"
+  compileSdkVersion rootProject.ext.compileSdkVersion
+  defaultConfig {
+    applicationId "ir.sanatisharif.android.konkur96"
+    minSdkVersion rootProject.ext.minSdkVersion
+    targetSdkVersion rootProject.ext.targetSdkVersion
+    versionCode 95
+    versionName "6.0.0"
+    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+    aaptOptions {
+      // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
+      // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
+      ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
+    }
+  }
+
+  buildFeatures
+    {
+      dataBinding = true
+    }
+
+  buildTypes {
+    release {
+      minifyEnabled false
+      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+    }
+  }
+}
+
+repositories {
+  flatDir {
+    dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
+  }
+}
+
+dependencies {
+  implementation fileTree(include: ['*.jar'], dir: 'libs')
+  implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
+  implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
+  implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
+  implementation project(':capacitor-android')
+  testImplementation "junit:junit:$junitVersion"
+  androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
+  androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
+  implementation project(':capacitor-cordova-android-plugins')
+
+  //lottie
+  implementation 'com.airbnb.android:lottie:3.6.1'
+}
+
+apply from: 'capacitor.build.gradle'
+
+try {
+  def servicesJSON = file('google-services.json')
+  if (servicesJSON.text) {
+    apply plugin: 'com.google.gms.google-services'
+  }
+} catch (Exception e) {
+  logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
+}

+ 20 - 0
src-capacitor/android/app/capacitor.build.gradle

@@ -0,0 +1,20 @@
+// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
+
+android {
+  compileOptions {
+      sourceCompatibility JavaVersion.VERSION_17
+      targetCompatibility JavaVersion.VERSION_17
+  }
+}
+
+apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
+dependencies {
+    implementation project(':capacitor-app')
+    implementation project(':jcesarmobile-ssl-skip')
+
+}
+
+
+if (hasProperty('postBuildExtras')) {
+  postBuildExtras()
+}

+ 21 - 0
src-capacitor/android/app/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 20 - 0
src-capacitor/android/app/release/output-metadata.json

@@ -0,0 +1,20 @@
+{
+  "version": 3,
+  "artifactType": {
+    "type": "APK",
+    "kind": "Directory"
+  },
+  "applicationId": "ir.sanatisharif.android.konkur96",
+  "variantName": "release",
+  "elements": [
+    {
+      "type": "SINGLE",
+      "filters": [],
+      "attributes": [],
+      "versionCode": 1,
+      "versionName": "1.0",
+      "outputFile": "app-release.apk"
+    }
+  ],
+  "elementType": "File"
+}

+ 26 - 0
src-capacitor/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.getcapacitor.myapp;
+
+import static org.junit.Assert.*;
+
+import android.content.Context;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
+        assertEquals("com.getcapacitor.app", appContext.getPackageName());
+    }
+}

+ 48 - 0
src-capacitor/android/app/src/main/AndroidManifest.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <application
+        android:usesCleartextTraffic="true"
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_alaa_launcher"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_alaa_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme.NoActionBar">
+
+        <activity
+            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
+            android:name=".MainActivity"
+            android:label="@string/title_activity_main"
+            android:theme="@style/AppTheme.NoActionBar"
+            android:launchMode="singleTask"
+            android:exported="true">
+
+        </activity>
+
+      <activity
+        android:name="ir.sanatisharif.android.konkur96.SplashScreenActivity"
+        android:theme="@style/AppTheme.NoActionBar"
+        android:exported="true">
+
+        <intent-filter>
+          <action android:name="android.intent.action.MAIN" />
+          <category android:name="android.intent.category.LAUNCHER" />
+        </intent-filter>
+      </activity>
+
+      <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths"></meta-data>
+        </provider>
+    </application>
+
+    <!-- Permissions -->
+
+    <uses-permission android:name="android.permission.INTERNET" />
+</manifest>

BIN
src-capacitor/android/app/src/main/ic_alaa_launcher-playstore.png


+ 34 - 0
src-capacitor/android/app/src/main/java/ir/sanatisharif/android/konkur96/MainActivity.java

@@ -0,0 +1,34 @@
+package ir.sanatisharif.android.konkur96;
+
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+
+import androidx.core.content.ContextCompat;
+
+import com.getcapacitor.BridgeActivity;
+
+public class MainActivity extends BridgeActivity {
+
+  @Override
+  protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setStatusBarColor();
+  }
+
+  private void setStatusBarColor(){
+    Window window = getWindow();
+
+    // clear FLAG_TRANSLUCENT_STATUS flag:
+    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+
+    // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
+    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+
+
+
+    // finally change the color
+    window.setStatusBarColor(ContextCompat.getColor(this,R.color.main_background));
+  }
+}

+ 110 - 0
src-capacitor/android/app/src/main/java/ir/sanatisharif/android/konkur96/SplashScreenActivity.java

@@ -0,0 +1,110 @@
+package ir.sanatisharif.android.konkur96;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+
+import android.animation.Animator;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.airbnb.lottie.LottieAnimationView;
+
+public class SplashScreenActivity extends AppCompatActivity {
+
+    private LottieAnimationView lottieAnimationView ;
+
+    private boolean isShownOnce = false ;
+
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_splash_screen);
+        init();
+    }
+
+    private void init(){
+
+      //setStatusBarColor();
+      setTransparentFullScreen();
+      startMainActivity();
+
+    }
+
+    private void startMainActivity(){
+
+
+      lottieAnimationView = findViewById(R.id.splash_alaa);
+
+      lottieAnimationView.addAnimatorListener(new Animator.AnimatorListener() {
+        @Override
+        public void onAnimationStart(@NonNull Animator animation) {
+
+        }
+
+        @Override
+        public void onAnimationEnd(@NonNull Animator animation) {
+
+          isShownOnce = true ;
+          Intent intent = new Intent(SplashScreenActivity.this , MainActivity.class);
+          startActivity(intent);
+        }
+
+        @Override
+        public void onAnimationCancel(@NonNull Animator animation) {
+
+        }
+
+        @Override
+        public void onAnimationRepeat(@NonNull Animator animation) {
+
+        }
+      });
+
+
+    }
+
+    private void setStatusBarColor(){
+      Window window = getWindow();
+
+      // clear FLAG_TRANSLUCENT_STATUS flag:
+      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+
+      // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
+      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+
+
+      // finally change the color
+      window.setStatusBarColor(ContextCompat.getColor(this,R.color.alaaPrimary));
+    }
+
+    private void setTransparentFullScreen(){
+
+      Window w = getWindow();
+      w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
+
+    }
+
+
+    /*
+    * the isShownOnce boolean is for when user started the app
+    * and seen the splash screen launcher then after searching
+    * in app wants to exit the app not going back to splash again!
+    *  */
+
+  @Override
+  protected void onResume() {
+    super.onResume();
+    if (isShownOnce){
+      finish();
+      System.exit(0);
+    }
+  }
+
+
+
+}

+ 74 - 0
src-capacitor/android/app/src/main/res/drawable/ic_alaa_launcher_background.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+    android:height="108dp"
+    android:width="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108"
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#3DDC84"
+          android:pathData="M0,0h108v108h-108z"/>
+    <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+</vector>

+ 12 - 0
src-capacitor/android/app/src/main/res/layout/activity_main.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity">
+
+    <WebView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 20 - 0
src-capacitor/android/app/src/main/res/layout/activity_splash_screen.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true"
+    tools:context=".SplashScreenActivity">
+
+  <com.airbnb.lottie.LottieAnimationView
+    android:id="@+id/splash_alaa"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:scaleType="fitXY"
+    app:lottie_autoPlay="true"
+    app:lottie_loop="false"
+    app:lottie_speed="1"
+    app:lottie_rawRes="@raw/alaa_splash" />
+
+</androidx.appcompat.widget.LinearLayoutCompat>

+ 5 - 0
src-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_alaa_launcher.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_alaa_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_alaa_launcher_foreground"/>
+</adaptive-icon>

+ 5 - 0
src-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_alaa_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_alaa_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_alaa_launcher_foreground"/>
+</adaptive-icon>

BIN
src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher.png


BIN
src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher_foreground.png


BIN
src-capacitor/android/app/src/main/res/mipmap-hdpi/ic_alaa_launcher_round.png


BIN
src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher.png


BIN
src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher_foreground.png


BIN
src-capacitor/android/app/src/main/res/mipmap-mdpi/ic_alaa_launcher_round.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher_foreground.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_alaa_launcher_round.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher_foreground.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_alaa_launcher_round.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher_foreground.png


BIN
src-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_alaa_launcher_round.png


ファイルの差分が大きいため隠しています
+ 0 - 0
src-capacitor/android/app/src/main/res/raw/alaa_splash.json


+ 5 - 0
src-capacitor/android/app/src/main/res/values/colors.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+  <color name="alaaPrimary">#FFCA29</color>
+  <color name="main_background">#F6F7FB</color>
+</resources>

+ 4 - 0
src-capacitor/android/app/src/main/res/values/ic_launcher_background.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="ic_launcher_background">#FFFFFF</color>
+</resources>

+ 7 - 0
src-capacitor/android/app/src/main/res/values/strings.xml

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+    <string name="app_name">alaatv</string>
+    <string name="title_activity_main">alaatv</string>
+    <string name="package_name">ir.sanatisharif.android.konkur96</string>
+    <string name="custom_url_scheme">ir.sanatisharif.android.konkur96</string>
+</resources>

+ 23 - 0
src-capacitor/android/app/src/main/res/values/styles.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/alaaPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+        //style for light status bar
+        <item name="android:windowLightStatusBar">true</item>
+    </style>
+
+
+
+  <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar">
+    <item name="windowActionBar">false</item>
+    <item name="windowNoTitle">true</item>
+    <item name="android:windowLightStatusBar">true</item>
+    <item name="android:background">@color/alaaPrimary</item>
+  </style>
+
+</resources>

+ 5 - 0
src-capacitor/android/app/src/main/res/xml/file_paths.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+    <external-path name="my_images" path="." />
+    <cache-path name="my_cache_images" path="." />
+</paths>

+ 18 - 0
src-capacitor/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java

@@ -0,0 +1,18 @@
+package com.getcapacitor.myapp;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 29 - 0
src-capacitor/android/build.gradle

@@ -0,0 +1,29 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+    repositories {
+        google()
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:8.0.0'
+        classpath 'com.google.gms:google-services:4.3.15'
+
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
+
+apply from: "variables.gradle"
+
+allprojects {
+    repositories {
+        google()
+        mavenCentral()
+    }
+}
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}

+ 9 - 0
src-capacitor/android/capacitor.settings.gradle

@@ -0,0 +1,9 @@
+// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
+include ':capacitor-android'
+project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')
+
+include ':capacitor-app'
+project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android')
+
+include ':jcesarmobile-ssl-skip'
+project(':jcesarmobile-ssl-skip').projectDir = new File('../node_modules/@jcesarmobile/ssl-skip/android')

+ 22 - 0
src-capacitor/android/gradle.properties

@@ -0,0 +1,22 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true

BIN
src-capacitor/android/gradle/wrapper/gradle-wrapper.jar


+ 6 - 0
src-capacitor/android/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
+networkTimeout=10000
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists

+ 244 - 0
src-capacitor/android/gradlew

@@ -0,0 +1,244 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"

+ 92 - 0
src-capacitor/android/gradlew.bat

@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 5 - 0
src-capacitor/android/settings.gradle

@@ -0,0 +1,5 @@
+include ':app'
+include ':capacitor-cordova-android-plugins'
+project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
+
+apply from: 'capacitor.settings.gradle'

+ 16 - 0
src-capacitor/android/variables.gradle

@@ -0,0 +1,16 @@
+ext {
+    minSdkVersion = 23
+    compileSdkVersion = 33
+    targetSdkVersion = 33
+    androidxActivityVersion = '1.7.0'
+    androidxAppCompatVersion = '1.6.1'
+    androidxCoordinatorLayoutVersion = '1.2.0'
+    androidxCoreVersion = '1.10.0'
+    androidxFragmentVersion = '1.5.6'
+    coreSplashScreenVersion = '1.0.0'
+    androidxWebkitVersion = '1.6.1'
+    junitVersion = '4.13.2'
+    androidxJunitVersion = '1.1.5'
+    androidxEspressoCoreVersion = '3.5.1'
+    cordovaAndroidVersion = '10.1.1'
+}

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません