Compare commits
2 Commits
deep_linki
...
why-migrat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa6cf0c9f6 | ||
| 99db5deb77 |
@@ -1,12 +0,0 @@
|
|||||||
# Only the variables that start with VITE_ are seen in the application import.meta.env in Vue.
|
|
||||||
|
|
||||||
# iOS doesn't like spaces in the app title.
|
|
||||||
TIME_SAFARI_APP_TITLE="TimeSafari_Dev"
|
|
||||||
VITE_APP_SERVER=http://localhost:3000
|
|
||||||
# This is the claim ID for actions in the BVC project, with the JWT ID on this environment (not production).
|
|
||||||
VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F
|
|
||||||
VITE_DEFAULT_ENDORSER_API_SERVER=http://localhost:3000
|
|
||||||
# Using shared server by default to ease setup, which works for shared test users.
|
|
||||||
VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app
|
|
||||||
VITE_DEFAULT_PARTNER_API_SERVER=http://localhost:3000
|
|
||||||
VITE_PASSKEYS_ENABLED=true
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# Admin DID credentials
|
|
||||||
ADMIN_DID=did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F
|
|
||||||
ADMIN_PRIVATE_KEY=2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b
|
|
||||||
|
|
||||||
# API Configuration
|
|
||||||
ENDORSER_API_URL=https://test-api.endorser.ch/api/v2/claim
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Only the variables that start with VITE_ are seen in the application import.meta.env in Vue.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VITE_APP_SERVER=https://timesafari.app
|
|
||||||
# This is the claim ID for actions in the BVC project.
|
|
||||||
VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01GXYPFF7FA03NXKPYY142PY4H
|
|
||||||
VITE_DEFAULT_ENDORSER_API_SERVER=https://api.endorser.ch
|
|
||||||
|
|
||||||
VITE_DEFAULT_IMAGE_API_SERVER=https://image-api.timesafari.app
|
|
||||||
VITE_DEFAULT_PARTNER_API_SERVER=https://partner-api.endorser.ch
|
|
||||||
12
.env.staging
@@ -1,12 +0,0 @@
|
|||||||
# Only the variables that start with VITE_ are seen in the application import.meta.env in Vue.
|
|
||||||
|
|
||||||
# iOS doesn't like spaces in the app title.
|
|
||||||
TIME_SAFARI_APP_TITLE="TimeSafari_Test"
|
|
||||||
VITE_APP_SERVER=https://test.timesafari.app
|
|
||||||
# This is the claim ID for actions in the BVC project, with the JWT ID on this environment (not production).
|
|
||||||
VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F
|
|
||||||
VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch
|
|
||||||
|
|
||||||
VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app
|
|
||||||
VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch
|
|
||||||
VITE_PASSKEYS_ENABLED=true
|
|
||||||
27
.eslintrc.js
@@ -2,30 +2,19 @@ module.exports = {
|
|||||||
root: true,
|
root: true,
|
||||||
env: {
|
env: {
|
||||||
node: true,
|
node: true,
|
||||||
es2022: true,
|
|
||||||
},
|
},
|
||||||
extends: [
|
extends: [
|
||||||
"plugin:vue/vue3-recommended",
|
"plugin:vue/vue3-essential",
|
||||||
"eslint:recommended",
|
"eslint:recommended",
|
||||||
"@vue/typescript/recommended",
|
"@vue/typescript/recommended",
|
||||||
"plugin:prettier/recommended"
|
"plugin:prettier/recommended",
|
||||||
],
|
],
|
||||||
// parserOptions: {
|
parserOptions: {
|
||||||
// ecmaVersion: 2020,
|
ecmaVersion: 2020,
|
||||||
// },
|
},
|
||||||
rules: {
|
rules: {
|
||||||
"max-len": ["warn", {
|
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||||
code: 100,
|
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||||
ignoreComments: true,
|
"@typescript-eslint/no-unnecessary-type-constraint": "off",
|
||||||
ignorePattern: '^\\s*class="[^"]*"$',
|
|
||||||
ignoreStrings: true,
|
|
||||||
ignoreTemplateLiterals: true,
|
|
||||||
ignoreUrls: true,
|
|
||||||
}],
|
|
||||||
"no-console": process.env.NODE_ENV === "production" ? "error" : "warn",
|
|
||||||
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "warn",
|
|
||||||
"@typescript-eslint/no-explicit-any": "warn",
|
|
||||||
"@typescript-eslint/explicit-function-return-type": "off",
|
|
||||||
"@typescript-eslint/no-unnecessary-type-constraint": "off"
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
27
.github/workflows/playwright.yml
vendored
@@ -1,27 +0,0 @@
|
|||||||
name: Playwright Tests
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ main, master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ main, master ]
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
timeout-minutes: 60
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: lts/*
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm ci
|
|
||||||
- name: Install Playwright Browsers
|
|
||||||
run: npx playwright install --with-deps
|
|
||||||
- name: Run Playwright tests
|
|
||||||
run: npx playwright test
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: playwright-report
|
|
||||||
path: playwright-report/
|
|
||||||
retention-days: 30
|
|
||||||
43
.gitignore
vendored
@@ -1,15 +1,9 @@
|
|||||||
squashfs-root
|
|
||||||
dist-electron
|
|
||||||
dist-electon-build
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
dist
|
/dist
|
||||||
signature.bin
|
signature.bin
|
||||||
# generated during `npm run build`
|
|
||||||
sw_scripts-combined.js
|
|
||||||
*.pem
|
*.pem
|
||||||
verified.txt
|
verified.txt
|
||||||
myenv
|
|
||||||
|
|
||||||
*~
|
*~
|
||||||
# local env files
|
# local env files
|
||||||
@@ -30,38 +24,3 @@ pnpm-debug.log*
|
|||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
/test-results/
|
|
||||||
/playwright-report/
|
|
||||||
/blob-report/
|
|
||||||
/playwright/.cache/
|
|
||||||
/dist-electron-build/
|
|
||||||
/dist-capacitor/
|
|
||||||
/test-playwright-results/
|
|
||||||
playwright-tests
|
|
||||||
test-playwright
|
|
||||||
dist-electron-packages
|
|
||||||
ios
|
|
||||||
.ruby-version
|
|
||||||
+.env
|
|
||||||
|
|
||||||
# Generated test files
|
|
||||||
.generated/
|
|
||||||
|
|
||||||
# Fastlane
|
|
||||||
ios/fastlane/report.xml
|
|
||||||
ios/fastlane/Preview.html
|
|
||||||
ios/fastlane/screenshots
|
|
||||||
ios/fastlane/test_output
|
|
||||||
android/fastlane/report.xml
|
|
||||||
android/fastlane/Preview.html
|
|
||||||
android/fastlane/screenshots
|
|
||||||
android/fastlane/test_output
|
|
||||||
.env.default
|
|
||||||
vendor/
|
|
||||||
|
|
||||||
# Build logs
|
|
||||||
build_logs/
|
|
||||||
|
|
||||||
# Android generated assets
|
|
||||||
android/app/src/main/assets/public/assets/
|
|
||||||
|
|
||||||
|
|||||||
424
BUILDING.md
@@ -1,424 +0,0 @@
|
|||||||
# Building TimeSafari
|
|
||||||
|
|
||||||
This guide explains how to build TimeSafari for different platforms.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Node.js (LTS version recommended)
|
|
||||||
- npm (comes with Node.js)
|
|
||||||
- Git
|
|
||||||
- For iOS builds: macOS with Xcode installed
|
|
||||||
- For Android builds: Android Studio with SDK installed
|
|
||||||
- For desktop builds: Additional build tools based on your OS
|
|
||||||
|
|
||||||
## Initial Setup
|
|
||||||
|
|
||||||
1. Clone the repository:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone [repository-url]
|
|
||||||
cd TimeSafari
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Install dependencies:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Web Build
|
|
||||||
|
|
||||||
To build for web deployment:
|
|
||||||
|
|
||||||
1. Run the production build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
2. The built files will be in the `dist` directory.
|
|
||||||
|
|
||||||
3. To test the production build locally:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run serve
|
|
||||||
```
|
|
||||||
|
|
||||||
## Desktop Build (Electron)
|
|
||||||
|
|
||||||
### Building for Linux
|
|
||||||
|
|
||||||
1. Build the electron app in production mode:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build:electron-prod
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Package the Electron app for Linux:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# For AppImage (recommended)
|
|
||||||
npm run electron:build-linux
|
|
||||||
|
|
||||||
# For .deb package
|
|
||||||
npm run electron:build-linux-deb
|
|
||||||
```
|
|
||||||
|
|
||||||
3. The packaged applications will be in `dist-electron-packages/`:
|
|
||||||
- AppImage: `dist-electron-packages/TimeSafari-x.x.x.AppImage`
|
|
||||||
- DEB: `dist-electron-packages/timesafari_x.x.x_amd64.deb`
|
|
||||||
|
|
||||||
### Running the Packaged App
|
|
||||||
|
|
||||||
- AppImage: Make executable and run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chmod +x dist-electron-packages/TimeSafari-*.AppImage
|
|
||||||
./dist-electron-packages/TimeSafari-*.AppImage
|
|
||||||
```
|
|
||||||
|
|
||||||
- DEB: Install and run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo dpkg -i dist-electron-packages/timesafari_*_amd64.deb
|
|
||||||
timesafari
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development Testing
|
|
||||||
|
|
||||||
For testing the Electron build before packaging:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build and run in development mode (includes DevTools)
|
|
||||||
npm run electron:dev
|
|
||||||
|
|
||||||
# Build in production mode and test
|
|
||||||
npm run build:electron-prod && npm run electron:start
|
|
||||||
```
|
|
||||||
|
|
||||||
## Mobile Builds (Capacitor)
|
|
||||||
|
|
||||||
### iOS Build
|
|
||||||
|
|
||||||
Prerequisites: macOS with Xcode installed
|
|
||||||
|
|
||||||
1. Build the web assets:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build:capacitor
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Update iOS project with latest build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx cap sync ios
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Open the project in Xcode:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx cap open ios
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Use Xcode to build and run on simulator or device.
|
|
||||||
|
|
||||||
If you have forked this to make your own app, you'll want to customize the ios files:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf ios
|
|
||||||
npx cap add ios
|
|
||||||
```
|
|
||||||
|
|
||||||
... and then repeat the steps above.
|
|
||||||
|
|
||||||
|
|
||||||
### Android Build
|
|
||||||
|
|
||||||
Prerequisites: Android Studio with SDK installed
|
|
||||||
|
|
||||||
1. Build the web assets:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf dist
|
|
||||||
npm run build:web
|
|
||||||
npm run build:capacitor
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Update Android project with latest build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx cap sync android
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Open the project in Android Studio:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx cap open android
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Use Android Studio to build and run on emulator or device.
|
|
||||||
|
|
||||||
If you have forked this to make your own app, you'll want to customize the android files:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
rm -rf android
|
|
||||||
npx cap add android
|
|
||||||
```
|
|
||||||
|
|
||||||
... and then: repeat the steps above, and look below for the deep link configuration.
|
|
||||||
|
|
||||||
## Building Android from the console
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd android
|
|
||||||
./gradlew clean
|
|
||||||
./gradlew build -Dlint.baselines.continue=true
|
|
||||||
cd ..
|
|
||||||
npx cap run android
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuring Android for deep links
|
|
||||||
|
|
||||||
You must add the following intent filter to the `android/app/src/main/AndroidManifest.xml` file:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<intent-filter android:autoVerify="true">
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
<data android:scheme="timesafari" />
|
|
||||||
</intent-filter>
|
|
||||||
```
|
|
||||||
|
|
||||||
You must also add the following to the `android/app/build.gradle` file:
|
|
||||||
|
|
||||||
```gradle
|
|
||||||
android {
|
|
||||||
// ... existing config ...
|
|
||||||
|
|
||||||
lintOptions {
|
|
||||||
disable 'UnsanitizedFilenameFromContentProvider'
|
|
||||||
abortOnError false
|
|
||||||
baseline file("lint-baseline.xml")
|
|
||||||
|
|
||||||
// Ignore Capacitor module issues
|
|
||||||
ignore 'DefaultLocale'
|
|
||||||
ignore 'UnsanitizedFilenameFromContentProvider'
|
|
||||||
ignore 'LintBaseline'
|
|
||||||
ignore 'LintBaselineFixed'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Modify `/android/build.gradle` to use a stable version of AGP and make sure Kotlin version is compatible.
|
|
||||||
|
|
||||||
```gradle
|
|
||||||
buildscript {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
dependencies {
|
|
||||||
// Use a stable version of AGP
|
|
||||||
classpath 'com.android.tools.build:gradle:8.1.0'
|
|
||||||
|
|
||||||
// Make sure Kotlin version is compatible
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add this to handle version conflicts
|
|
||||||
configurations.all {
|
|
||||||
resolutionStrategy {
|
|
||||||
force 'org.jetbrains.kotlin:kotlin-stdlib:1.8.0'
|
|
||||||
force 'org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## PyWebView Desktop Build
|
|
||||||
|
|
||||||
### Prerequisites for PyWebView
|
|
||||||
|
|
||||||
- Python 3.8 or higher
|
|
||||||
- pip (Python package manager)
|
|
||||||
- virtualenv (recommended)
|
|
||||||
- System dependencies:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# For Ubuntu/Debian
|
|
||||||
sudo apt-get install python3-webview
|
|
||||||
# or
|
|
||||||
sudo apt-get install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.0
|
|
||||||
|
|
||||||
# For Arch Linux
|
|
||||||
sudo pacman -S webkit2gtk python-gobject python-cairo
|
|
||||||
|
|
||||||
# For Fedora
|
|
||||||
sudo dnf install python3-webview
|
|
||||||
# or
|
|
||||||
sudo dnf install python3-gobject python3-cairo webkit2gtk3
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setup
|
|
||||||
|
|
||||||
1. Create and activate a virtual environment (recommended):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python -m venv .venv
|
|
||||||
source .venv/bin/activate # On Linux/macOS
|
|
||||||
# or
|
|
||||||
.venv\Scripts\activate # On Windows
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Install Python dependencies:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
### Troubleshooting
|
|
||||||
|
|
||||||
If encountering PyInstaller version errors:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Try installing the latest stable version
|
|
||||||
pip install --upgrade pyinstaller
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development of PyWebView
|
|
||||||
|
|
||||||
1. Start the PyWebView development build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run pywebview:dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Building for Distribution
|
|
||||||
|
|
||||||
#### Linux
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run pywebview:package-linux
|
|
||||||
```
|
|
||||||
|
|
||||||
The packaged application will be in `dist/TimeSafari`
|
|
||||||
|
|
||||||
#### Windows
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run pywebview:package-win
|
|
||||||
```
|
|
||||||
|
|
||||||
The packaged application will be in `dist/TimeSafari`
|
|
||||||
|
|
||||||
#### macOS
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run pywebview:package-mac
|
|
||||||
```
|
|
||||||
|
|
||||||
The packaged application will be in `dist/TimeSafari`
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Run local tests:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run test-local
|
|
||||||
```
|
|
||||||
|
|
||||||
See [TESTING.md](test-playwright/TESTING.md) for more details.
|
|
||||||
|
|
||||||
## Linting
|
|
||||||
|
|
||||||
Check code style:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
Fix code style issues:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run lint-fix
|
|
||||||
```
|
|
||||||
|
|
||||||
## Environment Configuration
|
|
||||||
|
|
||||||
See `.env.*` files for configuration.
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- The application uses PWA (Progressive Web App) features for web builds
|
|
||||||
- Electron builds disable PWA features automatically
|
|
||||||
- Build output directories:
|
|
||||||
- Web: `dist/`
|
|
||||||
- Electron: `dist-electron/`
|
|
||||||
- Capacitor: `dist-capacitor/`
|
|
||||||
|
|
||||||
## Deployment
|
|
||||||
|
|
||||||
### Version Management
|
|
||||||
|
|
||||||
1. Update CHANGELOG.md with new changes
|
|
||||||
2. Update version in package.json
|
|
||||||
3. Commit changes and tag release:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git tag <VERSION_TAG>
|
|
||||||
git push origin <VERSION_TAG>
|
|
||||||
```
|
|
||||||
|
|
||||||
4. After deployment, update package.json with next version + "-beta"
|
|
||||||
|
|
||||||
### Test Server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build using staging environment
|
|
||||||
npm run build -- --mode staging
|
|
||||||
|
|
||||||
# Deploy to test server
|
|
||||||
rsync -azvu -e "ssh -i ~/.ssh/<YOUR_KEY>" dist ubuntutest@test.timesafari.app:time-safari/
|
|
||||||
```
|
|
||||||
|
|
||||||
### Production Server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# On the production server:
|
|
||||||
pkgx +npm sh
|
|
||||||
cd crowd-funder-for-time-pwa
|
|
||||||
git checkout master && git pull
|
|
||||||
git checkout <VERSION_TAG>
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
cd -
|
|
||||||
|
|
||||||
# Backup and deploy
|
|
||||||
mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist time-safari/
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting Builds
|
|
||||||
|
|
||||||
### Common Build Issues
|
|
||||||
|
|
||||||
1. **Missing Environment Variables**
|
|
||||||
- Check that all required variables are set in your .env file
|
|
||||||
- For development, ensure local services are running on correct ports
|
|
||||||
|
|
||||||
2. **Electron Build Failures**
|
|
||||||
- Verify Node.js version compatibility
|
|
||||||
- Check that all required dependencies are installed
|
|
||||||
- Ensure proper paths in electron/main.js
|
|
||||||
|
|
||||||
3. **Mobile Build Issues**
|
|
||||||
- For iOS: Xcode command line tools must be installed
|
|
||||||
- For Android: Correct SDK version must be installed
|
|
||||||
- Check Capacitor configuration in capacitor.config.ts
|
|
||||||
721
CHANGELOG.md
@@ -6,724 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
## [0.4.5] - 2025.02.23
|
|
||||||
|
## [0.1.2] - 2023.11.01
|
||||||
### Added
|
### Added
|
||||||
- Total amounts of gives on project page
|
|
||||||
### Changed in DB or environment
|
|
||||||
- Requires Endorser.ch version 4.2.6+
|
|
||||||
|
|
||||||
|
|
||||||
## [0.4.4] - 2025.02.17
|
|
||||||
|
|
||||||
### Fixed in 0.4.4
|
|
||||||
|
|
||||||
- On production (due to data?) the search results would disappear after scrolling down. Now we don't show any results when going to the people map with a shortcut.
|
|
||||||
|
|
||||||
## [0.4.3] - 2025.02.17
|
|
||||||
|
|
||||||
### Added in 0.4.3
|
|
||||||
|
|
||||||
- Discover query parameter searchPeople to go directly to the people map
|
|
||||||
|
|
||||||
## [0.4.2] - 2025.02.17
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Capacitor on iOS and Android
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Path issues
|
|
||||||
|
|
||||||
## [0.4.1] - 2025.02.16
|
|
||||||
|
|
||||||
### Fixed in 0.4.1
|
|
||||||
|
|
||||||
- nostr build issue
|
|
||||||
- Linting
|
|
||||||
|
|
||||||
## [0.4.0] - 2025.02.14
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Images in the home feed now take up the full width of the card.
|
|
||||||
- Clicking the image previously, would open the image in a new tab. Now, clicking the image opens the image in a lightbox view.
|
|
||||||
|
|
||||||
### Added in 0.4.0
|
|
||||||
|
|
||||||
- Clicking an image also now displays an in-app lightbox view of the image.
|
|
||||||
- The lightbox view includes a download button for the image in mobile view.
|
|
||||||
|
|
||||||
## [0.3.57] - 2025.02.11
|
|
||||||
|
|
||||||
### Added in 0.3.57
|
|
||||||
|
|
||||||
- Automatic user creation in onboarding meetings
|
|
||||||
|
|
||||||
## [0.3.55] - 2025.02.07
|
|
||||||
|
|
||||||
### Added in 0.3.55
|
|
||||||
|
|
||||||
- End time for projects
|
|
||||||
|
|
||||||
## [0.3.54] - 2025.02.06
|
|
||||||
|
|
||||||
### Added in 0.3.54
|
|
||||||
|
|
||||||
- Group onboarding meetings
|
|
||||||
|
|
||||||
## [0.3.53] - 2025.01.30
|
|
||||||
|
|
||||||
### Added in 0.3.53
|
|
||||||
|
|
||||||
- Hints for contacting the creator of a project
|
|
||||||
|
|
||||||
## [0.3.52] - 2025.01.22
|
|
||||||
|
|
||||||
### Fixed in 0.3.52
|
|
||||||
|
|
||||||
- User profile endpoint server for map was broken.
|
|
||||||
|
|
||||||
## [0.3.51] - 2025.01.22
|
|
||||||
|
|
||||||
### Fixed in 0.3.51
|
|
||||||
|
|
||||||
- User profile map jumped on first zoom.
|
|
||||||
|
|
||||||
## [0.3.50] - 2025.01.20 - b9fedcd3fd3e34c3fb0fc79150d1a81a76eaeb40
|
|
||||||
|
|
||||||
### Added in 0.3.50
|
|
||||||
|
|
||||||
- User public profiles
|
|
||||||
|
|
||||||
## [0.3.49] - 2025.01.09 - 36301ed238ff84df25bb11a8d44a295ee7eaf0f8
|
|
||||||
|
|
||||||
### Changed in 0.3.49
|
|
||||||
|
|
||||||
- Make all external contact links direct to the contact-import page.
|
|
||||||
- Handle all new-single-contact JWTs in the contacts page, and multiple-contact JWTs in the contacts-import page.
|
|
||||||
|
|
||||||
## [0.3.48] - 2025.01.08 - 398f3e64a376789f7eb1c400cd886f5a2cacd588 (but app shows 07c4e58)
|
|
||||||
|
|
||||||
### Added in 0.3.48
|
|
||||||
|
|
||||||
- More sanity-checks on contact-import JWT
|
|
||||||
|
|
||||||
## [0.3.47] - 2025.01.06 - 5bf6dd1ee32ca7cc46d39bd7afca58365b422f93
|
|
||||||
|
|
||||||
### Added in 0.3.47
|
|
||||||
|
|
||||||
- Notes on contacts page with new contact-edit page
|
|
||||||
- Contact methods (only on contact-edit page and under DID details)
|
|
||||||
- DID view with no DID shows user's info.
|
|
||||||
|
|
||||||
### Changed in 0.3.47
|
|
||||||
|
|
||||||
- URL for user's contact info is now URL to this app (not endorser.ch).
|
|
||||||
- Extended details (eg. full claim) is beneath details link on claim page.
|
|
||||||
|
|
||||||
## [0.3.46] - 2025.01.03 - 9e7056616b5e5acc51e5a8cf7354d408029fefb3
|
|
||||||
|
|
||||||
### Added in 0.3.46
|
|
||||||
|
|
||||||
- More action-oriented questions for the gift prompts
|
|
||||||
|
|
||||||
### Fixed in 0.3.46
|
|
||||||
|
|
||||||
- Contact-list import set visibility for all, even if not chosen.
|
|
||||||
|
|
||||||
## [0.3.45] - 2025.01.01 - 65402dc68ce69ccc6cb9aa8d2e7a9249bf4298e0
|
|
||||||
|
|
||||||
### Fixed in 0.3.45
|
|
||||||
|
|
||||||
- Previous project links stayed when following a link.
|
|
||||||
|
|
||||||
## [0.3.44] - 2024.12.31 - 694b22987b05482e4527c2478bbe15e6b6f3b532
|
|
||||||
|
|
||||||
### Added in 0.3.44
|
|
||||||
|
|
||||||
- Project counts on a map
|
|
||||||
|
|
||||||
## [0.3.42] - 2024.12.27 - 9751934bc24a1040415a8cfeacbae59ed91f92a5
|
|
||||||
|
|
||||||
### Added in 0.3.42
|
|
||||||
|
|
||||||
- Link from certificate page to the claim
|
|
||||||
|
|
||||||
### Changed in 0.3.42
|
|
||||||
|
|
||||||
- Contact data sharing is now a verified JWT.
|
|
||||||
- Feed pictures are larger.
|
|
||||||
|
|
||||||
## [0.3.41] - 2024.12.21 - ff6d14138f26daea6216b051562f0a04681f69fc
|
|
||||||
|
|
||||||
### Added in 0.3.41
|
|
||||||
|
|
||||||
- Link from certificate page to the claim
|
|
||||||
|
|
||||||
## [0.3.40] - 2024.12.20 - 77290d9fed3c364243793dc3e9bfe2e994a016b8
|
|
||||||
|
|
||||||
### Added in 0.3.40
|
|
||||||
|
|
||||||
- Only show issuer on certificate if it's not the agent.
|
|
||||||
|
|
||||||
## [0.3.39] - 2024.12.20 - d8819155e2acd2b57fdab523168fa5d1d09e80cc
|
|
||||||
|
|
||||||
### Added in 0.3.39
|
|
||||||
|
|
||||||
- Page for a framed claim certificate
|
|
||||||
|
|
||||||
## [0.3.38] - 2024.12.14 - f8cae5ad4fee1f114320dcce052299eab12108b2
|
|
||||||
|
|
||||||
### Fixed in 0.3.38
|
|
||||||
|
|
||||||
- Error on BVC confirmation screen (from IndexedDB refactor)
|
|
||||||
|
|
||||||
## [0.3.37] - 2024.12.13 - 4d805b43cd25eed73cdd6651f36ad1ec8c109555
|
|
||||||
|
|
||||||
### Added in 0.3.37
|
|
||||||
|
|
||||||
- Record a give from a project on the project page.
|
|
||||||
- New button on home page opens the gifted dialog.
|
|
||||||
- On confirmation buttons on the project page gives, mark when unavailable and explain why.
|
|
||||||
|
|
||||||
### Changed in 0.3.37
|
|
||||||
|
|
||||||
- Moved the secret into IndexedDB (and out of localStorage) for more reliability.
|
|
||||||
- New "invite" destination page helps troubleshoot when JWT link doesn't come through.
|
|
||||||
|
|
||||||
### Fixed in 0.3.37
|
|
||||||
|
|
||||||
- Problem showing claim issuer name
|
|
||||||
- Problem going "back" from a project page
|
|
||||||
|
|
||||||
## [0.3.36] - 2024.11.24 - c8d23647d165016f8a8f575e13d32583242e53ac
|
|
||||||
|
|
||||||
### Changed in 0.3.36
|
|
||||||
|
|
||||||
- More friendly default reminder message
|
|
||||||
- Blue borders around people to indicate clickability
|
|
||||||
|
|
||||||
## [0.3.35] - 2024.11.24 - bff7d0a6320b70349185e26bfac72e3bb17f76df
|
|
||||||
|
|
||||||
### Added in 0.3.35
|
|
||||||
|
|
||||||
- Daily reliable, hard-coded notification message
|
|
||||||
- Setting to change the partner API server
|
|
||||||
|
|
||||||
## [0.3.33] - 2024.11.07 - adb7b16ecf1343c39cba71a7d6bb0e7a973e1102
|
|
||||||
|
|
||||||
### Fixed in 0.3.33
|
|
||||||
|
|
||||||
- Affirm Delivery button on offer claim page didn't work.
|
|
||||||
- Plans were not showing by default on project page.
|
|
||||||
|
|
||||||
## [0.3.32] - 2024.11.06 - 9a3fa38a3fd28f977e06f0265fc39e635c9c5ccd
|
|
||||||
|
|
||||||
### Added in 0.3.32
|
|
||||||
|
|
||||||
- Highlight in green new offers to user & to user's projects on the front page.
|
|
||||||
|
|
||||||
## [0.3.31] - 2024.10.25 - 07c02ab98a09d293dd90d9289a7872e7d681d296
|
|
||||||
|
|
||||||
### Changed in 0.3.31
|
|
||||||
|
|
||||||
- Onboarding messages about offers
|
|
||||||
|
|
||||||
## [0.3.30]
|
|
||||||
|
|
||||||
### Added in 0.3.30
|
|
||||||
|
|
||||||
- Onboarding messages
|
|
||||||
|
|
||||||
## [0.3.29] - 2024.10.09 - babd3832bdfe0c40eaa3869de1b41399a51713c1
|
|
||||||
|
|
||||||
### Added in 0.3.29
|
|
||||||
|
|
||||||
- Invite for a contact to join immediately
|
|
||||||
|
|
||||||
### Changed in 0.3.29
|
|
||||||
|
|
||||||
- Send signed data to nostr endpoints to verify public key ownership.
|
|
||||||
- Enhanced help & help onboarding.
|
|
||||||
|
|
||||||
### Changed in DB or environment
|
|
||||||
|
|
||||||
- Uses Endorser.ch version 4.1.1
|
|
||||||
|
|
||||||
## [0.3.28] - 2024.09.30 - 84720b94049d29cc0ddd99c50cef2e7176130133
|
|
||||||
|
|
||||||
### Added in 0.3.28
|
|
||||||
|
|
||||||
- Posting to nostr apps Trustroots & TripHopping
|
|
||||||
- Display of providers on claim view page
|
|
||||||
|
|
||||||
### Changed in 0.3.28
|
|
||||||
|
|
||||||
- Switched BVC-meeting-ending gift to be a gift from the group.
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.28
|
|
||||||
|
|
||||||
- Requires Endorser.ch version 4.1.0
|
|
||||||
|
|
||||||
## [0.3.27] - 2024.09.22 - ee23e6f005e47f5bd6f04d804599f6395371b0e4
|
|
||||||
|
|
||||||
### Fixed in 0.3.27
|
|
||||||
|
|
||||||
- Error loading BVC claims to confirm
|
|
||||||
- Really allow visibility of bulk-imported contacts
|
|
||||||
|
|
||||||
## [0.3.26] - 2024.09.16 - 8263ed2b29947b3ccc6f3133bbc9454c222bce28
|
|
||||||
|
|
||||||
### Added in 0.3.26
|
|
||||||
|
|
||||||
- Separate 'isRegistered' flag for each account
|
|
||||||
|
|
||||||
### Fixed in 0.3.26
|
|
||||||
|
|
||||||
- Failure to assign offers to their project
|
|
||||||
- Alert when looking at one's own activity if not in contacts.
|
|
||||||
|
|
||||||
## [0.3.25] - 2024.08.30 - dcbe02d877aecb4cdef2643d90e6595d246a9f82
|
|
||||||
|
|
||||||
### Added in 0.3.25
|
|
||||||
|
|
||||||
- "Ideas" now jumps directly to giving prompt or contact list.
|
|
||||||
|
|
||||||
### Fixed in 0.3.25
|
|
||||||
|
|
||||||
- Empty giver name on gifted-details view
|
|
||||||
- Previously visited project would show up on the giving-details page.
|
|
||||||
|
|
||||||
### Removed in 0.3.25
|
|
||||||
|
|
||||||
- All unnecessary localStorage for project IDs
|
|
||||||
|
|
||||||
## [0.3.23] - 2024.08.30
|
|
||||||
|
|
||||||
### Added in 0.3.23
|
|
||||||
|
|
||||||
- Sections in Help for different kinds of users
|
|
||||||
- Discovery page parameters so that links with search text work
|
|
||||||
- Message when no projects are found
|
|
||||||
|
|
||||||
## [0.3.21] - 2024.08.24 - a7b89f4bb6da928d56daeffaae7741fa74cc80bf
|
|
||||||
|
|
||||||
### Added in 0.3.21
|
|
||||||
|
|
||||||
- Send list of contacts to someone, and move individual contact actions to detail page.
|
|
||||||
- Prompt for name in pop-up, and send to different contact-sharing screens.
|
|
||||||
|
|
||||||
### Changed in 0.3.21
|
|
||||||
|
|
||||||
- Moved contact actions from list onto detail page
|
|
||||||
|
|
||||||
## [0.3.20] - 2024.08.18 - 4064eb75a9743ca268bf00016fa0a5fc5dec4e30
|
|
||||||
|
|
||||||
### Fixed in 0.3.20
|
|
||||||
|
|
||||||
- Bad "give" verbiage on offer page
|
|
||||||
- Failing offer test
|
|
||||||
|
|
||||||
## [0.3.19] - 2024.08.18 - ee9c14942ceba993bf21a11249601f205158ec71
|
|
||||||
|
|
||||||
### Added in 0.3.19
|
|
||||||
|
|
||||||
- Update of an offer
|
|
||||||
- Recipient description in offer list
|
|
||||||
|
|
||||||
### Fixed in 0.3.19
|
|
||||||
|
|
||||||
- List of offers wasn't showing.
|
|
||||||
- Destination page after sharing photo was wrong.
|
|
||||||
|
|
||||||
## [0.3.17] - 2024.07.11 - cefa384ff1a2d922848c370640c096c529920fab
|
|
||||||
|
|
||||||
### Added in 0.3.17
|
|
||||||
|
|
||||||
- Photos on more screens
|
|
||||||
|
|
||||||
### Fixed in 0.3.17
|
|
||||||
|
|
||||||
- Share of a photo, including sharing a photo from webkit/Safari which never worked
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.17
|
|
||||||
|
|
||||||
- Nothing (though there's a new temp field in IndexedDB)
|
|
||||||
|
|
||||||
## [0.3.15] - 2024.08.04 - c8f0f2c2b16b9f0b4b47d40f7bf29058c7baa68e
|
|
||||||
|
|
||||||
### Added in 0.3.15
|
|
||||||
|
|
||||||
- Edit gives
|
|
||||||
- Page to edit claim JSON before submitting
|
|
||||||
- Update of imported contacts
|
|
||||||
- Improve messaging on give dialog
|
|
||||||
- Section for gives provided by plan
|
|
||||||
- Deletion of an identity
|
|
||||||
- UI for choosing a passkey creation (not enabled on prod)
|
|
||||||
- Cache signatures for reports for passkey-signed requests
|
|
||||||
- Refactor: consolidate alternative signing, eg. for passkeys & did:peer
|
|
||||||
- Playwright tests
|
|
||||||
|
|
||||||
### Changed in 0.3.15
|
|
||||||
|
|
||||||
- Linked projects display below description (instead of at bottom)
|
|
||||||
|
|
||||||
### Fixed in 0.3.15
|
|
||||||
|
|
||||||
- Visibility toggle appearance
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.15
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.14] - 2024.06.22 - 1611d22892f683f43856d2503eee7f391b6bbce8
|
|
||||||
|
|
||||||
### Added in 0.3.14
|
|
||||||
|
|
||||||
- Clearer give-confirmation screen
|
|
||||||
- BX currency <https://thebx.medium.com/>
|
|
||||||
- Deselection of project on gifted details page
|
|
||||||
|
|
||||||
### Fixed in 0.3.14
|
|
||||||
|
|
||||||
- Don't show registration pop-up for a new contact that is registered
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.14
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.13] - 2024.05.24 - 08b67984e443c58d9178ad3776013b0bce7afddc
|
|
||||||
|
|
||||||
### Added in 0.3.13
|
|
||||||
|
|
||||||
- Photos on projects
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.13
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.12] - 2024.05.19 - 141fb39ad19c44d82fe1a33bf85115beacf50870
|
|
||||||
|
|
||||||
### Fixed in 0.3.12
|
|
||||||
|
|
||||||
- Photo share (share_target) failed because requests were sent to server
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.12
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.11] - 2024.05.19 - 567bcad88dfb7e9ac8fea72530d1163985e4a7cc
|
|
||||||
|
|
||||||
### Added in 0.3.11
|
|
||||||
|
|
||||||
- Choose a file for gifts, and a URL for gifts & profiles
|
|
||||||
|
|
||||||
### Fixed in 0.3.11
|
|
||||||
|
|
||||||
- Multiple button pushes were required to switch camera
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.11
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.10] - 2024.05.11 - 03ac31d98110f7828cf9acb366db8d01b185f64c
|
|
||||||
|
|
||||||
### Added in 0.3.10
|
|
||||||
|
|
||||||
- Share an image
|
|
||||||
- Choose a file on the device for a profile image
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.10
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.9] - 2024.04.28 - 874e717e698b93a1ace9f588e675b8a3dccd7617
|
|
||||||
|
|
||||||
### Added in 0.3.9
|
|
||||||
|
|
||||||
- Offers on contacts page
|
|
||||||
- Checks on front page until they show as registered
|
|
||||||
|
|
||||||
### Changed in 0.3.9
|
|
||||||
|
|
||||||
- Scanned contacts now add immediately and prompt for registration.
|
|
||||||
- Better UI for gives on contact page
|
|
||||||
- Better UI for all confirmation messages
|
|
||||||
|
|
||||||
### Fixed in 0.3.9
|
|
||||||
|
|
||||||
- Repeated elements at top of main feed
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.9
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.8] - 2024.04.20 - 15c026c80ce03a26cae3ff80b0888934c101c7e2
|
|
||||||
|
|
||||||
### Added in 0.3.8
|
|
||||||
|
|
||||||
- Profile image for user
|
|
||||||
|
|
||||||
### Fixed in 0.3.8
|
|
||||||
|
|
||||||
- Slow loading of home page feed
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.8
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.7] - 2024.04.10 - cf18f1543a700d62a5f9e764905a4aafe1fb229b
|
|
||||||
|
|
||||||
### Added in 0.3.7
|
|
||||||
|
|
||||||
- Filter on home page feed
|
|
||||||
- Ability to set time of daily notification
|
|
||||||
- Jump to app on click of notification
|
|
||||||
|
|
||||||
### Changed in 0.3.7
|
|
||||||
|
|
||||||
- Built with vite
|
|
||||||
- Descriptions on home page to include projects
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.7
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.6] - 2024.03.24 - 3a07e31d6313ab95711265562d9023c42916e141
|
|
||||||
|
|
||||||
### Added in 0.3.6
|
|
||||||
|
|
||||||
- Button to mirror photo during video
|
|
||||||
- More detailed onboarding help screen
|
|
||||||
- Public-data blurb
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.6
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.3.5] - 2024.03.23 - 28754bdfb1e11aa221dd49a5dce4219b69cf6a9d
|
|
||||||
|
|
||||||
### Added in 0.3.5
|
|
||||||
|
|
||||||
- Photo on gift records
|
|
||||||
|
|
||||||
### Fixed in 0.3.5
|
|
||||||
|
|
||||||
- Environment variable for BVC meetings project
|
|
||||||
- Environment variables and build enhancements for test vs prod
|
|
||||||
|
|
||||||
### Changed in DB or environment in 0.3.5
|
|
||||||
|
|
||||||
- New environment variable for image API server
|
|
||||||
- Test that a new browser session will get the right default APIs.
|
|
||||||
- Test that a new browser session will send the right BVC meetings project.
|
|
||||||
|
|
||||||
## [0.2.17] - 2024.03.01 - 3612ea42240c5e1b7d7eff29a39ff18f1b869b36
|
|
||||||
|
|
||||||
### Added in 0.2.17
|
|
||||||
|
|
||||||
- Shortcut page for Bountiful Voluntaryist Community
|
|
||||||
|
|
||||||
### Changed in 0.2.17
|
|
||||||
|
|
||||||
- More readable, targeted summaries in home-page feed items
|
|
||||||
|
|
||||||
### Changed in DB
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.2.14] - 2024.02.14 - 5f9edea1167dbfb64e16648764eed8c09b24eaeb
|
|
||||||
|
|
||||||
### Changed in 0.2.14
|
|
||||||
|
|
||||||
- Combine all service worker scripts into a single file.
|
|
||||||
|
|
||||||
### Changed in DB in 0.2.14
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.2.13] - 2024.02.07
|
|
||||||
|
|
||||||
### Added in 0.2.13
|
|
||||||
|
|
||||||
- Display of user's offers
|
|
||||||
- Check for valid DIDs
|
|
||||||
|
|
||||||
### Fixed in 0.2.13
|
|
||||||
|
|
||||||
- Name display on give prompt
|
|
||||||
- Non-numbers on number input & autocapitalize on URL input
|
|
||||||
|
|
||||||
### Changed in DB in 0.2.13
|
|
||||||
|
|
||||||
- Nothing
|
|
||||||
|
|
||||||
## [0.2.12] - 2024.02.01
|
|
||||||
|
|
||||||
### Added in 0.2.12
|
|
||||||
|
|
||||||
- Prompts for gratitude
|
|
||||||
|
|
||||||
## [0.2.11] - 2024.01.28
|
|
||||||
|
|
||||||
### Added in 0.2.11
|
|
||||||
|
|
||||||
- Actions to share claim data with contacts
|
|
||||||
- Bulk CSV import from Endorser Mobile export
|
|
||||||
- Dates on give summaries
|
|
||||||
|
|
||||||
## [0.2.10] - 2024.01.18 - 667e1e8890b42de59cd939caca1a01c7a7a702be
|
|
||||||
|
|
||||||
### Added in 0.2.10
|
|
||||||
|
|
||||||
- Person identicons for contacts
|
|
||||||
- Confirmation & delivery directly from project page
|
|
||||||
- Offer dialog now allows units
|
|
||||||
- Links from claim detail page to the fulfilled project or offer
|
|
||||||
- Link to project from home feed
|
|
||||||
- Copy to clipboard in more places
|
|
||||||
|
|
||||||
### Fixed in 0.2.10
|
|
||||||
|
|
||||||
- "More Contacts" for give on project page now links correctly.
|
|
||||||
|
|
||||||
## [0.2.9] - 2024.01.15 - e5e702f8a5a53a6efbed48d35f0bc3cee63024a0
|
|
||||||
|
|
||||||
### Fixed in 0.2.9
|
|
||||||
|
|
||||||
- Set visibility for new contact.
|
|
||||||
|
|
||||||
## [0.2.8] - 2024.01.14
|
|
||||||
|
|
||||||
### Added in 0.2.8
|
|
||||||
|
|
||||||
- Automatic ID creation from home page
|
|
||||||
- Agent who can also edit a project
|
|
||||||
|
|
||||||
### Fixed in 0.2.8
|
|
||||||
|
|
||||||
- Cannot declare anonymous gift
|
|
||||||
|
|
||||||
## [0.2.7] - 2024.01.12
|
|
||||||
|
|
||||||
### Added in 0.2.7
|
|
||||||
|
|
||||||
- Give to fulfill a particular offer
|
|
||||||
- Give as part of a trade as opposed to a donation
|
|
||||||
- Error notifications on import
|
|
||||||
|
|
||||||
### Changed in 0.2.7
|
|
||||||
|
|
||||||
- Library security updates
|
|
||||||
- Visibility of actions & confirmations on claim page
|
|
||||||
|
|
||||||
### Fixed in 0.2.7
|
|
||||||
|
|
||||||
- Name of offerer
|
|
||||||
|
|
||||||
## [0.2.2] - 2024.01.05
|
|
||||||
|
|
||||||
### Added in 0.2.2
|
|
||||||
|
|
||||||
- Check for notification capability on front screen
|
|
||||||
- Contact next-public-key-hash in manual textual input
|
|
||||||
- Confirmation for contact visibility change
|
|
||||||
- YAML rendering of full claim details
|
|
||||||
- Hints for onboarding on the contact screen
|
|
||||||
|
|
||||||
## [0.2.0] - 2024.01.04
|
|
||||||
|
|
||||||
### Added in 0.2.0
|
|
||||||
|
|
||||||
- Contact next-public-key-hash
|
|
||||||
- Icon for Android
|
|
||||||
- More thorough messaging and testing for notifications
|
|
||||||
|
|
||||||
## [0.1.9] - 2024.01.01
|
|
||||||
|
|
||||||
### Added in 0.1.9
|
|
||||||
|
|
||||||
- Import for contacts and settings
|
|
||||||
- Second download button for DuckDuckGo
|
|
||||||
|
|
||||||
### Changed in 0.1.9
|
|
||||||
|
|
||||||
- Removed some keys from Dexie's IndexedDB declarations
|
|
||||||
|
|
||||||
## [0.1.8] - 2023.12.27- d26d1d360152a7d0e559b68486e85b72b88bd9ff
|
|
||||||
|
|
||||||
### Added in 0.1.8
|
|
||||||
|
|
||||||
- DB logging for service-worker events
|
|
||||||
- Help page for notifications
|
|
||||||
- Test notification & web-push triggers inside app
|
|
||||||
- Check that the app is installed
|
|
||||||
|
|
||||||
### Fixed in 0.1.8
|
|
||||||
|
|
||||||
- Project issuer display name
|
|
||||||
|
|
||||||
## [0.1.7] - 2023.12.19 - 91c6c7c11c71f96006cc876fc946f1f98a274ba2
|
|
||||||
|
|
||||||
### Changed in 0.1.7
|
|
||||||
|
|
||||||
- Icons
|
|
||||||
|
|
||||||
### Fixed in 0.1.7
|
|
||||||
|
|
||||||
- Notification switch now shows message
|
|
||||||
- Prod/test server warning message at top of page
|
|
||||||
|
|
||||||
## [0.1.6] - 2023.12.17 - b445b1234fbfcf6b37d695373f259aab0eda1118
|
|
||||||
|
|
||||||
### Added in 0.1.6
|
|
||||||
|
|
||||||
- Infinite scroll on home page
|
|
||||||
|
|
||||||
### Changed in 0.1.6
|
|
||||||
|
|
||||||
- UI improvements
|
|
||||||
- Show web-push subscription info
|
|
||||||
- Icon
|
|
||||||
|
|
||||||
## [0.1.5] - 2023.12.09 - 9c36bb509a9bae9bb3306d3bd9eeb144b67aa8ad
|
|
||||||
|
|
||||||
### Added in 0.1.5
|
|
||||||
|
|
||||||
- Web push notifications (though not finalized)
|
|
||||||
- Credentials details page
|
|
||||||
- See more data without an ID
|
|
||||||
- Change units of a give
|
|
||||||
|
|
||||||
## [0.1.4] - 2023.11.20 - 7311d36726f3667ec4c68f241f91d404273ad4db
|
|
||||||
|
|
||||||
### Added in 0.1.4
|
|
||||||
|
|
||||||
- Offer on a project
|
|
||||||
|
|
||||||
### Changed in 0.1.4
|
|
||||||
|
|
||||||
- Automatically set as visible when importing a contact
|
|
||||||
|
|
||||||
## [0.1.3] - 2023.11.08 - 910f57ec7d2e50803ae3d04f4b927e0f5219fbde
|
|
||||||
|
|
||||||
### Added in 0.1.3
|
|
||||||
|
|
||||||
- Contact name editing
|
|
||||||
|
|
||||||
### Changed in 0.1.3
|
|
||||||
|
|
||||||
- Don't show actions on front page if not registered.
|
|
||||||
|
|
||||||
### Removed in 0.1.3
|
|
||||||
|
|
||||||
- Home page Notiwind test buttons
|
|
||||||
|
|
||||||
## [0.1.2] - 2023.11.01 - 7f6c93802911a030a89fe3706e18b5c17151e5bb
|
|
||||||
|
|
||||||
### Added in 0.1.2
|
|
||||||
|
|
||||||
- Basics: create ID, record a give, declare a project, search, and get notifications.
|
- Basics: create ID, record a give, declare a project, search, and get notifications.
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
# Contributing
|
|
||||||
|
|
||||||
Welcome! We are happy to have your help with this project.
|
|
||||||
|
|
||||||
We expect contributions to include automated tests and pass linting. Run the `test-all` task.
|
|
||||||
Note that some previous features don't have tests and adding more will make you friends quick.
|
|
||||||
|
|
||||||
Note that all contributions will be under our [license, modeled after SQLite](https://github.com/trentlarson/endorser-ch/blob/master/LICENSE).
|
|
||||||
|
|
||||||
If you want to see a code of conduct, we're probably not the people you want to hang with.
|
|
||||||
Basically, we'll work together as long as we both enjoy it, and we'll stop when that stops.
|
|
||||||
321
Gemfile.lock
@@ -1,321 +0,0 @@
|
|||||||
GEM
|
|
||||||
remote: https://rubygems.org/
|
|
||||||
specs:
|
|
||||||
CFPropertyList (3.0.7)
|
|
||||||
base64
|
|
||||||
nkf
|
|
||||||
rexml
|
|
||||||
activesupport (7.2.2.1)
|
|
||||||
base64
|
|
||||||
benchmark (>= 0.3)
|
|
||||||
bigdecimal
|
|
||||||
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
||||||
connection_pool (>= 2.2.5)
|
|
||||||
drb
|
|
||||||
i18n (>= 1.6, < 2)
|
|
||||||
logger (>= 1.4.2)
|
|
||||||
minitest (>= 5.1)
|
|
||||||
securerandom (>= 0.3)
|
|
||||||
tzinfo (~> 2.0, >= 2.0.5)
|
|
||||||
addressable (2.8.7)
|
|
||||||
public_suffix (>= 2.0.2, < 7.0)
|
|
||||||
algoliasearch (1.27.5)
|
|
||||||
httpclient (~> 2.8, >= 2.8.3)
|
|
||||||
json (>= 1.5.1)
|
|
||||||
artifactory (3.0.17)
|
|
||||||
atomos (0.1.3)
|
|
||||||
aws-eventstream (1.3.2)
|
|
||||||
aws-partitions (1.1066.0)
|
|
||||||
aws-sdk-core (3.220.1)
|
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
|
||||||
aws-partitions (~> 1, >= 1.992.0)
|
|
||||||
aws-sigv4 (~> 1.9)
|
|
||||||
base64
|
|
||||||
jmespath (~> 1, >= 1.6.1)
|
|
||||||
aws-sdk-kms (1.99.0)
|
|
||||||
aws-sdk-core (~> 3, >= 3.216.0)
|
|
||||||
aws-sigv4 (~> 1.5)
|
|
||||||
aws-sdk-s3 (1.182.0)
|
|
||||||
aws-sdk-core (~> 3, >= 3.216.0)
|
|
||||||
aws-sdk-kms (~> 1)
|
|
||||||
aws-sigv4 (~> 1.5)
|
|
||||||
aws-sigv4 (1.11.0)
|
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
|
||||||
babosa (1.0.4)
|
|
||||||
base64 (0.2.0)
|
|
||||||
benchmark (0.4.0)
|
|
||||||
bigdecimal (3.1.9)
|
|
||||||
claide (1.1.0)
|
|
||||||
cocoapods (1.16.2)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
claide (>= 1.0.2, < 2.0)
|
|
||||||
cocoapods-core (= 1.16.2)
|
|
||||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
|
||||||
cocoapods-downloader (>= 2.1, < 3.0)
|
|
||||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
|
||||||
cocoapods-search (>= 1.0.0, < 2.0)
|
|
||||||
cocoapods-trunk (>= 1.6.0, < 2.0)
|
|
||||||
cocoapods-try (>= 1.1.0, < 2.0)
|
|
||||||
colored2 (~> 3.1)
|
|
||||||
escape (~> 0.0.4)
|
|
||||||
fourflusher (>= 2.3.0, < 3.0)
|
|
||||||
gh_inspector (~> 1.0)
|
|
||||||
molinillo (~> 0.8.0)
|
|
||||||
nap (~> 1.0)
|
|
||||||
ruby-macho (>= 2.3.0, < 3.0)
|
|
||||||
xcodeproj (>= 1.27.0, < 2.0)
|
|
||||||
cocoapods-core (1.16.2)
|
|
||||||
activesupport (>= 5.0, < 8)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
algoliasearch (~> 1.0)
|
|
||||||
concurrent-ruby (~> 1.1)
|
|
||||||
fuzzy_match (~> 2.0.4)
|
|
||||||
nap (~> 1.0)
|
|
||||||
netrc (~> 0.11)
|
|
||||||
public_suffix (~> 4.0)
|
|
||||||
typhoeus (~> 1.0)
|
|
||||||
cocoapods-deintegrate (1.0.5)
|
|
||||||
cocoapods-downloader (2.1)
|
|
||||||
cocoapods-plugins (1.0.0)
|
|
||||||
nap
|
|
||||||
cocoapods-search (1.0.1)
|
|
||||||
cocoapods-trunk (1.6.0)
|
|
||||||
nap (>= 0.8, < 2.0)
|
|
||||||
netrc (~> 0.11)
|
|
||||||
cocoapods-try (1.2.0)
|
|
||||||
colored (1.2)
|
|
||||||
colored2 (3.1.2)
|
|
||||||
commander (4.6.0)
|
|
||||||
highline (~> 2.0.0)
|
|
||||||
concurrent-ruby (1.3.5)
|
|
||||||
connection_pool (2.5.0)
|
|
||||||
declarative (0.0.20)
|
|
||||||
digest-crc (0.7.0)
|
|
||||||
rake (>= 12.0.0, < 14.0.0)
|
|
||||||
domain_name (0.6.20240107)
|
|
||||||
dotenv (2.8.1)
|
|
||||||
drb (2.2.1)
|
|
||||||
emoji_regex (3.2.3)
|
|
||||||
escape (0.0.4)
|
|
||||||
ethon (0.16.0)
|
|
||||||
ffi (>= 1.15.0)
|
|
||||||
excon (0.112.0)
|
|
||||||
faraday (1.10.4)
|
|
||||||
faraday-em_http (~> 1.0)
|
|
||||||
faraday-em_synchrony (~> 1.0)
|
|
||||||
faraday-excon (~> 1.1)
|
|
||||||
faraday-httpclient (~> 1.0)
|
|
||||||
faraday-multipart (~> 1.0)
|
|
||||||
faraday-net_http (~> 1.0)
|
|
||||||
faraday-net_http_persistent (~> 1.0)
|
|
||||||
faraday-patron (~> 1.0)
|
|
||||||
faraday-rack (~> 1.0)
|
|
||||||
faraday-retry (~> 1.0)
|
|
||||||
ruby2_keywords (>= 0.0.4)
|
|
||||||
faraday-cookie_jar (0.0.7)
|
|
||||||
faraday (>= 0.8.0)
|
|
||||||
http-cookie (~> 1.0.0)
|
|
||||||
faraday-em_http (1.0.0)
|
|
||||||
faraday-em_synchrony (1.0.0)
|
|
||||||
faraday-excon (1.1.0)
|
|
||||||
faraday-httpclient (1.0.1)
|
|
||||||
faraday-multipart (1.1.0)
|
|
||||||
multipart-post (~> 2.0)
|
|
||||||
faraday-net_http (1.0.2)
|
|
||||||
faraday-net_http_persistent (1.2.0)
|
|
||||||
faraday-patron (1.0.0)
|
|
||||||
faraday-rack (1.0.0)
|
|
||||||
faraday-retry (1.0.3)
|
|
||||||
faraday_middleware (1.2.1)
|
|
||||||
faraday (~> 1.0)
|
|
||||||
fastimage (2.4.0)
|
|
||||||
fastlane (2.227.0)
|
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
|
||||||
addressable (>= 2.8, < 3.0.0)
|
|
||||||
artifactory (~> 3.0)
|
|
||||||
aws-sdk-s3 (~> 1.0)
|
|
||||||
babosa (>= 1.0.3, < 2.0.0)
|
|
||||||
bundler (>= 1.12.0, < 3.0.0)
|
|
||||||
colored (~> 1.2)
|
|
||||||
commander (~> 4.6)
|
|
||||||
dotenv (>= 2.1.1, < 3.0.0)
|
|
||||||
emoji_regex (>= 0.1, < 4.0)
|
|
||||||
excon (>= 0.71.0, < 1.0.0)
|
|
||||||
faraday (~> 1.0)
|
|
||||||
faraday-cookie_jar (~> 0.0.6)
|
|
||||||
faraday_middleware (~> 1.0)
|
|
||||||
fastimage (>= 2.1.0, < 3.0.0)
|
|
||||||
fastlane-sirp (>= 1.0.0)
|
|
||||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
|
||||||
google-apis-androidpublisher_v3 (~> 0.3)
|
|
||||||
google-apis-playcustomapp_v1 (~> 0.1)
|
|
||||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
|
||||||
google-cloud-storage (~> 1.31)
|
|
||||||
highline (~> 2.0)
|
|
||||||
http-cookie (~> 1.0.5)
|
|
||||||
json (< 3.0.0)
|
|
||||||
jwt (>= 2.1.0, < 3)
|
|
||||||
mini_magick (>= 4.9.4, < 5.0.0)
|
|
||||||
multipart-post (>= 2.0.0, < 3.0.0)
|
|
||||||
naturally (~> 2.2)
|
|
||||||
optparse (>= 0.1.1, < 1.0.0)
|
|
||||||
plist (>= 3.1.0, < 4.0.0)
|
|
||||||
rubyzip (>= 2.0.0, < 3.0.0)
|
|
||||||
security (= 0.1.5)
|
|
||||||
simctl (~> 1.6.3)
|
|
||||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
|
||||||
terminal-table (~> 3)
|
|
||||||
tty-screen (>= 0.6.3, < 1.0.0)
|
|
||||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
|
||||||
word_wrap (~> 1.0.0)
|
|
||||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
|
||||||
xcpretty (~> 0.4.0)
|
|
||||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
|
||||||
fastlane-sirp (1.0.0)
|
|
||||||
sysrandom (~> 1.0)
|
|
||||||
ffi (1.17.1)
|
|
||||||
ffi (1.17.1-aarch64-linux-gnu)
|
|
||||||
ffi (1.17.1-aarch64-linux-musl)
|
|
||||||
ffi (1.17.1-arm-linux-gnu)
|
|
||||||
ffi (1.17.1-arm-linux-musl)
|
|
||||||
ffi (1.17.1-arm64-darwin)
|
|
||||||
ffi (1.17.1-x86-linux-gnu)
|
|
||||||
ffi (1.17.1-x86-linux-musl)
|
|
||||||
ffi (1.17.1-x86_64-darwin)
|
|
||||||
ffi (1.17.1-x86_64-linux-gnu)
|
|
||||||
ffi (1.17.1-x86_64-linux-musl)
|
|
||||||
fourflusher (2.3.1)
|
|
||||||
fuzzy_match (2.0.4)
|
|
||||||
gh_inspector (1.1.3)
|
|
||||||
google-apis-androidpublisher_v3 (0.54.0)
|
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
|
||||||
google-apis-core (0.11.3)
|
|
||||||
addressable (~> 2.5, >= 2.5.1)
|
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
|
||||||
httpclient (>= 2.8.1, < 3.a)
|
|
||||||
mini_mime (~> 1.0)
|
|
||||||
representable (~> 3.0)
|
|
||||||
retriable (>= 2.0, < 4.a)
|
|
||||||
rexml
|
|
||||||
google-apis-iamcredentials_v1 (0.17.0)
|
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
|
||||||
google-apis-playcustomapp_v1 (0.13.0)
|
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
|
||||||
google-apis-storage_v1 (0.31.0)
|
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
|
||||||
google-cloud-core (1.8.0)
|
|
||||||
google-cloud-env (>= 1.0, < 3.a)
|
|
||||||
google-cloud-errors (~> 1.0)
|
|
||||||
google-cloud-env (1.6.0)
|
|
||||||
faraday (>= 0.17.3, < 3.0)
|
|
||||||
google-cloud-errors (1.5.0)
|
|
||||||
google-cloud-storage (1.47.0)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
digest-crc (~> 0.4)
|
|
||||||
google-apis-iamcredentials_v1 (~> 0.1)
|
|
||||||
google-apis-storage_v1 (~> 0.31.0)
|
|
||||||
google-cloud-core (~> 1.6)
|
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
|
||||||
mini_mime (~> 1.0)
|
|
||||||
googleauth (1.8.1)
|
|
||||||
faraday (>= 0.17.3, < 3.a)
|
|
||||||
jwt (>= 1.4, < 3.0)
|
|
||||||
multi_json (~> 1.11)
|
|
||||||
os (>= 0.9, < 2.0)
|
|
||||||
signet (>= 0.16, < 2.a)
|
|
||||||
highline (2.0.3)
|
|
||||||
http-cookie (1.0.8)
|
|
||||||
domain_name (~> 0.5)
|
|
||||||
httpclient (2.9.0)
|
|
||||||
mutex_m
|
|
||||||
i18n (1.14.7)
|
|
||||||
concurrent-ruby (~> 1.0)
|
|
||||||
jmespath (1.6.2)
|
|
||||||
json (2.10.2)
|
|
||||||
jwt (2.10.1)
|
|
||||||
base64
|
|
||||||
logger (1.6.6)
|
|
||||||
mini_magick (4.13.2)
|
|
||||||
mini_mime (1.1.5)
|
|
||||||
minitest (5.25.5)
|
|
||||||
molinillo (0.8.0)
|
|
||||||
multi_json (1.15.0)
|
|
||||||
multipart-post (2.4.1)
|
|
||||||
mutex_m (0.3.0)
|
|
||||||
nanaimo (0.4.0)
|
|
||||||
nap (1.1.0)
|
|
||||||
naturally (2.2.1)
|
|
||||||
netrc (0.11.0)
|
|
||||||
nkf (0.2.0)
|
|
||||||
optparse (0.6.0)
|
|
||||||
os (1.1.4)
|
|
||||||
plist (3.7.2)
|
|
||||||
public_suffix (4.0.7)
|
|
||||||
rake (13.2.1)
|
|
||||||
representable (3.2.0)
|
|
||||||
declarative (< 0.1.0)
|
|
||||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
|
||||||
uber (< 0.2.0)
|
|
||||||
retriable (3.1.2)
|
|
||||||
rexml (3.4.1)
|
|
||||||
rouge (3.28.0)
|
|
||||||
ruby-macho (2.5.1)
|
|
||||||
ruby2_keywords (0.0.5)
|
|
||||||
rubyzip (2.4.1)
|
|
||||||
securerandom (0.4.1)
|
|
||||||
security (0.1.5)
|
|
||||||
signet (0.19.0)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
faraday (>= 0.17.5, < 3.a)
|
|
||||||
jwt (>= 1.5, < 3.0)
|
|
||||||
multi_json (~> 1.10)
|
|
||||||
simctl (1.6.10)
|
|
||||||
CFPropertyList
|
|
||||||
naturally
|
|
||||||
sysrandom (1.0.5)
|
|
||||||
terminal-notifier (2.0.0)
|
|
||||||
terminal-table (3.0.2)
|
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
|
||||||
trailblazer-option (0.1.2)
|
|
||||||
tty-cursor (0.7.1)
|
|
||||||
tty-screen (0.8.2)
|
|
||||||
tty-spinner (0.9.3)
|
|
||||||
tty-cursor (~> 0.7)
|
|
||||||
typhoeus (1.4.1)
|
|
||||||
ethon (>= 0.9.0)
|
|
||||||
tzinfo (2.0.6)
|
|
||||||
concurrent-ruby (~> 1.0)
|
|
||||||
uber (0.1.0)
|
|
||||||
unicode-display_width (2.6.0)
|
|
||||||
word_wrap (1.0.0)
|
|
||||||
xcodeproj (1.27.0)
|
|
||||||
CFPropertyList (>= 2.3.3, < 4.0)
|
|
||||||
atomos (~> 0.1.3)
|
|
||||||
claide (>= 1.0.2, < 2.0)
|
|
||||||
colored2 (~> 3.1)
|
|
||||||
nanaimo (~> 0.4.0)
|
|
||||||
rexml (>= 3.3.6, < 4.0)
|
|
||||||
xcpretty (0.4.0)
|
|
||||||
rouge (~> 3.28.0)
|
|
||||||
xcpretty-travis-formatter (1.0.1)
|
|
||||||
xcpretty (~> 0.2, >= 0.0.7)
|
|
||||||
|
|
||||||
PLATFORMS
|
|
||||||
aarch64-linux-gnu
|
|
||||||
aarch64-linux-musl
|
|
||||||
arm-linux-gnu
|
|
||||||
arm-linux-musl
|
|
||||||
arm64-darwin
|
|
||||||
ruby
|
|
||||||
x86-linux-gnu
|
|
||||||
x86-linux-musl
|
|
||||||
x86_64-darwin
|
|
||||||
x86_64-linux-gnu
|
|
||||||
x86_64-linux-musl
|
|
||||||
|
|
||||||
DEPENDENCIES
|
|
||||||
cocoapods
|
|
||||||
fastlane
|
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
2.6.5
|
|
||||||
8
LICENSE
@@ -1,8 +0,0 @@
|
|||||||
The author disclaims copyright to this source code. In place of a legal notice, here is a blessing:
|
|
||||||
|
|
||||||
May you do good and not evil.
|
|
||||||
May you find forgiveness for yourself and forgive others.
|
|
||||||
May you share freely, never taking more than you give.
|
|
||||||
|
|
||||||
________________________________________________________________
|
|
||||||
from https://www.sqlite.org/src/info/689401a6cfb4c234 and memorialized here https://spdx.org/licenses/blessing.html
|
|
||||||
258
README.md
@@ -1,90 +1,99 @@
|
|||||||
# TimeSafari.app - Crowd-Funder for Time - PWA
|
# kickstart-for-time-pwa
|
||||||
|
|
||||||
[Time Safari](https://timesafari.org/) allows people to ease into collaboration: start with expressions of gratitude
|
## Project setup
|
||||||
and expand to crowd-fund with time & money, then record and see the impact of contributions.
|
|
||||||
|
|
||||||
## Roadmap
|
We have pkgx.dev set up in package.json, so you can use `dev` to set up the dev environment.
|
||||||
|
|
||||||
See [project.task.yaml](project.task.yaml) for current priorities.
|
```
|
||||||
(Numbers at the beginning of lines are estimated hours. See [taskyaml.org](https://taskyaml.org/) for details.)
|
|
||||||
|
|
||||||
## Setup & Building
|
|
||||||
|
|
||||||
Quick start:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
npm install
|
||||||
npm run dev
|
|
||||||
```
|
```
|
||||||
|
|
||||||
See [BUILDING.md](BUILDING.md) for more details.
|
### Compiles and hot-reloads for development
|
||||||
|
```
|
||||||
See the test locations for "IMAGE_API_SERVER" or "PARTNER_API_SERVER" below, or use http://localhost:3000 for local endorser.ch
|
npm run serve
|
||||||
|
|
||||||
|
|
||||||
### Run all UI tests
|
|
||||||
|
|
||||||
Look at [BUILDING.md](BUILDING.md) for the "test-all" instructions and [TESTING.md](test-playwright/TESTING.md) for more details.
|
|
||||||
|
|
||||||
|
|
||||||
### Compile and minify for test & production
|
|
||||||
|
|
||||||
* If there are DB changes: before updating the test server, open browser(s) with current version to test DB migrations.
|
|
||||||
|
|
||||||
* `npx prettier --write ./sw_scripts/`
|
|
||||||
|
|
||||||
* Update the ClickUp tasks & CHANGELOG.md & the version in package.json, run `npm install`.
|
|
||||||
|
|
||||||
* Commit everything (since the commit hash is used the app).
|
|
||||||
|
|
||||||
* Put the commit hash in the changelog (which will help you remember to bump the version later).
|
|
||||||
|
|
||||||
* Tag with the new version, [online](https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa/releases) or `git tag 0.3.55 && git push origin 0.3.55`.
|
|
||||||
|
|
||||||
* For test, build the app (because test server is not yet set up to build):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.app VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch VITE_PASSKEYS_ENABLED=true npm run build
|
|
||||||
```
|
```
|
||||||
|
|
||||||
... and transfer to the test server:
|
### Compiles and minifies for production
|
||||||
|
|
||||||
```bash
|
|
||||||
rsync -azvu -e "ssh -i ~/.ssh/..." dist ubuntutest@test.timesafari.app:time-safari
|
|
||||||
```
|
|
||||||
|
|
||||||
(Let's replace that with a .env.development or .env.staging file.)
|
|
||||||
|
|
||||||
(Note: The test BVC_MEETUPS_PROJECT_CLAIM_ID does not resolve as a URL because it's only in the test DB and the prod redirect won't redirect there.)
|
|
||||||
|
|
||||||
* For prod, get on the server and run the correct build:
|
|
||||||
|
|
||||||
... and log onto the server:
|
|
||||||
|
|
||||||
* `pkgx +npm sh`
|
|
||||||
|
|
||||||
* `cd crowd-funder-for-time-pwa && git checkout master && git pull && git checkout 0.3.55 && npm install && npm run build && cd -`
|
|
||||||
|
|
||||||
(The plain `npm run build` uses the .env.production file.)
|
|
||||||
|
|
||||||
* Back up the time-safari/dist folder & deploy: `mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist time-safari/`
|
|
||||||
|
|
||||||
* Record the new hash in the changelog. Edit package.json to increment version & add "-beta", `npm install`, and commit. Also record what version is on production.
|
|
||||||
|
|
||||||
|
|
||||||
|
If you are deploying in a subdirectory, add it to `publicPath` in vue.config.js, eg: `publicPath: "/app/time-tracker/",`
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lints and fixes files
|
||||||
|
```
|
||||||
|
npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
See [TESTING.md](test-playwright/TESTING.md) for detailed test instructions.
|
###
|
||||||
|
|
||||||
|
For your own web-push tests, change the 'vapid' URL in App.vue, and install apps on the same domain.
|
||||||
|
|
||||||
|
### Test key contents
|
||||||
|
|
||||||
|
See [this page](openssl_signing_console.rst)
|
||||||
|
|
||||||
|
### Register new user on test server
|
||||||
|
|
||||||
|
New users require registration. This can be done with a claim payload like this
|
||||||
|
by an existing user:
|
||||||
|
|
||||||
|
```
|
||||||
|
const vcClaim = {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "RegisterAction",
|
||||||
|
agent: { identifier: identity0.did },
|
||||||
|
object: SERVICE_ID,
|
||||||
|
participant: { identifier: newIdentity.did },
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
On the test server, User #0 has rights to register others, so you can start
|
||||||
|
playing one of two ways:
|
||||||
|
|
||||||
|
- Import the keys for the test User `did:ethr:0x000Ee5654b9742f6Fe18ea970e32b97ee2247B51` by importing this seed phrase:
|
||||||
|
`seminar accuse mystery assist delay law thing deal image undo guard initial shallow wrestle list fragile borrow velvet tomorrow awake explain test offer control`
|
||||||
|
(Other test users are found [here](https://github.com/trentlarson/endorser-ch/blob/master/test/util.js).)
|
||||||
|
|
||||||
|
- Alternatively, register someone else under User #0 automatically:
|
||||||
|
|
||||||
|
* In the `src/views/AccountViewView.vue` file, uncomment the lines referring to "testServerRegisterUser".
|
||||||
|
|
||||||
|
* Visit the `/account` page.
|
||||||
|
|
||||||
|
### Create multiple identifiers
|
||||||
|
|
||||||
|
Go to /start and create or import a new one. Then switch identifiers on the bottom of the Your Identity page.
|
||||||
|
|
||||||
|
### Create keys with alternate tools
|
||||||
|
|
||||||
|
See [this page](openssl_signing_console.rst)
|
||||||
|
|
||||||
|
### Customize Vue configuration
|
||||||
|
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||||
|
|
||||||
|
|
||||||
|
## Scenarios
|
||||||
|
|
||||||
|
- Create a new identity as prompted. Go to "Your Identity" screen and copy the ID to the clipboard.
|
||||||
|
|
||||||
|
- Go back to /start and import test User `did:ethr:0x000Ee5654b9742f6Fe18ea970e32b97ee2247B51` with this this seed phrase:
|
||||||
|
`seminar accuse mystery assist delay law thing deal image undo guard initial shallow wrestle list fragile borrow velvet tomorrow awake explain test offer control`
|
||||||
|
(Other test users are found [here](https://github.com/trentlarson/endorser-ch/blob/master/test/util.js).)
|
||||||
|
|
||||||
|
- Go to "Your Contacts" screen and add the ID you copied to the clipboard, and hit "+" to add them.
|
||||||
|
|
||||||
|
- Click on the "Registration Unknown" button and register that person to be able to make claims as them.
|
||||||
|
|
||||||
|
### Clear data & restart
|
||||||
|
|
||||||
|
Clear cache for localhost, then go to http://localhost:8080/start
|
||||||
|
(because it'll generate a new one automatically if you start on the `/account` page).
|
||||||
|
|
||||||
|
|
||||||
## Icons
|
|
||||||
|
|
||||||
To add an icon, add to main.ts and reference with `fa` element and `icon` attribute with the hyphenated name.
|
|
||||||
|
|
||||||
## Other
|
## Other
|
||||||
|
|
||||||
@@ -93,19 +102,114 @@ To add an icon, add to main.ts and reference with `fa` element and `icon` attrib
|
|||||||
* Notifications can be type of `toast` (self-dismiss), `info`, `success`, `warning`, and `danger`.
|
* Notifications can be type of `toast` (self-dismiss), `info`, `success`, `warning`, and `danger`.
|
||||||
They are done via [notiwind](https://www.npmjs.com/package/notiwind) and set up in App.vue.
|
They are done via [notiwind](https://www.npmjs.com/package/notiwind) and set up in App.vue.
|
||||||
|
|
||||||
* [Customize Vue configuration](https://cli.vuejs.org/config/).
|
```
|
||||||
|
// reference material from https://github.com/trentlarson/endorser-mobile/blob/8dc8e0353e0cc80ffa7ed89ded15c8b0da92726b/src/utility/idUtility.ts#L83
|
||||||
|
|
||||||
* If you are deploying in a subdirectory, add it to `publicPath` in vue.config.js, eg: `publicPath: "/app/time-tracker/",`
|
// Import an existing ID
|
||||||
|
export const importAndStoreIdentifier = async (mnemonic: string, mnemonicPassword: string, toLowercase: boolean, previousIdentifiers: Array<IIdentifier>) => {
|
||||||
|
|
||||||
### Kudos
|
// just to get rid of variability that might cause an error
|
||||||
|
mnemonic = mnemonic.trim().toLowerCase()
|
||||||
|
|
||||||
|
/**
|
||||||
|
// an approach I pieced together
|
||||||
|
// requires: yarn add elliptic
|
||||||
|
// ... plus:
|
||||||
|
// const EC = require('elliptic').ec
|
||||||
|
// const secp256k1 = new EC('secp256k1')
|
||||||
|
//
|
||||||
|
const keyHex: string = bip39.mnemonicToEntropy(mnemonic)
|
||||||
|
// returns a KeyPair from the elliptic.ec library
|
||||||
|
const keyPair = secp256k1.keyFromPrivate(keyHex, 'hex')
|
||||||
|
// this code is from did-provider-eth createIdentifier
|
||||||
|
const privateHex = keyPair.getPrivate('hex')
|
||||||
|
const publicHex = keyPair.getPublic('hex')
|
||||||
|
const address = didJwt.toEthereumAddress(publicHex)
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
// from https://github.com/uport-project/veramo/discussions/346#discussioncomment-302234
|
||||||
|
// ... which almost works but the didJwt.toEthereumAddress is wrong
|
||||||
|
// requires: yarn add bip32
|
||||||
|
// ... plus: import * as bip32 from 'bip32'
|
||||||
|
//
|
||||||
|
const seed: Buffer = await bip39.mnemonicToSeed(mnemonic)
|
||||||
|
const root = bip32.fromSeed(seed)
|
||||||
|
const node = root.derivePath(UPORT_ROOT_DERIVATION_PATH)
|
||||||
|
const privateHex = node.privateKey.toString("hex")
|
||||||
|
const publicHex = node.publicKey.toString("hex")
|
||||||
|
const address = didJwt.toEthereumAddress('0x' + publicHex)
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
// from https://github.com/uport-project/veramo/discussions/346#discussioncomment-302234
|
||||||
|
// requires: yarn add @ethersproject/hdnode
|
||||||
|
// ... plus: import { HDNode } from '@ethersproject/hdnode'
|
||||||
|
**/
|
||||||
|
const hdnode: HDNode = HDNode.fromMnemonic(mnemonic)
|
||||||
|
const rootNode: HDNode = hdnode.derivePath(UPORT_ROOT_DERIVATION_PATH)
|
||||||
|
const privateHex = rootNode.privateKey.substring(2) // original starts with '0x'
|
||||||
|
const publicHex = rootNode.publicKey.substring(2) // original starts with '0x'
|
||||||
|
let address = rootNode.address
|
||||||
|
|
||||||
|
const prevIds = previousIdentifiers || [];
|
||||||
|
|
||||||
|
if (toLowercase) {
|
||||||
|
const foundEqual = R.find(
|
||||||
|
(id) => utility.rawAddressOfDid(id.did) === address,
|
||||||
|
prevIds
|
||||||
|
)
|
||||||
|
if (foundEqual) {
|
||||||
|
// They're trying to create a lowercase version of one that exists in normal case.
|
||||||
|
// (We really should notify the user.)
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: true, msg: "Will create a normal-case version of the DID since a regular version exists."}))
|
||||||
|
} else {
|
||||||
|
address = address.toLowerCase()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// They're not trying to convert to lowercase.
|
||||||
|
const foundLower = R.find((id) =>
|
||||||
|
utility.rawAddressOfDid(id.did) === address.toLowerCase(),
|
||||||
|
prevIds
|
||||||
|
)
|
||||||
|
if (foundLower) {
|
||||||
|
// They're trying to create a normal case version of one that exists in lowercase.
|
||||||
|
// (We really should notify the user.)
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: true, msg: "Will create a lowercase version of the DID since a lowercase version exists."}))
|
||||||
|
address = address.toLowerCase()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: false, msg: "... derived keys and address..."}))
|
||||||
|
|
||||||
|
const newId = newIdentifier(address, publicHex, privateHex, UPORT_ROOT_DERIVATION_PATH)
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: false, msg: "... created new ID..."}))
|
||||||
|
|
||||||
|
// awaiting because otherwise the UI may not see that a mnemonic was created
|
||||||
|
const savedId = await storeIdentifier(newId, mnemonic, mnemonicPassword)
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: false, msg: "... stored new ID..."}))
|
||||||
|
return savedId
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a totally new ID
|
||||||
|
export const createAndStoreIdentifier = async (mnemonicPassword) => {
|
||||||
|
|
||||||
|
// This doesn't give us the entropy/seed.
|
||||||
|
//const id = await agent.didManagerCreate()
|
||||||
|
|
||||||
|
const entropy = crypto.randomBytes(32)
|
||||||
|
const mnemonic = bip39.entropyToMnemonic(entropy)
|
||||||
|
appStore.dispatch(appSlice.actions.addLog({log: false, msg: "... generated mnemonic..."}))
|
||||||
|
|
||||||
|
return importAndStoreIdentifier(mnemonic, mnemonicPassword, false, [])
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Kudos
|
||||||
|
|
||||||
Gifts make the world go 'round!
|
Gifts make the world go 'round!
|
||||||
|
|
||||||
* [WebStorm by JetBrains](https://www.jetbrains.com/webstorm/) for the free open-source license
|
|
||||||
* [Máximo Fernández](https://medium.com/@maxfarenas) for the 3D [code](https://github.com/maxfer03/vue-three-ns) and [explanatory post](https://medium.com/nicasource/building-an-interactive-web-portfolio-with-vue-three-js-part-three-implementing-three-js-452cb375ef80)
|
* [Máximo Fernández](https://medium.com/@maxfarenas) for the 3D [code](https://github.com/maxfer03/vue-three-ns) and [explanatory post](https://medium.com/nicasource/building-an-interactive-web-portfolio-with-vue-three-js-part-three-implementing-three-js-452cb375ef80)
|
||||||
* [Many tools & libraries](https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa/src/branch/master/package.json#L10) such as Nodejs.org, IntelliJ Idea, Veramo.io, Vuejs.org, threejs.org
|
* [Many tools & libraries]() such as Nodejs.org, IntelliJ Idea, Veramo.io, Vuejs.org, threejs.org
|
||||||
* [Bush 3D model](https://sketchfab.com/3d-models/lupine-plant-bf30f1110c174d4baedda0ed63778439)
|
* [Bush 3D model](https://sketchfab.com/3d-models/lupine-plant-bf30f1110c174d4baedda0ed63778439)
|
||||||
* [Forest floor image](https://www.goodfreephotos.com/albums/textures/leafy-autumn-forest-floor.jpg)
|
* [Forest floor image](https://www.goodfreephotos.com/albums/textures/leafy-autumn-forest-floor.jpg)
|
||||||
* Time Safari logo assisted by [DALL-E in ChatGPT](https://chat.openai.com/g/g-2fkFE8rbu-dall-e)
|
|
||||||
* [DiceBear](https://www.dicebear.com/licenses/) and [Avataaars](https://www.dicebear.com/styles/avataaars/#details) for human-looking identicons
|
|
||||||
* Some gratitude prompts thanks to [Develop Good Habits](https://www.developgoodhabits.com/gratitude-journal-prompts/)
|
|
||||||
|
|||||||
101
android/.gitignore
vendored
@@ -1,101 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#Tue Mar 11 10:01:05 UTC 2025
|
|
||||||
gradle.version=8.10.2
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
source "https://rubygems.org"
|
|
||||||
|
|
||||||
gem "fastlane"
|
|
||||||
3
android/app/.gitignore
vendored
@@ -1,3 +0,0 @@
|
|||||||
/build/*
|
|
||||||
!/build/.npmkeep
|
|
||||||
src/main/assets/public/assets/
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
apply plugin: 'com.android.application'
|
|
||||||
|
|
||||||
android {
|
|
||||||
namespace "app.timesafari"
|
|
||||||
compileSdk rootProject.ext.compileSdkVersion
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "app.timesafari"
|
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.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:!*~'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lintOptions {
|
|
||||||
disable 'UnsanitizedFilenameFromContentProvider'
|
|
||||||
abortOnError false
|
|
||||||
baseline file("lint-baseline.xml")
|
|
||||||
|
|
||||||
// Ignore Capacitor module issues
|
|
||||||
ignore 'DefaultLocale'
|
|
||||||
ignore 'UnsanitizedFilenameFromContentProvider'
|
|
||||||
ignore 'LintBaseline'
|
|
||||||
ignore 'LintBaselineFixed'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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')
|
|
||||||
}
|
|
||||||
|
|
||||||
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")
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
// 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')
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (hasProperty('postBuildExtras')) {
|
|
||||||
postBuildExtras()
|
|
||||||
}
|
|
||||||
@@ -1,398 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="true" name="AGP (8.1.0)" variant="all" version="8.1.0">
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnknownIssueId"
|
|
||||||
message="Unknown issue id "UnsanitizedFilenameFromContentProvider""
|
|
||||||
errorLine1=" disable 'UnsanitizedFilenameFromContentProvider'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="26"
|
|
||||||
column="18"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnknownIssueId"
|
|
||||||
message="Unknown issue id "UnsanitizedFilenameFromContentProvider""
|
|
||||||
errorLine1=" disable 'UnsanitizedFilenameFromContentProvider'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="26"
|
|
||||||
column="18"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnknownIssueId"
|
|
||||||
message="Unknown issue id "LintBaselineFixed""
|
|
||||||
errorLine1=" ignore 'LintBaselineFixed'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="34"
|
|
||||||
column="17"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnknownIssueId"
|
|
||||||
message="Unknown issue id "LintBaselineFixed""
|
|
||||||
errorLine1=" ignore 'LintBaselineFixed'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="34"
|
|
||||||
column="17"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="DefaultLocale"
|
|
||||||
message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
|
|
||||||
errorLine1=" String msg = String.format("
|
|
||||||
errorLine2=" ^">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/BridgeWebChromeClient.java"
|
|
||||||
line="467"
|
|
||||||
column="26"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="DefaultLocale"
|
|
||||||
message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
|
|
||||||
errorLine1=" return mask.toUpperCase().equals(string.toUpperCase());"
|
|
||||||
errorLine2=" ~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/util/HostMask.java"
|
|
||||||
line="110"
|
|
||||||
column="29"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="DefaultLocale"
|
|
||||||
message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
|
|
||||||
errorLine1=" return mask.toUpperCase().equals(string.toUpperCase());"
|
|
||||||
errorLine2=" ~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/util/HostMask.java"
|
|
||||||
line="110"
|
|
||||||
column="57"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="DefaultLocale"
|
|
||||||
message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
|
|
||||||
errorLine1=" if (header.getKey().equalsIgnoreCase("Accept") && header.getValue().toLowerCase().contains("text/html")) {"
|
|
||||||
errorLine2=" ~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/WebViewLocalServer.java"
|
|
||||||
line="474"
|
|
||||||
column="93"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="SimpleDateFormat"
|
|
||||||
message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
|
|
||||||
errorLine1=" String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/BridgeWebChromeClient.java"
|
|
||||||
line="504"
|
|
||||||
column="28"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="SimpleDateFormat"
|
|
||||||
message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
|
|
||||||
errorLine1=" DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/PluginResult.java"
|
|
||||||
line="44"
|
|
||||||
column="25"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedAttribute"
|
|
||||||
message="Attribute `usesCleartextTraffic` is only used in API level 23 and higher (current min is 22)"
|
|
||||||
errorLine1="<application android:usesCleartextTraffic="true">"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/AndroidManifest.xml"
|
|
||||||
line="4"
|
|
||||||
column="15"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedAttribute"
|
|
||||||
message="Attribute `autoVerify` is only used in API level 23 and higher (current min is 22)"
|
|
||||||
errorLine1=" <intent-filter android:autoVerify="true">"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/AndroidManifest.xml"
|
|
||||||
line="25"
|
|
||||||
column="28"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="ManifestOrder"
|
|
||||||
message="`<uses-permission>` tag appears after `<application>` tag"
|
|
||||||
errorLine1=" <uses-permission android:name="android.permission.INTERNET" />"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/AndroidManifest.xml"
|
|
||||||
line="47"
|
|
||||||
column="6"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="AndroidGradlePluginVersion"
|
|
||||||
message="A newer version of com.android.tools.build:gradle than 8.2.1 is available: 8.9.0. (There is also a newer version of 8.2.𝑥 available, if upgrading to 8.9.0 is difficult: 8.2.2)"
|
|
||||||
errorLine1=" classpath 'com.android.tools.build:gradle:8.2.1'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="12"
|
|
||||||
column="9"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="AndroidGradlePluginVersion"
|
|
||||||
message="A newer version of com.android.tools.build:gradle than 8.2.1 is available: 8.9.0. (There is also a newer version of 8.2.𝑥 available, if upgrading to 8.9.0 is difficult: 8.2.2)"
|
|
||||||
errorLine1=" classpath 'com.android.tools.build:gradle:8.2.1'"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="18"
|
|
||||||
column="9"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
|
|
||||||
errorLine1=" implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="46"
|
|
||||||
column="20"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
|
|
||||||
errorLine1=" implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="46"
|
|
||||||
column="20"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.coordinatorlayout:coordinatorlayout than 1.2.0 is available: 1.3.0"
|
|
||||||
errorLine1=" implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="47"
|
|
||||||
column="20"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.test.ext:junit than 1.1.5 is available: 1.2.1"
|
|
||||||
errorLine1=" androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="51"
|
|
||||||
column="31"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.test.espresso:espresso-core than 3.5.1 is available: 3.6.1"
|
|
||||||
errorLine1=" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="52"
|
|
||||||
column="31"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
|
|
||||||
errorLine1=" implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="75"
|
|
||||||
column="20"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.test.ext:junit than 1.1.5 is available: 1.2.1"
|
|
||||||
errorLine1=" androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="77"
|
|
||||||
column="31"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="GradleDependency"
|
|
||||||
message="A newer version of androidx.test.espresso:espresso-core than 3.5.1 is available: 3.6.1"
|
|
||||||
errorLine1=" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="build.gradle"
|
|
||||||
line="78"
|
|
||||||
column="31"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="Recycle"
|
|
||||||
message="This `TypedArray` should be recycled after use with `#recycle()`"
|
|
||||||
errorLine1=" TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.bridge_fragment);"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/java/com/getcapacitor/BridgeFragment.java"
|
|
||||||
line="99"
|
|
||||||
column="32"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="Overdraw"
|
|
||||||
message="Possible overdraw: Root element paints background `#F0FF1414` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
|
|
||||||
errorLine1=" android:background="#F0FF1414""
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/res/layout/fragment_bridge.xml"
|
|
||||||
line="5"
|
|
||||||
column="5"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.layout.activity_main` appears to be unused"
|
|
||||||
errorLine1="<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android""
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/layout/activity_main.xml"
|
|
||||||
line="2"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.xml.config` appears to be unused"
|
|
||||||
errorLine1="<widget version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">"
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/xml/config.xml"
|
|
||||||
line="2"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.drawable.ic_launcher_background` appears to be unused"
|
|
||||||
errorLine1="<vector xmlns:android="http://schemas.android.com/apk/res/android""
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable/ic_launcher_background.xml"
|
|
||||||
line="2"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.drawable.ic_launcher_foreground` appears to be unused"
|
|
||||||
errorLine1="<vector xmlns:android="http://schemas.android.com/apk/res/android""
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-v24/ic_launcher_foreground.xml"
|
|
||||||
line="1"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.string.package_name` appears to be unused"
|
|
||||||
errorLine1=" <string name="package_name">app.timesafari.app</string>"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/res/values/strings.xml"
|
|
||||||
line="5"
|
|
||||||
column="13"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedResources"
|
|
||||||
message="The resource `R.string.custom_url_scheme` appears to be unused"
|
|
||||||
errorLine1=" <string name="custom_url_scheme">app.timesafari.app</string>"
|
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
|
||||||
<location
|
|
||||||
file="src/main/res/values/strings.xml"
|
|
||||||
line="6"
|
|
||||||
column="13"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="MonochromeLauncherIcon"
|
|
||||||
message="The application adaptive icon is missing a monochrome tag"
|
|
||||||
errorLine1="<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">"
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/mipmap-anydpi-v26/ic_launcher.xml"
|
|
||||||
line="2"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="MonochromeLauncherIcon"
|
|
||||||
message="The application adaptive roundIcon is missing a monochrome tag"
|
|
||||||
errorLine1="<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">"
|
|
||||||
errorLine2="^">
|
|
||||||
<location
|
|
||||||
file="src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml"
|
|
||||||
line="2"
|
|
||||||
column="1"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="IconDipSize"
|
|
||||||
message="The image `splash.png` varies significantly in its density-independent (dip) size across the various density versions: drawable-land-hdpi/splash.png: 533x320 dp (800x480 px), drawable-land-mdpi/splash.png: 480x320 dp (480x320 px), drawable-land-xhdpi/splash.png: 640x360 dp (1280x720 px), drawable-land-xxhdpi/splash.png: 533x320 dp (1600x960 px), drawable-land-xxxhdpi/splash.png: 480x320 dp (1920x1280 px)">
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-mdpi/splash.png"/>
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-xxxhdpi/splash.png"/>
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-hdpi/splash.png"/>
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-xxhdpi/splash.png"/>
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-xhdpi/splash.png"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="IconDuplicatesConfig"
|
|
||||||
message="The `splash.png` icon has identical contents in the following configuration folders: drawable-land-mdpi, drawable">
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable/splash.png"/>
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable-land-mdpi/splash.png"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="IconLocation"
|
|
||||||
message="Found bitmap drawable `res/drawable/splash.png` in densityless folder">
|
|
||||||
<location
|
|
||||||
file="src/main/res/drawable/splash.png"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
</issues>
|
|
||||||
21
android/app/proguard-rules.pro
vendored
@@ -1,21 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package app.timesafari.app;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class ExampleInstrumentedTest {
|
|
||||||
@Test
|
|
||||||
public void useAppContext() {
|
|
||||||
// Context of the app under test.
|
|
||||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
|
||||||
assertEquals("app.timesafari", appContext.getPackageName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:allowBackup="true"
|
|
||||||
android:icon="@mipmap/ic_launcher"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
|
||||||
android:supportsRtl="true"
|
|
||||||
android:theme="@style/AppTheme">
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
|
|
||||||
android:name=".MainActivity"
|
|
||||||
android:label="@string/title_activity_main"
|
|
||||||
android:theme="@style/AppTheme.NoActionBarLaunch"
|
|
||||||
android:launchMode="singleTask"
|
|
||||||
android:exported="true">
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<intent-filter android:autoVerify="true">
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
<data android:scheme="timesafari" />
|
|
||||||
</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>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"appId": "app.timesafari.app",
|
|
||||||
"appName": "TimeSafari",
|
|
||||||
"webDir": "dist",
|
|
||||||
"bundledWebRuntime": false,
|
|
||||||
"server": {
|
|
||||||
"cleartext": true
|
|
||||||
},
|
|
||||||
"plugins": {
|
|
||||||
"App": {
|
|
||||||
"appUrlOpen": {
|
|
||||||
"handlers": [
|
|
||||||
{
|
|
||||||
"url": "timesafari://*",
|
|
||||||
"autoVerify": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/app",
|
|
||||||
"classpath": "com.capacitorjs.plugins.app.AppPlugin"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 270 KiB |
|
Before Width: | Height: | Size: 332 KiB |
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 463 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,86 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
||||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
||||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
|
|
||||||
preserveAspectRatio="xMidYMid meet">
|
|
||||||
|
|
||||||
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
|
|
||||||
fill="#000000" stroke="none">
|
|
||||||
<path d="M2480 4005 c-25 -7 -58 -20 -75 -29 -16 -9 -40 -16 -52 -16 -17 0
|
|
||||||
-24 -7 -28 -27 -3 -16 -14 -45 -24 -65 -21 -41 -13 -55 18 -38 25 13 67 13 92
|
|
||||||
-1 15 -8 35 -4 87 17 99 39 130 41 197 10 64 -29 77 -31 107 -15 20 11 20 11
|
|
||||||
-3 35 -12 13 -30 24 -38 24 -24 1 -132 38 -148 51 -8 7 -11 20 -7 32 12 37
|
|
||||||
-40 47 -126 22z"/>
|
|
||||||
<path d="M1450 3775 c-7 -8 -18 -15 -24 -15 -7 0 -31 -14 -54 -32 -29 -22 -38
|
|
||||||
-34 -29 -40 17 -11 77 -10 77 1 0 5 16 16 35 25 60 29 220 19 290 -18 17 -9
|
|
||||||
33 -16 37 -16 4 0 31 -15 60 -34 108 -70 224 -215 282 -353 30 -71 53 -190 42
|
|
||||||
-218 -10 -27 -23 -8 -52 75 -30 90 -88 188 -120 202 -13 6 -26 9 -29 6 -3 -2
|
|
||||||
11 -51 30 -108 28 -83 35 -119 35 -179 0 -120 -22 -127 -54 -17 -11 37 -13 21
|
|
||||||
-18 -154 -5 -180 -8 -200 -32 -264 -51 -132 -129 -245 -199 -288 -21 -12 -79
|
|
||||||
-49 -129 -80 -161 -102 -294 -141 -473 -141 -228 0 -384 76 -535 259 -81 99
|
|
||||||
-118 174 -154 312 -31 121 -35 273 -11 437 19 127 19 125 -4 125 -23 0 -51
|
|
||||||
-34 -87 -104 -14 -28 -33 -64 -41 -81 -19 -34 -22 -253 -7 -445 9 -106 12
|
|
||||||
-119 44 -170 19 -30 42 -67 50 -81 64 -113 85 -140 130 -169 28 -18 53 -44 61
|
|
||||||
-62 8 -20 36 -45 83 -76 62 -39 80 -46 151 -54 44 -5 96 -13 115 -18 78 -20
|
|
||||||
238 -31 282 -19 24 6 66 8 95 5 76 -9 169 24 319 114 32 19 80 56 106 82 27
|
|
||||||
26 52 48 58 48 5 0 27 26 50 58 48 66 56 70 132 71 62 1 165 29 238 64 112 55
|
|
||||||
177 121 239 245 37 76 39 113 10 267 -12 61 -23 131 -26 156 -5 46 -5 47 46
|
|
||||||
87 92 73 182 70 263 -8 l51 -49 -6 -61 c-4 -34 -13 -85 -21 -113 -28 -103 -30
|
|
||||||
-161 -4 -228 16 -44 32 -67 55 -83 18 -11 39 -37 47 -58 10 -23 37 -53 73 -81
|
|
||||||
32 -25 69 -57 82 -71 14 -14 34 -26 47 -26 12 0 37 -7 56 -15 20 -8 66 -17
|
|
||||||
104 -20 107 -10 110 -11 150 -71 50 -75 157 -177 197 -187 18 -5 53 -24 78
|
|
||||||
-42 71 -51 176 -82 304 -89 61 -4 127 -12 147 -18 29 -9 45 -8 77 6 23 9 50
|
|
||||||
16 60 16 31 0 163 46 216 76 28 15 75 46 105 69 30 23 69 49 85 58 17 8 46 31
|
|
||||||
64 51 19 20 40 36 47 36 18 0 77 70 100 120 32 66 45 108 55 173 5 32 16 71
|
|
||||||
24 87 43 84 43 376 0 549 -27 105 -43 127 -135 188 -30 21 -65 46 -77 57 -13
|
|
||||||
11 -23 17 -23 14 0 -3 21 -46 47 -94 79 -151 85 -166 115 -263 25 -83 28 -110
|
|
||||||
28 -226 0 -144 -17 -221 -75 -335 -39 -77 -208 -244 -304 -299 -451 -263 -975
|
|
||||||
-67 -1138 426 -23 70 -26 95 -28 254 -1 108 -7 183 -14 196 -6 12 -11 31 -11
|
|
||||||
43 0 32 31 122 52 149 10 13 18 28 18 34 0 5 25 40 56 78 60 73 172 170 219
|
|
||||||
190 30 12 30 13 6 17 -15 2 -29 -2 -37 -12 -6 -9 -16 -16 -22 -16 -6 0 -23
|
|
||||||
-11 -39 -24 -15 -12 -33 -25 -40 -27 -17 -6 -82 -60 -117 -97 -65 -70 -75 -82
|
|
||||||
-107 -133 -23 -34 -35 -46 -37 -35 -3 16 20 87 44 134 6 12 9 34 6 48 -4 22
|
|
||||||
-8 25 -31 19 -14 -3 -38 -15 -53 -26 -34 -24 -34 -21 -6 28 65 112 184 206
|
|
||||||
291 227 15 3 39 9 55 12 l27 6 -24 9 c-90 35 -304 -66 -478 -225 -39 -36 -74
|
|
||||||
-66 -77 -66 -22 0 18 82 72 148 19 23 32 46 28 49 -4 4 -26 13 -49 19 -73 21
|
|
||||||
-161 54 -171 64 -6 6 -20 10 -32 10 -21 0 -21 -1 -8 -40 45 -130 8 -247 -93
|
|
||||||
-299 -25 -13 -31 0 -14 29 15 22 1 33 -22 17 -56 -36 -117 -22 -117 28 0 13
|
|
||||||
-16 47 -35 76 -22 34 -33 60 -29 73 4 16 -3 26 -26 39 -16 10 -30 21 -30 25 1
|
|
||||||
18 54 64 87 76 l38 13 -33 5 c-30 4 -115 -18 -154 -42 -13 -7 -20 -5 -27 8 -9
|
|
||||||
16 -12 16 -53 1 -160 -61 -258 -104 -258 -114 0 -7 10 -20 21 -31 103 -91 217
|
|
||||||
-297 249 -449 28 -135 41 -237 35 -276 -14 -91 -48 -170 -97 -220 -44 -47 -68
|
|
||||||
-60 -68 -40 0 6 4 12 8 15 5 3 24 35 42 72 l33 67 -6 141 c-4 103 -11 158 -26
|
|
||||||
205 -12 35 -21 70 -21 77 0 7 -20 56 -45 108 -82 173 -227 322 -392 401 -67
|
|
||||||
33 -90 39 -163 42 -108 5 -130 10 -130 28 0 20 -63 20 -80 0z"/>
|
|
||||||
<path d="M3710 3765 c0 -20 8 -28 39 -41 22 -8 42 -22 45 -30 5 -14 42 -19 70
|
|
||||||
-8 10 4 -7 21 -58 55 -41 27 -79 49 -85 49 -6 0 -11 -11 -11 -25z"/>
|
|
||||||
<path d="M3173 3734 c-9 -25 10 -36 35 -18 12 8 22 19 22 25 0 16 -50 10 -57
|
|
||||||
-7z"/>
|
|
||||||
<path d="M1982 3728 c6 -16 36 -34 44 -26 3 4 4 14 1 23 -7 17 -51 21 -45 3z"/>
|
|
||||||
<path d="M1540 3620 c0 -5 7 -10 16 -10 8 0 12 5 9 10 -3 6 -10 10 -16 10 -5
|
|
||||||
0 -9 -4 -9 -10z"/>
|
|
||||||
<path d="M4467 3624 c-4 -4 23 -27 60 -50 84 -56 99 -58 67 -9 -28 43 -107 79
|
|
||||||
-127 59z"/>
|
|
||||||
<path d="M655 3552 c-11 -2 -26 -9 -33 -14 -7 -6 -27 -18 -45 -27 -36 -18 -58
|
|
||||||
-64 -39 -83 9 -9 25 1 70 43 53 48 78 78 70 84 -2 1 -12 -1 -23 -3z"/>
|
|
||||||
<path d="M1015 3460 c-112 -24 -247 -98 -303 -165 -53 -65 -118 -214 -136
|
|
||||||
-311 -20 -113 -20 -145 -1 -231 20 -88 49 -153 102 -230 79 -113 186 -182 331
|
|
||||||
-214 108 -24 141 -24 247 1 130 30 202 72 316 181 102 100 153 227 152 384 0
|
|
||||||
142 -58 293 -150 395 -60 67 -180 145 -261 171 -75 23 -232 34 -297 19z m340
|
|
||||||
-214 c91 -43 174 -154 175 -234 0 -18 -9 -51 -21 -73 -19 -37 -19 -42 -5 -64
|
|
||||||
35 -54 12 -121 -48 -142 -22 -7 -47 -19 -55 -27 -9 -8 -41 -27 -71 -42 -50
|
|
||||||
-26 -64 -29 -155 -29 -111 0 -152 14 -206 68 -49 49 -63 85 -64 162 0 59 4 78
|
|
||||||
28 118 31 52 96 105 141 114 23 5 33 17 56 68 46 103 121 130 225 81z"/>
|
|
||||||
<path d="M3985 3464 c-44 -7 -154 -44 -200 -67 -55 -28 -138 -96 -162 -132
|
|
||||||
-10 -16 -39 -75 -64 -130 l-44 -100 0 -160 0 -160 45 -90 c53 -108 152 -214
|
|
||||||
245 -264 59 -31 215 -71 281 -71 53 0 206 40 255 67 98 53 203 161 247 253 53
|
|
||||||
113 74 193 74 280 -1 304 -253 564 -557 575 -49 2 -103 1 -120 -1z m311 -220
|
|
||||||
c129 -68 202 -209 160 -309 -15 -35 -15 -42 -1 -72 26 -55 -3 -118 -59 -129
|
|
||||||
-19 -3 -43 -15 -53 -26 -26 -29 -99 -64 -165 -78 -45 -10 -69 -10 -120 -1 -74
|
|
||||||
15 -113 37 -161 91 -110 120 -50 331 109 385 24 8 44 23 52 39 6 14 18 38 25
|
|
||||||
53 33 72 127 93 213 47z"/>
|
|
||||||
<path d="M487 3394 c-21 -12 -27 -21 -25 -40 2 -14 7 -26 12 -27 14 -3 48 48
|
|
||||||
44 66 -3 14 -6 14 -31 1z"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 705 KiB |
@@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<link rel="icon" href="/favicon.ico">
|
|
||||||
<title>TimeSafari</title>
|
|
||||||
<script type="module" crossorigin src="/assets/index-CI0bMoT0.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<noscript>
|
|
||||||
<strong>We're sorry but TimeSafari doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
|
||||||
</noscript>
|
|
||||||
<div id="app"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
Model Information:
|
|
||||||
* title: Lupine Plant
|
|
||||||
* source: https://sketchfab.com/3d-models/lupine-plant-bf30f1110c174d4baedda0ed63778439
|
|
||||||
* author: rufusrockwell (https://sketchfab.com/rufusrockwell)
|
|
||||||
|
|
||||||
Model License:
|
|
||||||
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
|
||||||
* requirements: Author must be credited. Commercial use is allowed.
|
|
||||||
|
|
||||||
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
|
|
||||||
This work is based on "Lupine Plant" (https://sketchfab.com/3d-models/lupine-plant-bf30f1110c174d4baedda0ed63778439) by rufusrockwell (https://sketchfab.com/rufusrockwell) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
{
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2759,
|
|
||||||
"max": [
|
|
||||||
41.3074951171875,
|
|
||||||
40.37548828125,
|
|
||||||
87.85917663574219
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-35.245540618896484,
|
|
||||||
-36.895416259765625,
|
|
||||||
-0.9094290137290955
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"byteOffset": 33108,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2759,
|
|
||||||
"max": [
|
|
||||||
0.9999382495880127,
|
|
||||||
0.9986748695373535,
|
|
||||||
0.9985831379890442
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.9998949766159058,
|
|
||||||
-0.9975876212120056,
|
|
||||||
-0.411094069480896
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 3,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2759,
|
|
||||||
"max": [
|
|
||||||
0.9987699389457703,
|
|
||||||
0.9998998045921326,
|
|
||||||
0.9577858448028564,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.9987726807594299,
|
|
||||||
-0.9990445971488953,
|
|
||||||
-0.999801516532898,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"type": "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2759,
|
|
||||||
"max": [
|
|
||||||
1.0061479806900024,
|
|
||||||
0.9993550181388855
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.00279300007969141,
|
|
||||||
0.0011620000004768372
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"componentType": 5125,
|
|
||||||
"count": 6378,
|
|
||||||
"type": "SCALAR"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset": {
|
|
||||||
"extras": {
|
|
||||||
"author": "rufusrockwell (https://sketchfab.com/rufusrockwell)",
|
|
||||||
"license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
|
|
||||||
"source": "https://sketchfab.com/3d-models/lupine-plant-bf30f1110c174d4baedda0ed63778439",
|
|
||||||
"title": "Lupine Plant"
|
|
||||||
},
|
|
||||||
"generator": "Sketchfab-12.68.0",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 25512,
|
|
||||||
"name": "floatBufferViews",
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 22072,
|
|
||||||
"byteOffset": 25512,
|
|
||||||
"byteStride": 8,
|
|
||||||
"name": "floatBufferViews",
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 66216,
|
|
||||||
"byteOffset": 47584,
|
|
||||||
"byteStride": 12,
|
|
||||||
"name": "floatBufferViews",
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteLength": 44144,
|
|
||||||
"byteOffset": 113800,
|
|
||||||
"byteStride": 16,
|
|
||||||
"name": "floatBufferViews",
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 157944,
|
|
||||||
"uri": "scene.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"uri": "textures/lambert2SG_baseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "textures/lambert2SG_normal.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"alphaCutoff": 0.2,
|
|
||||||
"alphaMode": "MASK",
|
|
||||||
"doubleSided": true,
|
|
||||||
"name": "lambert2SG",
|
|
||||||
"normalTexture": {
|
|
||||||
"index": 1
|
|
||||||
},
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorTexture": {
|
|
||||||
"index": 0
|
|
||||||
},
|
|
||||||
"metallicFactor": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"name": "Object_0",
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 1,
|
|
||||||
"POSITION": 0,
|
|
||||||
"TANGENT": 2,
|
|
||||||
"TEXCOORD_0": 3
|
|
||||||
},
|
|
||||||
"indices": 4,
|
|
||||||
"material": 0,
|
|
||||||
"mode": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"children": [
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"matrix": [
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
2.220446049250313e-16,
|
|
||||||
-1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
1.0,
|
|
||||||
2.220446049250313e-16,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"name": "Sketchfab_model"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"children": [
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"name": "LupineSF.obj.cleaner.materialmerger.gles"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mesh": 0,
|
|
||||||
"name": "Object_2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers": [
|
|
||||||
{
|
|
||||||
"magFilter": 9729,
|
|
||||||
"minFilter": 9987,
|
|
||||||
"wrapS": 10497,
|
|
||||||
"wrapT": 10497
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"name": "Sketchfab_Scene",
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures": [
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 4.7 MiB |
@@ -1,2 +0,0 @@
|
|||||||
User-agent: *
|
|
||||||
Disallow:
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package app.timesafari.app;
|
|
||||||
|
|
||||||
import com.getcapacitor.BridgeActivity;
|
|
||||||
|
|
||||||
public class MainActivity extends BridgeActivity {}
|
|
||||||
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB |
@@ -1,34 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path
|
|
||||||
android:fillType="evenOdd"
|
|
||||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1">
|
|
||||||
<aapt:attr name="android:fillColor">
|
|
||||||
<gradient
|
|
||||||
android:endX="78.5885"
|
|
||||||
android:endY="90.9159"
|
|
||||||
android:startX="48.7653"
|
|
||||||
android:startY="61.0927"
|
|
||||||
android:type="linear">
|
|
||||||
<item
|
|
||||||
android:color="#44000000"
|
|
||||||
android:offset="0.0" />
|
|
||||||
<item
|
|
||||||
android:color="#00000000"
|
|
||||||
android:offset="1.0" />
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
<path
|
|
||||||
android:fillColor="#FFFFFF"
|
|
||||||
android:fillType="nonZero"
|
|
||||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1" />
|
|
||||||
</vector>
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path
|
|
||||||
android:fillColor="#26A69A"
|
|
||||||
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>
|
|
||||||
|
Before Width: | Height: | Size: 3.9 KiB |
@@ -1,12 +0,0 @@
|
|||||||
<?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>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 16 KiB |