From 88d5aa08c145b0fa6983ce3cd06cc811d34b4ee4 Mon Sep 17 00:00:00 2001 From: Tachibana Shin Date: Fri, 8 Mar 2024 21:16:52 +0700 Subject: [PATCH] no commit --- .eslintrc-auto-import.json | 67 ++ .eslintrc.js | 1 + auto-imports.d.ts | 66 ++ components.d.ts | 51 ++ index.html | 2 +- package.json | 4 + pnpm-lock.yaml | 281 ++++++- quasar.config.js | 17 + src/components/BrtPlayer.vue | 15 + .../comments/components/Comment.vue | 77 ++ src/components/comments/components/Reply.vue | 47 ++ src/components/comments/index.vue | 725 ++++++++++++++++++ src/pages/phim/_season.vue | 9 +- tsconfig.json | 2 +- windi.config.ts | 1 + 15 files changed, 1325 insertions(+), 40 deletions(-) create mode 100644 .eslintrc-auto-import.json create mode 100644 auto-imports.d.ts create mode 100644 components.d.ts create mode 100644 src/components/comments/components/Comment.vue create mode 100644 src/components/comments/components/Reply.vue create mode 100644 src/components/comments/index.vue diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 00000000..b2abc8db --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,67 @@ +{ + "globals": { + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "EffectScope": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "computed": true, + "createApp": true, + "customRef": true, + "defineAsyncComponent": true, + "defineComponent": true, + "effectScope": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "inject": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onUnmounted": true, + "onUpdated": true, + "provide": true, + "reactive": true, + "readonly": true, + "ref": true, + "resolveComponent": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "toRaw": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "unref": true, + "useAttrs": true, + "useCssModule": true, + "useCssVars": true, + "useSlots": true, + "watch": true, + "watchEffect": true, + "watchPostEffect": true, + "watchSyncEffect": true + } +} diff --git a/.eslintrc.js b/.eslintrc.js index 1f52301b..a91fc4c1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -41,6 +41,7 @@ module.exports = { // https://github.com/prettier/eslint-config-prettier#installation // usage with Prettier, provided by 'eslint-config-prettier'. "prettier", + './.eslintrc-auto-import.json' ], plugins: [ diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 00000000..d298c3cc --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,66 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const effectScope: typeof import('vue')['effectScope'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useSlots: typeof import('vue')['useSlots'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 00000000..a5c0a3da --- /dev/null +++ b/components.d.ts @@ -0,0 +1,51 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module 'vue' { + export interface GlobalComponents { + AddToPlaylist: typeof import('./src/components/AddToPlaylist.vue')['default'] + ArtDialog: typeof import('./src/components/ArtDialog.vue')['default'] + BottomBlur: typeof import('./src/components/BottomBlur.vue')['default'] + BottomBlurRelative: typeof import('./src/components/BottomBlurRelative.vue')['default'] + BottomSheet: typeof import('./src/components/BottomSheet.vue')['default'] + BrtPlayer: typeof import('./src/components/BrtPlayer.vue')['default'] + Card: typeof import('./src/components/Card.vue')['default'] + CardVertical: typeof import('./src/components/CardVertical.vue')['default'] + ChapsGridQBtn: typeof import('./src/components/ChapsGridQBtn.vue')['default'] + Cloudflare: typeof import('./src/components/errors/cloudflare.vue')['default'] + Comment: typeof import('./src/components/comments/components/Comment.vue')['default'] + Comments: typeof import('./src/components/comments/index.vue')['default'] + DomainStrange: typeof import('./src/components/errors/domain-strange.vue')['default'] + EndOfBackdrop: typeof import('./src/components/EndOfBackdrop.vue')['default'] + EssentialLink: typeof import('./src/components/EssentialLink.vue')['default'] + FragmentChaps: typeof import('./src/components/FragmentChaps.vue')['default'] + GridCard: typeof import('./src/components/GridCard.vue')['default'] + IBxLike: typeof import('~icons/bx/like')['default'] + InfiniteScroll: typeof import('./src/components/pagination/InfiniteScroll.vue')['default'] + ISolarAltArrowDownBold: typeof import('~icons/solar/alt-arrow-down-bold')['default'] + ISolarMenuDotsBold: typeof import('~icons/solar/menu-dots-bold')['default'] + LaodingAnim: typeof import('./src/components/LaodingAnim.vue')['default'] + MessageScheludeChap: typeof import('./src/components/feat/MessageScheludeChap.vue')['default'] + OverScrollX: typeof import('./src/components/OverScrollX.vue')['default'] + Pagination: typeof import('./src/components/pagination/Pagination.vue')['default'] + PanelFixCSR: typeof import('./src/components/PanelFixCSR.vue')['default'] + Quality: typeof import('./src/components/Quality.vue')['default'] + Reply: typeof import('./src/components/comments/components/Reply.vue')['default'] + RequireUpdateExt: typeof import('./src/components/errors/require-update-ext.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + ScreenError: typeof import('./src/components/ScreenError.vue')['default'] + ScreenLoading: typeof import('./src/components/ScreenLoading.vue')['default'] + ScreenNotFound: typeof import('./src/components/ScreenNotFound.vue')['default'] + SkeletonCard: typeof import('./src/components/SkeletonCard.vue')['default'] + SkeletonCardVertical: typeof import('./src/components/SkeletonCardVertical.vue')['default'] + SkeletonGridCard: typeof import('./src/components/SkeletonGridCard.vue')['default'] + Star: typeof import('./src/components/Star.vue')['default'] + SwipableBottom: typeof import('./src/components/SwipableBottom.vue')['default'] + Unknown: typeof import('./src/components/errors/unknown.vue')['default'] + } +} diff --git a/index.html b/index.html index 409a5bd5..b29dab32 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,5 @@ - + <%= productName %> diff --git a/package.json b/package.json index 4f639cce..708a2aa4 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "vue-router": "^4.2.4" }, "devDependencies": { + "@iconify/json": "^2.2.190", "@intlify/vite-plugin-vue-i18n": "^6.0.3", "@quasar/app-vite": "^1.6.2", "@quasar/cli": "^2.2.3", @@ -105,6 +106,9 @@ "semver": "^7.5.4", "tsx": "^3.12.7", "typescript": "^5.3.3", + "unplugin-auto-import": "^0.17.5", + "unplugin-icons": "^0.18.5", + "unplugin-vue-components": "^0.26.0", "vite-plugin-remove-console": "^2.1.1", "vite-plugin-rewrite-all": "^1.0.1", "vite-plugin-windicss": "^1.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 73ce802e..36bafbe5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true @@ -142,6 +142,9 @@ dependencies: version: 4.2.4(vue@3.3.4) devDependencies: + '@iconify/json': + specifier: ^2.2.190 + version: 2.2.190 '@intlify/vite-plugin-vue-i18n': specifier: ^6.0.3 version: 6.0.3(vite@4.4.9)(vue-i18n@9.2.2) @@ -250,6 +253,15 @@ devDependencies: typescript: specifier: ^5.3.3 version: 5.3.3 + unplugin-auto-import: + specifier: ^0.17.5 + version: 0.17.5(@vueuse/core@9.13.0)(rollup@2.79.1) + unplugin-icons: + specifier: ^0.18.5 + version: 0.18.5 + unplugin-vue-components: + specifier: ^0.26.0 + version: 0.26.0(rollup@2.79.1)(vue@3.3.4) vite-plugin-remove-console: specifier: ^2.1.1 version: 2.1.1 @@ -305,10 +317,27 @@ packages: '@jridgewell/trace-mapping': 0.3.19 dev: true + /@antfu/install-pkg@0.1.1: + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true + + /@antfu/install-pkg@0.3.1: + resolution: {integrity: sha512-A3zWY9VeTPnxlMiZtsGHw2lSd3ghwvL8s9RiGOtqvDxhhFfZ781ynsGBa/iUnDJ5zBrmTFQrJDud3TGgRISaxw==} + dependencies: + execa: 8.0.1 + dev: true + /@antfu/utils@0.7.6: resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} dev: true + /@antfu/utils@0.7.7: + resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} + dev: true + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} @@ -2166,9 +2195,29 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@iconify/json@2.2.190: + resolution: {integrity: sha512-ci0/3DQUoRNxuNC8s0rNke5JwsCzWuYfEl4BgOykx3EAWDWMvD8lCenrDiFa04mokzMwSF+jA6I1YjBRGWfyOw==} + dependencies: + '@iconify/types': 2.0.0 + pathe: 1.1.2 + dev: true + /@iconify/types@2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - dev: false + + /@iconify/utils@2.1.22: + resolution: {integrity: sha512-6UHVzTVXmvO8uS6xFF+L/QTSpTzA/JZxtgU+KYGFyDYMEObZ1bu/b5l+zNJjHy+0leWjHI+C0pXlzGvv3oXZMA==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.7 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.5.0 + mlly: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true /@iconify/vue@4.1.1(vue@3.3.4): resolution: {integrity: sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg==} @@ -2999,6 +3048,21 @@ packages: picomatch: 2.3.1 dev: true + /@rollup/pluginutils@5.1.0(rollup@2.79.1): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@sindresorhus/is@0.7.0: resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} engines: {node: '>=4'} @@ -3106,6 +3170,10 @@ packages: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: @@ -3296,7 +3364,6 @@ packages: /@types/web-bluetooth@0.0.16: resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} - dev: false /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.3.3): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} @@ -3570,7 +3637,7 @@ packages: '@vue/reactivity-transform': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.2 + magic-string: 0.30.7 postcss: 8.4.28 source-map-js: 1.0.2 @@ -3609,7 +3676,7 @@ packages: '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.2 + magic-string: 0.30.7 /@vue/reactivity@3.3.4: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} @@ -3660,7 +3727,6 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: false /@vueuse/head@1.3.1(vue@3.3.4): resolution: {integrity: sha512-XCcHGfDzkGlHS7KIPJVYN//L7jpfASLsN7MUE19ndHVQLnPIDxqFLDl7IROsY81PKzawVAUe4OYVWcGixseWxA==} @@ -3676,7 +3742,6 @@ packages: /@vueuse/metadata@9.13.0: resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} - dev: false /@vueuse/router@9.13.0(vue-router@4.2.4)(vue@3.3.4): resolution: {integrity: sha512-lcL6auSUGMGZMdDzZJb02QDe909AChzMXoxqFS3gL2E8mHmIx0SrNor+33UkqvvBPi18vXpDq/R7tPd9fxWwTg==} @@ -3698,7 +3763,6 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: false /@windicss/config@1.9.1: resolution: {integrity: sha512-MjutTiS9XIteriwkH9D+que+bILbpulekYzjJGQDg3Sb2H87aOcO30f7N11ZiHF5OYoZn4yJz4lDbB3A6IuXfQ==} @@ -3713,11 +3777,11 @@ packages: /@windicss/plugin-utils@1.9.1: resolution: {integrity: sha512-sz/Z2sxUZIkJ2nVeTmtYTtXhWxe/yTTkM5nqU6eKhP0n6waipTCJJdLvWoZcgzQBbBCL/JLRQd/9BYsBqKuLDQ==} dependencies: - '@antfu/utils': 0.7.6 + '@antfu/utils': 0.7.7 '@windicss/config': 1.9.1 debug: 4.3.4 fast-glob: 3.3.2 - magic-string: 0.30.2 + magic-string: 0.30.7 micromatch: 4.0.5 windicss: 3.5.6 transitivePeerDependencies: @@ -3745,12 +3809,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 dev: true /acorn-walk@8.3.2: @@ -3764,12 +3828,6 @@ packages: hasBin: true dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -4312,14 +4370,14 @@ packages: /c12@1.6.1: resolution: {integrity: sha512-fAZOi3INDvIbmjuwAVVggusyRTxwNdTAnwLay8IsXwhFzDwPPGzFxzrx6L55CPFGPulUSZI0eyFUvRDXveoE3g==} dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 defu: 6.1.4 dotenv: 16.4.1 giget: 1.2.1 jiti: 1.21.0 mlly: 1.5.0 ohash: 1.1.3 - pathe: 1.1.1 + pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.0.3 rc9: 2.1.1 @@ -4490,6 +4548,21 @@ packages: fsevents: 2.3.3 dev: true + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true @@ -5677,6 +5750,11 @@ packages: engines: {node: '>=10'} dev: true + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + /eslint-config-prettier@8.10.0(eslint@8.47.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true @@ -5966,8 +6044,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -6002,6 +6080,12 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -6606,7 +6690,7 @@ packages: node-fetch-native: 1.6.1 nypm: 0.3.6 ohash: 1.1.3 - pathe: 1.1.1 + pathe: 1.1.2 tar: 6.2.0 dev: true @@ -7685,6 +7769,14 @@ packages: engines: {node: '>=14'} dev: true + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.5.0 + pkg-types: 1.0.3 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -7821,18 +7913,11 @@ packages: sourcemap-codec: 1.4.8 dev: true - /magic-string@0.30.2: - resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - /magic-string@0.30.7: resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} @@ -8544,10 +8629,6 @@ packages: engines: {node: '>=8'} dev: true - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - dev: true - /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true @@ -8659,7 +8740,7 @@ packages: dependencies: jsonc-parser: 3.2.0 mlly: 1.5.0 - pathe: 1.1.1 + pathe: 1.1.2 dev: true /png2icons@2.0.1: @@ -9309,7 +9390,7 @@ packages: engines: {node: '>=8.9.0'} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 dev: true /sax@1.1.4: @@ -9327,6 +9408,10 @@ packages: xmlchars: 2.2.0 dev: true + /scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + dev: true + /seek-bzip@1.0.6: resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} hasBin: true @@ -10296,6 +10381,26 @@ packages: engines: {node: '>=4'} dev: true + /unimport@3.7.1(rollup@2.79.1): + resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + acorn: 8.11.3 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.7 + mlly: 1.5.0 + pathe: 1.1.2 + pkg-types: 1.0.3 + scule: 1.3.0 + strip-literal: 1.3.0 + unplugin: 1.8.3 + transitivePeerDependencies: + - rollup + dev: true + /union-value@2.0.1: resolution: {integrity: sha512-NmcRHHhUy1qWmp6yYWsaURV2qwfS24TmTtO9S9x0L41wCNNVBQFD3toOzO0cd8SsNrFhbw/O0iYO5uffXGYocw==} engines: {node: '>=6'} @@ -10333,6 +10438,101 @@ packages: engines: {node: '>= 0.8'} dev: true + /unplugin-auto-import@0.17.5(@vueuse/core@9.13.0)(rollup@2.79.1): + resolution: {integrity: sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + dependencies: + '@antfu/utils': 0.7.7 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@vueuse/core': 9.13.0(vue@3.3.4) + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.7 + minimatch: 9.0.3 + unimport: 3.7.1(rollup@2.79.1) + unplugin: 1.8.3 + transitivePeerDependencies: + - rollup + dev: true + + /unplugin-icons@0.18.5: + resolution: {integrity: sha512-KVNAohXbZ7tVcG1C3p6QaC7wU9Qrj7etv4XvsMMJAxr5LccQZ+Iuv5LOIv/7GtqXaGN1BuFCqRO1ErsHEgEXdQ==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + dependencies: + '@antfu/install-pkg': 0.3.1 + '@antfu/utils': 0.7.7 + '@iconify/utils': 2.1.22 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.5.0 + unplugin: 1.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /unplugin-vue-components@0.26.0(rollup@2.79.1)(vue@3.3.4): + resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + dependencies: + '@antfu/utils': 0.7.6 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + chokidar: 3.5.3 + debug: 4.3.4 + fast-glob: 3.3.2 + local-pkg: 0.4.3 + magic-string: 0.30.7 + minimatch: 9.0.3 + resolve: 1.22.4 + unplugin: 1.8.3 + vue: 3.3.4 + transitivePeerDependencies: + - rollup + - supports-color + dev: true + + /unplugin@1.8.3: + resolution: {integrity: sha512-ZlLteXGDcyJgsbN2g4sZ3Dw6fpX1O5rjgeaA5MmQhhA2YxnTxsh43f8nDQgFOzcir0iv8GYMjtCV8MtyNnrhEg==} + engines: {node: '>=14.0.0'} + dependencies: + acorn: 8.11.3 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: true + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -10767,6 +10967,15 @@ packages: wildcard: 2.0.1 dev: true + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: true + /well-known-symbols@2.0.0: resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} engines: {node: '>=6'} diff --git a/quasar.config.js b/quasar.config.js index 63dfb0f9..d24c88c2 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -15,6 +15,10 @@ const ISO6391 = require("iso-639-1") const { extend } = require("quasar") const { configure } = require("quasar/wrappers") +const Icons = require("unplugin-icons/vite").default +const IconsResolver = require("unplugin-icons/resolver").default +const Components = require("unplugin-vue-components/vite").default +const AutoImport = require("unplugin-auto-import/vite").default const reg = /[\w-]+(?=\.json$)/ function vitePluginI18nLangs() { @@ -151,6 +155,19 @@ module.exports = configure(function (/* ctx */) { include: path.resolve(__dirname, "./src/i18n/**"), }, ], + [Icons, {}], + [Components, { + resolvers: [IconsResolver({ + prefix: "i" + })] + }], + [AutoImport, { + imports: ["vue"], + dts: "./auto-imports.d.ts", + eslintrc: { + enabled: true + } + }], ["vite-plugin-rewrite-all", {}], ["vite-plugin-remove-console", {}], [vitePluginI18nLangs, {}] diff --git a/src/components/BrtPlayer.vue b/src/components/BrtPlayer.vue index b6cf98b7..cdc15745 100644 --- a/src/components/BrtPlayer.vue +++ b/src/components/BrtPlayer.vue @@ -2535,9 +2535,13 @@ function skipOpening() { ) } useEventListener(window, "keydown", (event: KeyboardEvent) => { + if (document.activeElement?.tagName === "INPUT" || + document.activeElement?.tagName === "TEXTAREA") return + switch (event.code) { case "Space": case "KeyK": { + if (event.ctrlKey || event.shiftKey) break if (!checkContentEditable(event.target as Element | null)) event.preventDefault() const playing = artPlaying.value @@ -2547,39 +2551,50 @@ useEventListener(window, "keydown", (event: KeyboardEvent) => { break } case "KeyF": + if (event.ctrlKey || event.shiftKey) break void toggleArtFullscreen() break case "ArrowLeft": + if (event.ctrlKey || event.shiftKey) break skipBack() break case "ArrowRight": + if (event.ctrlKey || event.shiftKey) break skipForward() break case "ArrowUp": + if (event.ctrlKey || event.shiftKey) break if (artFullscreen.value) upVolume() break case "ArrowDown": + if (event.ctrlKey || event.shiftKey) break if (artFullscreen.value) downVolume() break case "KeyM": + if (event.ctrlKey || event.shiftKey) break toggleMuted() break case "KeyN": + if (event.ctrlKey) break if (event.shiftKey) emitNextChap(true) break case "KeyP": + if (event.ctrlKey) break if (event.shiftKey) emitPrevChap(true) break case "KeyJ": + if (event.ctrlKey || event.shiftKey) break skipOpening() break case "KeyT": + if (event.ctrlKey || event.shiftKey) break settingsStore.ui.modeMovie = !settingsStore.ui.modeMovie break case "Enter": + if (event.ctrlKey || event.shiftKey) break if (skiping.value) skipOpEnd() break diff --git a/src/components/comments/components/Comment.vue b/src/components/comments/components/Comment.vue new file mode 100644 index 00000000..3d1639f7 --- /dev/null +++ b/src/components/comments/components/Comment.vue @@ -0,0 +1,77 @@ + + + diff --git a/src/components/comments/components/Reply.vue b/src/components/comments/components/Reply.vue new file mode 100644 index 00000000..ee577c8b --- /dev/null +++ b/src/components/comments/components/Reply.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/comments/index.vue b/src/components/comments/index.vue new file mode 100644 index 00000000..861b2cea --- /dev/null +++ b/src/components/comments/index.vue @@ -0,0 +1,725 @@ + + + \ No newline at end of file diff --git a/src/pages/phim/_season.vue b/src/pages/phim/_season.vue index e88c6f63..b4c90e13 100644 --- a/src/pages/phim/_season.vue +++ b/src/pages/phim/_season.vue @@ -350,14 +350,17 @@ size="sm" /> - +