From 7f3306693b968fbaf32c656b14615a9ed6ed2695 Mon Sep 17 00:00:00 2001 From: Miner28_3 Date: Wed, 16 Aug 2023 10:27:42 +0200 Subject: [PATCH] Migrate to VPM --- .github/workflows/build-listing.yml | 68 ++++++ .github/workflows/release.yml | 55 +++++ .gitignore | 74 +++++- Packages/.gitignore | 5 + Packages/manifest.json | 42 ++++ Packages/packages-lock.json | 348 +++++++++++++++++++++++++++ Packages/vpm-manifest.json | 1 + Website/app.js | 231 ++++++++++++++++++ Website/banner.png | Bin 0 -> 60292 bytes Website/favicon.ico | Bin 0 -> 77918 bytes Website/index.html | 221 +++++++++++++++++ Website/styles.css | 356 ++++++++++++++++++++++++++++ 12 files changed, 1391 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/build-listing.yml create mode 100644 .github/workflows/release.yml create mode 100644 Packages/.gitignore create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 Packages/vpm-manifest.json create mode 100644 Website/app.js create mode 100644 Website/banner.png create mode 100644 Website/favicon.ico create mode 100644 Website/index.html create mode 100644 Website/styles.css diff --git a/.github/workflows/build-listing.yml b/.github/workflows/build-listing.yml new file mode 100644 index 0000000..d346078 --- /dev/null +++ b/.github/workflows/build-listing.yml @@ -0,0 +1,68 @@ +name: Build Repo Listing + +env: + CurrentPackageName: com.bocud.vrcapitools + listPublishDirectory: Website + pathToCi: ci + +on: + workflow_dispatch: + workflow_run: + workflows: [Build Release] + types: + - completed + release: + types: [published, created, edited, unpublished, deleted, released] + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + + build-listing: + name: build-listing + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v3 # check out this repo + - uses: actions/checkout@v3 # check out automation repo + with: + repository: vrchat-community/package-list-action + path: ${{env.pathToCi}} + clean: false # otherwise the local repo will no longer be checked out + + - name: Restore Cache + uses: actions/cache@v3 + with: + path: | + ${{env.pathToCi}}/.nuke/temp + ~/.nuget/packages + key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} + + - name: Build Package Version Listing + run: ${{env.pathToCi}}/build.cmd BuildRepoListing --root ${{env.pathToCi}} --list-publish-directory $GITHUB_WORKSPACE/${{env.listPublishDirectory}} --current-package-name ${{env.CurrentPackageName}} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ${{env.listPublishDirectory}} + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d9af7ac --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +name: Build Release + +on: + workflow_dispatch: + +env: + packageName: "com.bocud.vrcapitools" + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v3 + + - name: get version + id: version + uses: notiz-dev/github-action-json-property@7c8cf5cc36eb85d8d287a8086a39dac59628eb31 + with: + path: "Packages/${{env.packageName}}/package.json" + prop_path: "version" + + - name: Set Environment Variables + run: | + echo "zipFile=${{ env.packageName }}-${{ steps.version.outputs.prop }}".zip >> $GITHUB_ENV + echo "unityPackage=${{ env.packageName }}-${{ steps.version.outputs.prop }}.unitypackage" >> $GITHUB_ENV + + - name: Create Zip + uses: thedoctor0/zip-release@09336613be18a8208dfa66bd57efafd9e2685657 + with: + type: "zip" + directory: "Packages/${{env.packageName}}/" + filename: "../../${{env.zipFile}}" # make the zip file two directories up, since we start two directories in above + + - run: find "Packages/${{env.packageName}}/" -name \*.meta >> metaList + + - name: Create UnityPackage + uses: pCYSl5EDgo/create-unitypackage@cfcd3cf0391a5ef1306342794866a9897c32af0b + with: + package-path: ${{ env.unityPackage }} + include-files: metaList + + + - name: Make Release + uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5 + with: + tag_name: ${{ steps.version.outputs.prop }} + files: | + ${{ env.zipFile }} + ${{ env.unityPackage }} + Packages/${{ env.packageName }}/package.json diff --git a/.gitignore b/.gitignore index 5a72cbf..284136d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,64 @@ -/* -!/.git -!/.github -!/.gitignore -!/.LICENCE -!/.README.md -!/Packages -/Packages/* -!/Packages/com.BocuD.vrcapitools -/Packages/com.vrchat.core.vpm-resolver/* \ No newline at end of file +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Mm]emoryCaptures/ + +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage + +# Crashlytics generated file +crashlytics-build.properties + +.idea/.idea.vpm-package-maker/.idea +Assets/PackageMakerWindowData.asset* +.idea +.vscode diff --git a/Packages/.gitignore b/Packages/.gitignore new file mode 100644 index 0000000..667c00e --- /dev/null +++ b/Packages/.gitignore @@ -0,0 +1,5 @@ +/*/ +!com.vrchat.core.* + +# Change this to match your new package name +!com.bocud.vrcapitools \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..6d46a20 --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,42 @@ +{ + "dependencies": { + "com.unity.ide.rider": "1.2.1", + "com.unity.ide.visualstudio": "2.0.11", + "com.unity.ide.vscode": "1.2.4", + "com.unity.test-framework": "1.1.29", + "com.unity.textmeshpro": "2.1.6", + "com.unity.timeline": "1.2.18", + "com.unity.ugui": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..cfd4e20 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,348 @@ +{ + "dependencies": { + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.rider": { + "version": "1.2.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.11", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "2.0.2", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.29", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "2.1.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.2.18", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.vrchat.core.bootstrap": { + "version": "file:com.vrchat.core.bootstrap", + "depth": 0, + "source": "embedded", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "2.0.2" + } + }, + "com.vrchat.core.vpm-resolver": { + "version": "file:com.vrchat.core.vpm-resolver", + "depth": 0, + "source": "embedded", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "2.0.2" + } + }, + "com.vrchat.demo-template": { + "version": "file:com.vrchat.demo-template", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/Packages/vpm-manifest.json b/Packages/vpm-manifest.json new file mode 100644 index 0000000..9e8f163 --- /dev/null +++ b/Packages/vpm-manifest.json @@ -0,0 +1 @@ +{"dependencies": {}, "locked": {}} \ No newline at end of file diff --git a/Website/app.js b/Website/app.js new file mode 100644 index 0000000..b15c8fe --- /dev/null +++ b/Website/app.js @@ -0,0 +1,231 @@ +import { baseLayerLuminance, StandardLuminance } from 'https://unpkg.com/@fluentui/web-components'; + +const LISTING_URL = "{{ listingInfo.Url }}"; + +const PACKAGES = { +{{~ for package in packages ~}} + "{{ package.Name }}": { + name: "{{ package.Name }}", + displayName: "{{ if package.DisplayName; package.DisplayName; end; }}", + description: "{{ if package.Description; package.Description; end; }}", + version: "{{ package.Version }}", + author: { + name: "{{ if package.Author.Name; package.Author.Name; end; }}", + url: "{{ if package.Author.Url; package.Author.Url; end; }}", + }, + dependencies: { + {{~ for dependency in package.Dependencies ~}} + "{{ dependency.Name }}": "{{ dependency.Version }}", + {{~ end ~}} + }, + keywords: [ + {{~ for keyword in package.Keywords ~}} + "{{ keyword }}", + {{~ end ~}} + ], + license: "{{ package.License }}", + licensesUrl: "{{ package.LicensesUrl }}", + }, +{{~ end ~}} +}; + +const setTheme = () => { + const isDarkTheme = () => window.matchMedia("(prefers-color-scheme: dark)").matches; + if (isDarkTheme()) { + baseLayerLuminance.setValueFor(document.documentElement, StandardLuminance.DarkMode); + } else { + baseLayerLuminance.setValueFor(document.documentElement, StandardLuminance.LightMode); + } +} + +(() => { + setTheme(); + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + setTheme(); + }); + + const packageGrid = document.getElementById('packageGrid'); + + const searchInput = document.getElementById('searchInput'); + searchInput.addEventListener('input', ({ target: { value = '' }}) => { + const items = packageGrid.querySelectorAll('fluent-data-grid-row[row-type="default"]'); + items.forEach(item => { + if (value === '') { + item.style.display = 'grid'; + return; + } + if ( + item.dataset?.packageName?.toLowerCase()?.includes(value.toLowerCase()) || + item.dataset?.packageId?.toLowerCase()?.includes(value.toLowerCase()) + ) { + item.style.display = 'grid'; + } else { + item.style.display = 'none'; + } + }); + }); + + const urlBarHelpButton = document.getElementById('urlBarHelp'); + const addListingToVccHelp = document.getElementById('addListingToVccHelp'); + urlBarHelpButton.addEventListener('click', () => { + addListingToVccHelp.hidden = false; + }); + const addListingToVccHelpClose = document.getElementById('addListingToVccHelpClose'); + addListingToVccHelpClose.addEventListener('click', () => { + addListingToVccHelp.hidden = true; + }); + + const vccListingInfoUrlFieldCopy = document.getElementById('vccListingInfoUrlFieldCopy'); + vccListingInfoUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('vccListingInfoUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const vccAddRepoButton = document.getElementById('vccAddRepoButton'); + vccAddRepoButton.addEventListener('click', () => window.location.assign(`vcc://vpm/addRepo?url=${encodeURIComponent(LISTING_URL)}`)); + + const vccUrlFieldCopy = document.getElementById('vccUrlFieldCopy'); + vccUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('vccUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const rowMoreMenu = document.getElementById('rowMoreMenu'); + const hideRowMoreMenu = e => { + if (rowMoreMenu.contains(e.target)) return; + document.removeEventListener('click', hideRowMoreMenu); + rowMoreMenu.hidden = true; + } + + const rowMenuButtons = document.querySelectorAll('.rowMenuButton'); + rowMenuButtons.forEach(button => { + button.addEventListener('click', e => { + if (rowMoreMenu?.hidden) { + rowMoreMenu.style.top = `${e.clientY + e.target.clientHeight}px`; + rowMoreMenu.style.left = `${e.clientX - 120}px`; + rowMoreMenu.hidden = false; + + const downloadLink = rowMoreMenu.querySelector('#rowMoreMenuDownload'); + const downloadListener = () => { + window.open(e?.target?.dataset?.packageUrl, '_blank'); + } + downloadLink.addEventListener('change', () => { + downloadListener(); + downloadLink.removeEventListener('change', downloadListener); + }); + + setTimeout(() => { + document.addEventListener('click', hideRowMoreMenu); + }, 1); + } + }); + }); + + const packageInfoModal = document.getElementById('packageInfoModal'); + const packageInfoModalClose = document.getElementById('packageInfoModalClose'); + packageInfoModalClose.addEventListener('click', () => { + packageInfoModal.hidden = true; + }); + + // Fluent dialogs use nested shadow-rooted elements, so we need to use JS to style them + const modalControl = packageInfoModal.shadowRoot.querySelector('.control'); + modalControl.style.maxHeight = "90%"; + modalControl.style.transition = 'height 0.2s ease-in-out'; + modalControl.style.overflowY = 'hidden'; + + const packageInfoName = document.getElementById('packageInfoName'); + const packageInfoId = document.getElementById('packageInfoId'); + const packageInfoVersion = document.getElementById('packageInfoVersion'); + const packageInfoDescription = document.getElementById('packageInfoDescription'); + const packageInfoAuthor = document.getElementById('packageInfoAuthor'); + const packageInfoDependencies = document.getElementById('packageInfoDependencies'); + const packageInfoKeywords = document.getElementById('packageInfoKeywords'); + const packageInfoLicense = document.getElementById('packageInfoLicense'); + + const rowAddToVccButtons = document.querySelectorAll('.rowAddToVccButton'); + rowAddToVccButtons.forEach((button) => { + button.addEventListener('click', () => window.location.assign(`vcc://vpm/addRepo?url=${encodeURIComponent(LISTING_URL)}`)); + }); + + const rowPackageInfoButton = document.querySelectorAll('.rowPackageInfoButton'); + rowPackageInfoButton.forEach((button) => { + button.addEventListener('click', e => { + const packageId = e.target.dataset?.packageId; + const packageInfo = PACKAGES?.[packageId]; + if (!packageInfo) { + console.error(`Did not find package ${packageId}. Packages available:`, PACKAGES); + return; + } + + packageInfoName.textContent = packageInfo.displayName; + packageInfoId.textContent = packageId; + packageInfoVersion.textContent = `v${packageInfo.version}`; + packageInfoDescription.textContent = packageInfo.description; + packageInfoAuthor.textContent = packageInfo.author.name; + packageInfoAuthor.href = packageInfo.author.url; + + if ((packageInfo.keywords?.length ?? 0) === 0) { + packageInfoKeywords.parentElement.classList.add('hidden'); + } else { + packageInfoKeywords.parentElement.classList.remove('hidden'); + packageInfoKeywords.innerHTML = null; + packageInfo.keywords.forEach(keyword => { + const keywordDiv = document.createElement('div'); + keywordDiv.classList.add('me-2', 'mb-2', 'badge'); + keywordDiv.textContent = keyword; + packageInfoKeywords.appendChild(keywordDiv); + }); + } + + if (!packageInfo.license?.length && !packageInfo.licensesUrl?.length) { + packageInfoLicense.parentElement.classList.add('hidden'); + } else { + packageInfoLicense.parentElement.classList.remove('hidden'); + packageInfoLicense.textContent = packageInfo.license ?? 'See License'; + packageInfoLicense.href = packageInfo.licensesUrl ?? '#'; + } + + packageInfoDependencies.innerHTML = null; + Object.entries(packageInfo.dependencies).forEach(([name, version]) => { + const depRow = document.createElement('li'); + depRow.classList.add('mb-2'); + depRow.textContent = `${name} @ v${version}`; + packageInfoDependencies.appendChild(depRow); + }); + + packageInfoModal.hidden = false; + + setTimeout(() => { + const height = packageInfoModal.querySelector('.col').clientHeight; + modalControl.style.setProperty('--dialog-height', `${height + 14}px`); + }, 1); + }); + }); + + const packageInfoVccUrlFieldCopy = document.getElementById('packageInfoVccUrlFieldCopy'); + packageInfoVccUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('packageInfoVccUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const packageInfoListingHelp = document.getElementById('packageInfoListingHelp'); + packageInfoListingHelp.addEventListener('click', () => { + addListingToVccHelp.hidden = false; + }); +})(); \ No newline at end of file diff --git a/Website/banner.png b/Website/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6609efc752ed6a5b1e37f22631a8bda3242080f5 GIT binary patch literal 60292 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 iX_sSnNRGu?E&l^<7ZA)BPJMd-0000^c-Ri=rqc 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 a5%X`!50>64ZUi&Q)bJr=28ZZdtoc7lZNXOn literal 0 HcmV?d00001 diff --git a/Website/index.html b/Website/index.html new file mode 100644 index 0000000..8bb119c --- /dev/null +++ b/Website/index.html @@ -0,0 +1,221 @@ + + + + + + VCC Listing + + + + + +
+
+ {{~ if listingInfo.BannerImage; ~}} +
+ {{~ end; ~}} +

+ {{~ listingInfo.Name ~}} +

+ {{~ if listingInfo.Description; ~}} +
{{ listingInfo.Description }}
+ {{~ end; ~}} +
+ {{~ if listingInfo.Author.Email; ~}} + + {{ listingInfo.Author.Email }} + + {{~ end; ~}} + + {{~ if listingInfo.InfoLink.Url ~}} + + {{~ end; ~}} +
+
+
+ + + Add to VCC + + + + + Copy + + + How to add a listing to your VCC + + + + + + +
+ +
+ +
+ + + + + + + Name + + + Type + + + + + {{~ for package in packages ~}} + + +
+
{{ package.DisplayName }}
+
{{ package.Description }}
+
{{ package.Name }}
+
+
+ + {{ package.Type }} + + + Add to VCC + + + + + + + + + + + +
+ {{~ end ~}} +
+
+ {{~ if listingInfo.InfoLink.Url ~}} + + {{~ end; ~}} +
+ + + diff --git a/Website/styles.css b/Website/styles.css new file mode 100644 index 0000000..ce999b0 --- /dev/null +++ b/Website/styles.css @@ -0,0 +1,356 @@ +:root { + color-scheme: light dark; +} + +* { + box-sizing: border-box; +} + +body { + padding: 0; + margin: 0; + min-width: 100vw; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + color: var(--neutral-foreground-rest); +} + +.hidden { + display: none !important; +} + +.row { + display: flex; + flex-direction: row; +} + +.col { + display: flex; + flex-direction: column; +} + +.content { + max-width: 1000px; + width: 100%; + margin: 0 auto; +} + +.align-items-center { + align-items: center; +} + +.justify-content-between { + justify-content: space-between; +} + +.justify-content-end { + justify-content: flex-end; +} + +h1 { + margin-bottom: 0.5rem; +} + +.caption1 { + font-size: 1rem; + color: var(--neutral-foreground-hover); +} + +.caption2 { + font-size: 0.8rem; + margin-top: 0.25rem; + color: var(--neutral-foreground-rest); +} + +.packages { + margin: 0.5rem 0 1rem 0; + max-width: 90%; + padding: 0.25rem; + display: flex; + flex: 1; +} + +#packageGrid { + overflow-y: auto; + width: 100%; + max-height: 40rem; +} + +.packages .packageName { + font-size: 1.1rem; + font-weight: 600; + margin: 0.25rem 0; +} + +.searchBlock { + margin-top: 1rem; + width: 100%; + max-width: 90%; +} + +.searchBlock .root { + width: 100%; +} + +#searchInput { + width: 100%; +} + +.vccUrlField { + min-width: 450px; + max-width: 90%; + flex-grow:1; +} + +#addListingToVccHelp { + z-index: 11; +} + +#packageInfoModal { + z-index: 10; +} + +#rowMoreMenu { + top: 0; + left: 0; + position: absolute; + z-index: 10; +} + +#rowMoreMenu a { + display: block; + text-decoration: none; + color: var(--neutral-foreground-rest); +} + +.bannerImage { + aspect-ratio: 5 / 1; + border-radius: 6px; + max-width: 90%; + width: 100%; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + margin-bottom: 0.25rem; +} + +.badge { + border-radius: 4px; + padding: 0.25rem 0.5rem; + background-color: var(--neutral-fill-hover); +} + +.m-0 { + margin: 0; +} + +.m-1 { + margin: 0.25rem; +} + +.m-2 { + margin: 0.5rem; +} + +.m-3 { + margin: 0.75rem; +} + +.m-4 { + margin: 1rem; +} + +.m-5 { + margin: 2rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-3 { + margin-top: 0.75rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mt-5 { + margin-top: 2rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-5 { + margin-bottom: 2rem; +} + +.ms-1 { + margin-left: 0.25rem; +} + +.ms-2 { + margin-left: 0.5rem; +} + +.ms-3 { + margin-left: 0.75rem; +} + +.ms-4 { + margin-left: 1rem; +} + +.ms-5 { + margin-left: 2rem; +} + +.me-1 { + margin-right: 0.25rem; +} + +.me-2 { + margin-right: 0.5rem; +} + +.me-3 { + margin-right: 0.75rem; +} + +.me-4 { + margin-right: 1rem; +} + +.me-5 { + margin-right: 2rem; +} + +.p-1 { + padding: 0.25rem; +} + +.p-2 { + padding: 0.5rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.p-5 { + padding: 2rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + +.pt-2 { + padding-top: 0.5rem; +} + +.pt-3 { + padding-top: 0.75rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.pt-5 { + padding-top: 2rem; +} + +.pb-1 { + padding-bottom: 0.25rem; +} + +.pb-2 { + padding-bottom: 0.5rem; +} + +.pb-3 { + padding-bottom: 0.75rem; +} + +.pb-4 { + padding-bottom: 1rem; +} + +.pb-5 { + padding-bottom: 2rem; +} + +.ps-1 { + padding-left: 0.25rem; +} + +.ps-2 { + padding-left: 0.5rem; +} + +.ps-3 { + padding-left: 0.75rem; +} + +.ps-4 { + padding-left: 1rem; +} + +.ps-5 { + padding-left: 2rem; +} + +.pe-1 { + padding-right: 0.25rem; +} + +.pe-2 { + padding-right: 0.5rem; +} + +.pe-3 { + padding-right: 0.75rem; +} + +.pe-4 { + padding-right: 1rem; +} + +.pe-5 { + padding-right: 2rem; +} + +.w-100 { + width: 100%; +} + +.flex-1 { + flex: 1; +} \ No newline at end of file