Compare commits
No commits in common. 'master' and 'main' have entirely different histories.
@ -1,4 +0,0 @@ |
|||||
> 1% |
|
||||
last 2 versions |
|
||||
not dead |
|
||||
not ie 11 |
|
@ -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 |
|
@ -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 |
|
@ -1,31 +0,0 @@ |
|||||
module.exports = { |
|
||||
root: true, |
|
||||
env: { |
|
||||
node: true, |
|
||||
es2022: true, |
|
||||
}, |
|
||||
extends: [ |
|
||||
"plugin:vue/vue3-recommended", |
|
||||
"eslint:recommended", |
|
||||
"@vue/typescript/recommended", |
|
||||
"plugin:prettier/recommended" |
|
||||
], |
|
||||
// parserOptions: {
|
|
||||
// ecmaVersion: 2020,
|
|
||||
// },
|
|
||||
rules: { |
|
||||
"max-len": ["warn", { |
|
||||
code: 100, |
|
||||
ignoreComments: true, |
|
||||
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" |
|
||||
}, |
|
||||
}; |
|
@ -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 |
|
@ -1,55 +1,9 @@ |
|||||
squashfs-root |
dist/ |
||||
dist-electron |
node_modules/ |
||||
dist-electon-build |
|
||||
.DS_Store |
.DS_Store |
||||
node_modules |
Pods/ |
||||
dist |
*.iml |
||||
signature.bin |
.idea/ |
||||
# generated during `npm run build` |
.vscode/ |
||||
sw_scripts-combined.js |
build/ |
||||
*.pem |
*.tgz |
||||
verified.txt |
|
||||
myenv |
|
||||
|
|
||||
*~ |
|
||||
# local env files |
|
||||
.env.local |
|
||||
.env.*.local |
|
||||
|
|
||||
# Log filesopenssl dgst -sha256 -verify public.pem -signature <(echo -n "$signature") "$signing_input" |
|
||||
npm-debug.log* |
|
||||
yarn-debug.log* |
|
||||
yarn-error.log* |
|
||||
pnpm-debug.log* |
|
||||
|
|
||||
# Editor directories and files |
|
||||
.idea |
|
||||
.vscode |
|
||||
*.suo |
|
||||
*.ntvs* |
|
||||
*.njsproj |
|
||||
*.sln |
|
||||
*.sw? |
|
||||
/test-results/ |
|
||||
/playwright-report/ |
|
||||
/blob-report/ |
|
||||
/playwright/.cache/ |
|
||||
/dist-electron-build/ |
|
||||
/dist-capacitor/ |
|
||||
/test-playwright-results/ |
|
||||
playwright-tests |
|
||||
dist-electron-packages |
|
||||
.ruby-version |
|
||||
+.env |
|
||||
|
|
||||
# Generated test files |
|
||||
.generated/ |
|
||||
|
|
||||
.env.default |
|
||||
vendor/ |
|
||||
|
|
||||
# Build logs |
|
||||
build_logs/ |
|
||||
|
|
||||
# PWA icon files generated by capacitor-assets |
|
||||
icons |
|
||||
|
@ -1,528 +0,0 @@ |
|||||
# Building TimeSafari |
|
||||
|
|
||||
This guide explains how to build TimeSafari for different platforms. |
|
||||
|
|
||||
## Prerequisites |
|
||||
|
|
||||
For a quick dev environment setup, use [pkgx](https://pkgx.dev). |
|
||||
|
|
||||
- Node.js (LTS version recommended) |
|
||||
- npm (comes with Node.js) |
|
||||
- Git |
|
||||
- For Android builds: Android Studio with SDK installed |
|
||||
- For iOS builds: macOS with Xcode and ruby gems & bundle |
|
||||
- pkgx +rubygems.org sh |
|
||||
|
|
||||
- ... and you may have to fix these, especially with pkgx |
|
||||
|
|
||||
```bash |
|
||||
gem_path=$(which gem) |
|
||||
shortened_path="${gem_path:h:h}" |
|
||||
export GEM_HOME=$shortened_path |
|
||||
export GEM_PATH=$shortened_path |
|
||||
``` |
|
||||
|
|
||||
- For desktop builds: Additional build tools based on your OS |
|
||||
|
|
||||
## Forks |
|
||||
|
|
||||
If you have forked this to make your own app, you'll want to customize the iOS & Android files. You can either edit existing ones, or you can remove the `ios` and `android` directories and regenerate them before the `npx cap sync` step in each setup. |
|
||||
|
|
||||
```bash |
|
||||
npx cap add android |
|
||||
npx cap add ios |
|
||||
``` |
|
||||
|
|
||||
You'll also want to edit the deep link configuration (see below). |
|
||||
|
|
||||
## Initial Setup |
|
||||
|
|
||||
Install dependencies: |
|
||||
|
|
||||
```bash |
|
||||
npm install |
|
||||
``` |
|
||||
|
|
||||
## Web Dev Locally |
|
||||
|
|
||||
```bash |
|
||||
npm run dev |
|
||||
``` |
|
||||
|
|
||||
## Web Build for Server |
|
||||
|
|
||||
1. Run the production build: |
|
||||
|
|
||||
```bash |
|
||||
npm run build |
|
||||
``` |
|
||||
|
|
||||
The built files will be in the `dist` directory. |
|
||||
|
|
||||
2. To test the production build locally: |
|
||||
|
|
||||
You'll likely want to use test locations for the Endorser & image & partner servers; see "DEFAULT_ENDORSER_API_SERVER" & "DEFAULT_IMAGE_API_SERVER" & "DEFAULT_PARTNER_API_SERVER" below. |
|
||||
|
|
||||
```bash |
|
||||
npm run serve |
|
||||
``` |
|
||||
|
|
||||
### 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: |
|
||||
|
|
||||
```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. |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
## Desktop Build (Electron) |
|
||||
|
|
||||
### Linux Build |
|
||||
|
|
||||
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. Copy the assets: |
|
||||
|
|
||||
```bash |
|
||||
# It makes no sense why capacitor-assets will not run without these but it actually changes the contents. |
|
||||
mkdir -p ios/App/App/Assets.xcassets/AppIcon.appiconset |
|
||||
echo '{"images":[]}' > ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json |
|
||||
mkdir -p ios/App/App/Assets.xcassets/Splash.imageset |
|
||||
echo '{"images":[]}' > ios/App/App/Assets.xcassets/Splash.imageset/Contents.json |
|
||||
npx capacitor-assets generate --ios |
|
||||
``` |
|
||||
|
|
||||
3. Open the project in Xcode: |
|
||||
|
|
||||
```bash |
|
||||
npx cap open ios |
|
||||
``` |
|
||||
|
|
||||
4. Use Xcode to build and run on simulator or device. |
|
||||
|
|
||||
#### First-time iOS Configuration |
|
||||
|
|
||||
- Generate certificates inside XCode. |
|
||||
|
|
||||
- Right-click on App and under Signing & Capabilities set the Team. |
|
||||
|
|
||||
### 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. Copy the assets |
|
||||
|
|
||||
```bash |
|
||||
npx capacitor-assets generate --android |
|
||||
``` |
|
||||
|
|
||||
4. Open the project in Android Studio: |
|
||||
|
|
||||
```bash |
|
||||
npx cap open android |
|
||||
``` |
|
||||
|
|
||||
5. Use Android Studio to build and run on emulator or device. |
|
||||
|
|
||||
## Android Build from the console |
|
||||
|
|
||||
```bash |
|
||||
cd android |
|
||||
./gradlew clean |
|
||||
./gradlew build -Dlint.baselines.continue=true |
|
||||
cd .. |
|
||||
npx cap run android |
|
||||
``` |
|
||||
|
|
||||
... or, to create the `aab` file, `bundle` instead of `build`: |
|
||||
|
|
||||
```bash |
|
||||
./gradlew bundleDebug -Dlint.baselines.continue=true |
|
||||
``` |
|
||||
|
|
||||
... or, to create a signed release, add the app/gradle.properties.secrets file (see properties at top of app/build.gradle) and the app/time-safari-upload-key-pkcs12.jks file, then `bundleRelease`: |
|
||||
|
|
||||
```bash |
|
||||
./gradlew bundleRelease -Dlint.baselines.continue=true |
|
||||
``` |
|
||||
|
|
||||
|
|
||||
|
|
||||
## First-time Android Configuration 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 all tests (requires XCode and Android Studio/device): |
|
||||
|
|
||||
```bash |
|
||||
npm run test:all |
|
||||
``` |
|
||||
|
|
||||
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 |
|
||||
|
|
||||
|
|
||||
# List all installed packages |
|
||||
adb shell pm list packages | grep timesafari |
|
||||
|
|
||||
# Force stop the app (if it's running) |
|
||||
adb shell am force-stop app.timesafari |
|
||||
|
|
||||
# Clear app data (if you don't want to fully uninstall) |
|
||||
adb shell pm clear app.timesafari |
|
||||
|
|
||||
# Uninstall for all users |
|
||||
adb shell pm uninstall -k --user 0 app.timesafari |
|
||||
|
|
||||
# Check if app is installed |
|
||||
adb shell pm path app.timesafari |
|
@ -1,729 +0,0 @@ |
|||||
# Changelog |
|
||||
|
|
||||
All notable changes to this project will be documented in this file. |
|
||||
|
|
||||
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). |
|
||||
|
|
||||
|
|
||||
|
|
||||
## [0.4.5] - 2025.02.23 |
|
||||
### 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. |
|
@ -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. |
|
@ -1,5 +0,0 @@ |
|||||
source "https://rubygems.org" |
|
||||
|
|
||||
gem "fastlane" |
|
||||
gem "cocoapods" |
|
||||
|
|
@ -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 |
|
@ -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 |
|
@ -1,58 +0,0 @@ |
|||||
# TimeSafari.app - Crowd-Funder for Time - PWA |
|
||||
|
|
||||
[Time Safari](https://timesafari.org/) allows people to ease into collaboration: start with expressions of gratitude |
|
||||
and expand to crowd-fund with time & money, then record and see the impact of contributions. |
|
||||
|
|
||||
## Roadmap |
|
||||
|
|
||||
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 run dev |
|
||||
``` |
|
||||
|
|
||||
See [BUILDING.md](BUILDING.md) for more details. |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
## Tests |
|
||||
|
|
||||
See [TESTING.md](test-playwright/TESTING.md) for detailed test instructions. |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
## Icons |
|
||||
|
|
||||
To add an icon, add to main.ts and reference with `fa` element and `icon` attribute with the hyphenated name. |
|
||||
|
|
||||
## Other |
|
||||
|
|
||||
### Reference Material |
|
||||
|
|
||||
* 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. |
|
||||
|
|
||||
* [Customize Vue configuration](https://cli.vuejs.org/config/). |
|
||||
|
|
||||
* If you are deploying in a subdirectory, add it to `publicPath` in vue.config.js, eg: `publicPath: "/app/time-tracker/",` |
|
||||
|
|
||||
### Kudos |
|
||||
|
|
||||
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) |
|
||||
* [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 |
|
||||
* [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) |
|
||||
* 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/) |
|
@ -1,109 +0,0 @@ |
|||||
# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore |
|
||||
|
|
||||
app/gradle.properties.secrets |
|
||||
app/time-safari-upload-key-pkcs12.jks |
|
||||
|
|
||||
# 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 |
|
||||
|
|
||||
# Generated Icons from capacitor-assets |
|
||||
app/src/main/res/drawable/*.png |
|
||||
app/src/main/res/drawable-*/*.png |
|
||||
app/src/main/res/mipmap-*/*.png |
|
@ -1,2 +0,0 @@ |
|||||
#Fri Mar 21 07:27:50 UTC 2025 |
|
||||
gradle.version=8.2.1 |
|
@ -1,2 +0,0 @@ |
|||||
/build/* |
|
||||
!/build/.npmkeep |
|
@ -1,109 +0,0 @@ |
|||||
apply plugin: 'com.android.application' |
|
||||
|
|
||||
// These are sample values to set in gradle.properties.secrets |
|
||||
// MY_KEYSTORE_FILE=time-safari-upload-key-pkcs12.jks |
|
||||
// MY_KEYSTORE_PASSWORD=... |
|
||||
// MY_KEY_ALIAS=time-safari-key-alias |
|
||||
// MY_KEY_PASSWORD=... |
|
||||
|
|
||||
// Try to load from environment variables first |
|
||||
project.ext.MY_KEYSTORE_FILE = System.getenv('ANDROID_KEYSTORE_FILE') ?: "" |
|
||||
project.ext.MY_KEYSTORE_PASSWORD = System.getenv('ANDROID_KEYSTORE_PASSWORD') ?: "" |
|
||||
project.ext.MY_KEY_ALIAS = System.getenv('ANDROID_KEY_ALIAS') ?: "" |
|
||||
project.ext.MY_KEY_PASSWORD = System.getenv('ANDROID_KEY_PASSWORD') ?: "" |
|
||||
|
|
||||
// If no environment variables, try to load from secrets file |
|
||||
if (!project.ext.MY_KEYSTORE_FILE) { |
|
||||
def secretsPropertiesFile = rootProject.file("gradle.properties.secrets") |
|
||||
if (secretsPropertiesFile.exists()) { |
|
||||
Properties secretsProperties = new Properties() |
|
||||
secretsProperties.load(new FileInputStream(secretsPropertiesFile)) |
|
||||
secretsProperties.each { name, value -> |
|
||||
project.ext[name] = value |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
android { |
|
||||
namespace 'app.timesafari' |
|
||||
compileSdk rootProject.ext.compileSdkVersion |
|
||||
defaultConfig { |
|
||||
applicationId "app.timesafari.app" |
|
||||
minSdkVersion rootProject.ext.minSdkVersion |
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion |
|
||||
versionCode 9 |
|
||||
versionName "0.4.4" |
|
||||
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:!*~' |
|
||||
} |
|
||||
} |
|
||||
signingConfigs { |
|
||||
release { |
|
||||
if (project.ext.MY_KEYSTORE_FILE && |
|
||||
project.ext.MY_KEYSTORE_PASSWORD && |
|
||||
project.ext.MY_KEY_ALIAS && |
|
||||
project.ext.MY_KEY_PASSWORD) { |
|
||||
|
|
||||
storeFile file(project.ext.MY_KEYSTORE_FILE) |
|
||||
storePassword project.ext.MY_KEYSTORE_PASSWORD |
|
||||
keyAlias project.ext.MY_KEY_ALIAS |
|
||||
keyPassword project.ext.MY_KEY_PASSWORD |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
buildTypes { |
|
||||
release { |
|
||||
minifyEnabled false |
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' |
|
||||
// Only sign if we have the signing config |
|
||||
if (signingConfigs.release.storeFile != null) { |
|
||||
signingConfig signingConfigs.release |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// Enable bundle builds (without which it doesn't work right for bundleDebug vs bundleRelease) |
|
||||
bundle { |
|
||||
language { |
|
||||
enableSplit = true |
|
||||
} |
|
||||
density { |
|
||||
enableSplit = true |
|
||||
} |
|
||||
abi { |
|
||||
enableSplit = true |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
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,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,26 +0,0 @@ |
|||||
package com.getcapacitor.myapp; |
|
||||
|
|
||||
import static org.junit.Assert.*; |
|
||||
|
|
||||
import android.content.Context; |
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4; |
|
||||
import androidx.test.platform.app.InstrumentationRegistry; |
|
||||
import org.junit.Test; |
|
||||
import org.junit.runner.RunWith; |
|
||||
|
|
||||
/** |
|
||||
* Instrumented test, which will execute on an Android device. |
|
||||
* |
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|
||||
*/ |
|
||||
@RunWith(AndroidJUnit4.class) |
|
||||
public class ExampleInstrumentedTest { |
|
||||
|
|
||||
@Test |
|
||||
public void useAppContext() throws Exception { |
|
||||
// Context of the app under test.
|
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); |
|
||||
|
|
||||
assertEquals("app.timesafari.app", 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:name=".MainActivity" |
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" |
|
||||
android:exported="true" |
|
||||
android:label="@string/title_activity_main" |
|
||||
android:launchMode="singleTask" |
|
||||
android:theme="@style/AppTheme.NoActionBarLaunch"> |
|
||||
|
|
||||
<intent-filter> |
|
||||
<action android:name="android.intent.action.MAIN" /> |
|
||||
<category android:name="android.intent.category.LAUNCHER" /> |
|
||||
</intent-filter> |
|
||||
|
|
||||
<intent-filter> |
|
||||
<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 |
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-CZMUlUNO.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,7 +0,0 @@ |
|||||
package app.timesafari; |
|
||||
|
|
||||
import com.getcapacitor.BridgeActivity; |
|
||||
|
|
||||
public class MainActivity extends BridgeActivity { |
|
||||
// ... existing code ...
|
|
||||
} |
|
@ -1,5 +0,0 @@ |
|||||
package timesafari.app; |
|
||||
|
|
||||
import com.getcapacitor.BridgeActivity; |
|
||||
|
|
||||
public class MainActivity extends BridgeActivity {} |
|
@ -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> |
|
@ -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,9 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
||||
<background> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_background" android:inset="16.7%" /> |
|
||||
</background> |
|
||||
<foreground> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_foreground" android:inset="16.7%" /> |
|
||||
</foreground> |
|
||||
</adaptive-icon> |
|
@ -1,9 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
||||
<background> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_background" android:inset="16.7%" /> |
|
||||
</background> |
|
||||
<foreground> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_foreground" android:inset="16.7%" /> |
|
||||
</foreground> |
|
||||
</adaptive-icon> |
|
@ -1,4 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<resources> |
|
||||
<color name="ic_launcher_background">#FFFFFF</color> |
|
||||
</resources> |
|
@ -1,7 +0,0 @@ |
|||||
<?xml version='1.0' encoding='utf-8'?> |
|
||||
<resources> |
|
||||
<string name="app_name">TimeSafari</string> |
|
||||
<string name="title_activity_main">TimeSafari</string> |
|
||||
<string name="package_name">timesafari.app</string> |
|
||||
<string name="custom_url_scheme">timesafari.app</string> |
|
||||
</resources> |
|
@ -1,22 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<resources> |
|
||||
|
|
||||
<!-- Base application theme. --> |
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
|
||||
<!-- Customize your theme here. --> |
|
||||
<item name="colorPrimary">@color/colorPrimary</item> |
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> |
|
||||
<item name="colorAccent">@color/colorAccent</item> |
|
||||
</style> |
|
||||
|
|
||||
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar"> |
|
||||
<item name="windowActionBar">false</item> |
|
||||
<item name="windowNoTitle">true</item> |
|
||||
<item name="android:background">@null</item> |
|
||||
</style> |
|
||||
|
|
||||
|
|
||||
<style name="AppTheme.NoActionBarLaunch" parent="Theme.SplashScreen"> |
|
||||
<item name="android:background">@drawable/splash</item> |
|
||||
</style> |
|
||||
</resources> |
|
@ -1,6 +0,0 @@ |
|||||
<?xml version='1.0' encoding='utf-8'?> |
|
||||
<widget version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> |
|
||||
<access origin="*" /> |
|
||||
|
|
||||
|
|
||||
</widget> |
|
@ -1,5 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android"> |
|
||||
<external-path name="my_images" path="." /> |
|
||||
<cache-path name="my_cache_images" path="." /> |
|
||||
</paths> |
|
@ -1,18 +0,0 @@ |
|||||
package com.getcapacitor.myapp; |
|
||||
|
|
||||
import static org.junit.Assert.*; |
|
||||
|
|
||||
import org.junit.Test; |
|
||||
|
|
||||
/** |
|
||||
* Example local unit test, which will execute on the development machine (host). |
|
||||
* |
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|
||||
*/ |
|
||||
public class ExampleUnitTest { |
|
||||
|
|
||||
@Test |
|
||||
public void addition_isCorrect() throws Exception { |
|
||||
assertEquals(4, 2 + 2); |
|
||||
} |
|
||||
} |
|
@ -1,29 +0,0 @@ |
|||||
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
|
||||
|
|
||||
buildscript { |
|
||||
|
|
||||
repositories { |
|
||||
google() |
|
||||
mavenCentral() |
|
||||
} |
|
||||
dependencies { |
|
||||
classpath 'com.android.tools.build:gradle:8.2.1' |
|
||||
classpath 'com.google.gms:google-services:4.4.0' |
|
||||
|
|
||||
// NOTE: Do not place your application dependencies here; they belong |
|
||||
// in the individual module build.gradle files |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
apply from: "variables.gradle" |
|
||||
|
|
||||
allprojects { |
|
||||
repositories { |
|
||||
google() |
|
||||
mavenCentral() |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
task clean(type: Delete) { |
|
||||
delete rootProject.buildDir |
|
||||
} |
|
@ -1,59 +0,0 @@ |
|||||
ext { |
|
||||
androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1' |
|
||||
cordovaAndroidVersion = project.hasProperty('cordovaAndroidVersion') ? rootProject.ext.cordovaAndroidVersion : '10.1.1' |
|
||||
} |
|
||||
|
|
||||
buildscript { |
|
||||
repositories { |
|
||||
google() |
|
||||
mavenCentral() |
|
||||
} |
|
||||
dependencies { |
|
||||
classpath 'com.android.tools.build:gradle:8.2.1' |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
apply plugin: 'com.android.library' |
|
||||
|
|
||||
android { |
|
||||
namespace "capacitor.cordova.android.plugins" |
|
||||
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34 |
|
||||
defaultConfig { |
|
||||
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22 |
|
||||
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34 |
|
||||
versionCode 1 |
|
||||
versionName "1.0" |
|
||||
} |
|
||||
lintOptions { |
|
||||
abortOnError false |
|
||||
} |
|
||||
compileOptions { |
|
||||
sourceCompatibility JavaVersion.VERSION_17 |
|
||||
targetCompatibility JavaVersion.VERSION_17 |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
repositories { |
|
||||
google() |
|
||||
mavenCentral() |
|
||||
flatDir{ |
|
||||
dirs 'src/main/libs', 'libs' |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
dependencies { |
|
||||
implementation fileTree(dir: 'src/main/libs', include: ['*.jar']) |
|
||||
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" |
|
||||
implementation "org.apache.cordova:framework:$cordovaAndroidVersion" |
|
||||
// SUB-PROJECT DEPENDENCIES START |
|
||||
|
|
||||
// SUB-PROJECT DEPENDENCIES END |
|
||||
} |
|
||||
|
|
||||
// PLUGIN GRADLE EXTENSIONS START |
|
||||
apply from: "cordova.variables.gradle" |
|
||||
// PLUGIN GRADLE EXTENSIONS END |
|
||||
|
|
||||
for (def func : cdvPluginPostBuildExtras) { |
|
||||
func() |
|
||||
} |
|
@ -1,7 +0,0 @@ |
|||||
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN |
|
||||
ext { |
|
||||
cdvMinSdkVersion = project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22 |
|
||||
// Plugin gradle extensions can append to this to have code run at the end. |
|
||||
cdvPluginPostBuildExtras = [] |
|
||||
cordovaConfig = [:] |
|
||||
} |
|
@ -1,8 +0,0 @@ |
|||||
<?xml version='1.0' encoding='utf-8'?> |
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|
||||
xmlns:amazon="http://schemas.amazon.com/apk/res/android"> |
|
||||
<application android:usesCleartextTraffic="true"> |
|
||||
|
|
||||
</application> |
|
||||
|
|
||||
</manifest> |
|
@ -1 +0,0 @@ |
|||||
|
|
@ -1,6 +0,0 @@ |
|||||
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN |
|
||||
include ':capacitor-android' |
|
||||
project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') |
|
||||
|
|
||||
include ':capacitor-app' |
|
||||
project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android') |
|
@ -1,23 +0,0 @@ |
|||||
# Project-wide Gradle settings. |
|
||||
|
|
||||
# IDE (e.g. Android Studio) users: |
|
||||
# Gradle settings configured through the IDE *will override* |
|
||||
# any settings specified in this file. |
|
||||
|
|
||||
# For more details on how to configure your build environment visit |
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html |
|
||||
|
|
||||
# Specifies the JVM arguments used for the daemon process. |
|
||||
# The setting is particularly useful for tweaking memory settings. |
|
||||
org.gradle.jvmargs=-Xmx1536m |
|
||||
|
|
||||
# When configured, Gradle will run in incubating parallel mode. |
|
||||
# This option should only be used with decoupled projects. More details, visit |
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects |
|
||||
# org.gradle.parallel=true |
|
||||
|
|
||||
# AndroidX package structure to make it clearer which packages are bundled with the |
|
||||
# Android operating system, and which are packaged with your app's APK |
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn |
|
||||
android.useAndroidX=true |
|
||||
android.suppressUnsupportedCompileSdk=34 |
|
@ -1,7 +0,0 @@ |
|||||
distributionBase=GRADLE_USER_HOME |
|
||||
distributionPath=wrapper/dists |
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip |
|
||||
networkTimeout=10000 |
|
||||
validateDistributionUrl=true |
|
||||
zipStoreBase=GRADLE_USER_HOME |
|
||||
zipStorePath=wrapper/dists |
|
@ -1,248 +0,0 @@ |
|||||
#!/bin/sh |
|
||||
|
|
||||
# |
|
||||
# Copyright © 2015-2021 the original authors. |
|
||||
# |
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
# you may not use this file except in compliance with the License. |
|
||||
# You may obtain a copy of the License at |
|
||||
# |
|
||||
# https://www.apache.org/licenses/LICENSE-2.0 |
|
||||
# |
|
||||
# Unless required by applicable law or agreed to in writing, software |
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
# See the License for the specific language governing permissions and |
|
||||
# limitations under the License. |
|
||||
# |
|
||||
|
|
||||
############################################################################## |
|
||||
# |
|
||||
# Gradle start up script for POSIX generated by Gradle. |
|
||||
# |
|
||||
# Important for running: |
|
||||
# |
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is |
|
||||
# noncompliant, but you have some other compliant shell such as ksh or |
|
||||
# bash, then to run this script, type that shell name before the whole |
|
||||
# command line, like: |
|
||||
# |
|
||||
# ksh Gradle |
|
||||
# |
|
||||
# Busybox and similar reduced shells will NOT work, because this script |
|
||||
# requires all of these POSIX shell features: |
|
||||
# * functions; |
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», |
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»; |
|
||||
# * compound commands having a testable exit status, especially «case»; |
|
||||
# * various built-in commands including «command», «set», and «ulimit». |
|
||||
# |
|
||||
# Important for patching: |
|
||||
# |
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided |
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided. |
|
||||
# |
|
||||
# The "traditional" practice of packing multiple parameters into a |
|
||||
# space-separated string is a well documented source of bugs and security |
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating |
|
||||
# options in "$@", and eventually passing that to Java. |
|
||||
# |
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, |
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; |
|
||||
# see the in-line comments for details. |
|
||||
# |
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin, |
|
||||
# Darwin, MinGW, and NonStop. |
|
||||
# |
|
||||
# (3) This script is generated from the Groovy template |
|
||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt |
|
||||
# within the Gradle project. |
|
||||
# |
|
||||
# You can find Gradle at https://github.com/gradle/gradle/. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
|
||||
# Attempt to set APP_HOME |
|
||||
|
|
||||
# Resolve links: $0 may be a link |
|
||||
app_path=$0 |
|
||||
|
|
||||
# Need this for daisy-chained symlinks. |
|
||||
while |
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path |
|
||||
[ -h "$app_path" ] |
|
||||
do |
|
||||
ls=$( ls -ld "$app_path" ) |
|
||||
link=${ls#*' -> '} |
|
||||
case $link in #( |
|
||||
/*) app_path=$link ;; #( |
|
||||
*) app_path=$APP_HOME$link ;; |
|
||||
esac |
|
||||
done |
|
||||
|
|
||||
# This is normally unused |
|
||||
# shellcheck disable=SC2034 |
|
||||
APP_BASE_NAME=${0##*/} |
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit |
|
||||
|
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value. |
|
||||
MAX_FD=maximum |
|
||||
|
|
||||
warn () { |
|
||||
echo "$*" |
|
||||
} >&2 |
|
||||
|
|
||||
die () { |
|
||||
echo |
|
||||
echo "$*" |
|
||||
echo |
|
||||
exit 1 |
|
||||
} >&2 |
|
||||
|
|
||||
# OS specific support (must be 'true' or 'false'). |
|
||||
cygwin=false |
|
||||
msys=false |
|
||||
darwin=false |
|
||||
nonstop=false |
|
||||
case "$( uname )" in #( |
|
||||
CYGWIN* ) cygwin=true ;; #( |
|
||||
Darwin* ) darwin=true ;; #( |
|
||||
MSYS* | MINGW* ) msys=true ;; #( |
|
||||
NONSTOP* ) nonstop=true ;; |
|
||||
esac |
|
||||
|
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
|
||||
|
|
||||
|
|
||||
# Determine the Java command to use to start the JVM. |
|
||||
if [ -n "$JAVA_HOME" ] ; then |
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
|
||||
# IBM's JDK on AIX uses strange locations for the executables |
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java |
|
||||
else |
|
||||
JAVACMD=$JAVA_HOME/bin/java |
|
||||
fi |
|
||||
if [ ! -x "$JAVACMD" ] ; then |
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
|
||||
|
|
||||
Please set the JAVA_HOME variable in your environment to match the |
|
||||
location of your Java installation." |
|
||||
fi |
|
||||
else |
|
||||
JAVACMD=java |
|
||||
if ! command -v java >/dev/null 2>&1 |
|
||||
then |
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|
||||
|
|
||||
Please set the JAVA_HOME variable in your environment to match the |
|
||||
location of your Java installation." |
|
||||
fi |
|
||||
fi |
|
||||
|
|
||||
# Increase the maximum file descriptors if we can. |
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then |
|
||||
case $MAX_FD in #( |
|
||||
max*) |
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. |
|
||||
# shellcheck disable=SC3045 |
|
||||
MAX_FD=$( ulimit -H -n ) || |
|
||||
warn "Could not query maximum file descriptor limit" |
|
||||
esac |
|
||||
case $MAX_FD in #( |
|
||||
'' | soft) :;; #( |
|
||||
*) |
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. |
|
||||
# shellcheck disable=SC3045 |
|
||||
ulimit -n "$MAX_FD" || |
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD" |
|
||||
esac |
|
||||
fi |
|
||||
|
|
||||
# Collect all arguments for the java command, stacking in reverse order: |
|
||||
# * args from the command line |
|
||||
# * the main class name |
|
||||
# * -classpath |
|
||||
# * -D...appname settings |
|
||||
# * --module-path (only if needed) |
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. |
|
||||
|
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java |
|
||||
if "$cygwin" || "$msys" ; then |
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) |
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) |
|
||||
|
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" ) |
|
||||
|
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
|
||||
for arg do |
|
||||
if |
|
||||
case $arg in #( |
|
||||
-*) false ;; # don't mess with options #( |
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath |
|
||||
[ -e "$t" ] ;; #( |
|
||||
*) false ;; |
|
||||
esac |
|
||||
then |
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" ) |
|
||||
fi |
|
||||
# Roll the args list around exactly as many times as the number of |
|
||||
# args, so each arg winds up back in the position where it started, but |
|
||||
# possibly modified. |
|
||||
# |
|
||||
# NB: a `for` loop captures its iteration list before it begins, so |
|
||||
# changing the positional parameters here affects neither the number of |
|
||||
# iterations, nor the values presented in `arg`. |
|
||||
shift # remove old arg |
|
||||
set -- "$@" "$arg" # push replacement arg |
|
||||
done |
|
||||
fi |
|
||||
|
|
||||
|
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' |
|
||||
|
|
||||
# Collect all arguments for the java command; |
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of |
|
||||
# shell script including quotes and variable substitutions, so put them in |
|
||||
# double quotes to make sure that they get re-expanded; and |
|
||||
# * put everything else in single quotes, so that it's not re-expanded. |
|
||||
|
|
||||
set -- \ |
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \ |
|
||||
-classpath "$CLASSPATH" \ |
|
||||
org.gradle.wrapper.GradleWrapperMain \ |
|
||||
"$@" |
|
||||
|
|
||||
# Stop when "xargs" is not available. |
|
||||
if ! command -v xargs >/dev/null 2>&1 |
|
||||
then |
|
||||
die "xargs is not available" |
|
||||
fi |
|
||||
|
|
||||
# Use "xargs" to parse quoted args. |
|
||||
# |
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. |
|
||||
# |
|
||||
# In Bash we could simply go: |
|
||||
# |
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) && |
|
||||
# set -- "${ARGS[@]}" "$@" |
|
||||
# |
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we |
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any |
|
||||
# character that might be a shell metacharacter, then use eval to reverse |
|
||||
# that process (while maintaining the separation between arguments), and wrap |
|
||||
# the whole thing up as a single "set" statement. |
|
||||
# |
|
||||
# This will of course break if any of these variables contains a newline or |
|
||||
# an unmatched quote. |
|
||||
# |
|
||||
|
|
||||
eval "set -- $( |
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | |
|
||||
xargs -n1 | |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | |
|
||||
tr '\n' ' ' |
|
||||
)" '"$@"' |
|
||||
|
|
||||
exec "$JAVACMD" "$@" |
|
@ -1,92 +0,0 @@ |
|||||
@rem |
|
||||
@rem Copyright 2015 the original author or authors. |
|
||||
@rem |
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
@rem you may not use this file except in compliance with the License. |
|
||||
@rem You may obtain a copy of the License at |
|
||||
@rem |
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0 |
|
||||
@rem |
|
||||
@rem Unless required by applicable law or agreed to in writing, software |
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
@rem See the License for the specific language governing permissions and |
|
||||
@rem limitations under the License. |
|
||||
@rem |
|
||||
|
|
||||
@if "%DEBUG%"=="" @echo off |
|
||||
@rem ########################################################################## |
|
||||
@rem |
|
||||
@rem Gradle startup script for Windows |
|
||||
@rem |
|
||||
@rem ########################################################################## |
|
||||
|
|
||||
@rem Set local scope for the variables with windows NT shell |
|
||||
if "%OS%"=="Windows_NT" setlocal |
|
||||
|
|
||||
set DIRNAME=%~dp0 |
|
||||
if "%DIRNAME%"=="" set DIRNAME=. |
|
||||
@rem This is normally unused |
|
||||
set APP_BASE_NAME=%~n0 |
|
||||
set APP_HOME=%DIRNAME% |
|
||||
|
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter. |
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi |
|
||||
|
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" |
|
||||
|
|
||||
@rem Find java.exe |
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome |
|
||||
|
|
||||
set JAVA_EXE=java.exe |
|
||||
%JAVA_EXE% -version >NUL 2>&1 |
|
||||
if %ERRORLEVEL% equ 0 goto execute |
|
||||
|
|
||||
echo. |
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|
||||
echo. |
|
||||
echo Please set the JAVA_HOME variable in your environment to match the |
|
||||
echo location of your Java installation. |
|
||||
|
|
||||
goto fail |
|
||||
|
|
||||
:findJavaFromJavaHome |
|
||||
set JAVA_HOME=%JAVA_HOME:"=% |
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe |
|
||||
|
|
||||
if exist "%JAVA_EXE%" goto execute |
|
||||
|
|
||||
echo. |
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |
|
||||
echo. |
|
||||
echo Please set the JAVA_HOME variable in your environment to match the |
|
||||
echo location of your Java installation. |
|
||||
|
|
||||
goto fail |
|
||||
|
|
||||
:execute |
|
||||
@rem Setup the command line |
|
||||
|
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |
|
||||
|
|
||||
|
|
||||
@rem Execute Gradle |
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* |
|
||||
|
|
||||
:end |
|
||||
@rem End local scope for the variables with windows NT shell |
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd |
|
||||
|
|
||||
:fail |
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of |
|
||||
rem the _cmd.exe /c_ return code! |
|
||||
set EXIT_CODE=%ERRORLEVEL% |
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1 |
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% |
|
||||
exit /b %EXIT_CODE% |
|
||||
|
|
||||
:mainEnd |
|
||||
if "%OS%"=="Windows_NT" endlocal |
|
||||
|
|
||||
:omega |
|
@ -1,5 +0,0 @@ |
|||||
include ':app' |
|
||||
include ':capacitor-cordova-android-plugins' |
|
||||
project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') |
|
||||
|
|
||||
apply from: 'capacitor.settings.gradle' |
|
@ -1,16 +0,0 @@ |
|||||
ext { |
|
||||
minSdkVersion = 22 |
|
||||
compileSdkVersion = 34 |
|
||||
targetSdkVersion = 34 |
|
||||
androidxActivityVersion = '1.8.0' |
|
||||
androidxAppCompatVersion = '1.6.1' |
|
||||
androidxCoordinatorLayoutVersion = '1.2.0' |
|
||||
androidxCoreVersion = '1.12.0' |
|
||||
androidxFragmentVersion = '1.6.2' |
|
||||
coreSplashScreenVersion = '1.0.1' |
|
||||
androidxWebkitVersion = '1.9.0' |
|
||||
junitVersion = '4.13.2' |
|
||||
androidxJunitVersion = '1.1.5' |
|
||||
androidxEspressoCoreVersion = '3.5.1' |
|
||||
cordovaAndroidVersion = '10.1.1' |
|
||||
} |
|
Before Width: | Height: | Size: 99 KiB |
@ -1,25 +0,0 @@ |
|||||
import { CapacitorConfig } from '@capacitor/cli'; |
|
||||
|
|
||||
const config: CapacitorConfig = { |
|
||||
appId: 'app.timesafari', |
|
||||
appName: 'TimeSafari', |
|
||||
webDir: 'dist', |
|
||||
bundledWebRuntime: false, |
|
||||
server: { |
|
||||
cleartext: true, |
|
||||
}, |
|
||||
plugins: { |
|
||||
App: { |
|
||||
appUrlOpen: { |
|
||||
handlers: [ |
|
||||
{ |
|
||||
url: "timesafari://*", |
|
||||
autoVerify: true |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
export default config; |
|
@ -1,76 +0,0 @@ |
|||||
# TimeSafari Docs |
|
||||
|
|
||||
## Generating PDF from Markdown on OSx |
|
||||
|
|
||||
This uses Pandoc and BasicTex (LaTeX) Installed through Homebrew. |
|
||||
|
|
||||
### Set Up |
|
||||
|
|
||||
```bash |
|
||||
brew install pandoc |
|
||||
|
|
||||
brew install basictex |
|
||||
|
|
||||
# Setting up LaTex packages |
|
||||
|
|
||||
# First update tlmgr |
|
||||
sudo tlmgr update --self |
|
||||
|
|
||||
# Then install LaTex packages |
|
||||
sudo tlmgr install bbding |
|
||||
sudo tlmgr install enumitem |
|
||||
sudo tlmgr install environ |
|
||||
sudo tlmgr install fancyhdr |
|
||||
sudo tlmgr install framed |
|
||||
sudo tlmgr install import |
|
||||
sudo tlmgr install lastpage # Enables Page X of Y |
|
||||
sudo tlmgr install mdframed |
|
||||
sudo tlmgr install multirow |
|
||||
sudo tlmgr install needspace |
|
||||
sudo tlmgr install ntheorem |
|
||||
sudo tlmgr install tabu |
|
||||
sudo tlmgr install tcolorbox |
|
||||
sudo tlmgr install textpos |
|
||||
sudo tlmgr install titlesec |
|
||||
sudo tlmgr install titling # Required for the fancy headers used |
|
||||
sudo tlmgr install threeparttable |
|
||||
sudo tlmgr install trimspaces |
|
||||
sudo tlmgr install tocloft # Required for \tableofcontents generation |
|
||||
sudo tlmgr install varwidth |
|
||||
sudo tlmgr install wrapfig |
|
||||
|
|
||||
# Install fonts |
|
||||
sudo tlmgr install cmbright |
|
||||
sudo tlmgr install collection-fontsrecommended # And set up fonts |
|
||||
sudo tlmgr install fira |
|
||||
sudo tlmgr install fontaxes |
|
||||
sudo tlmgr install libertine # The main font the doc uses |
|
||||
sudo tlmgr install opensans |
|
||||
sudo tlmgr install sourceserifpro |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
#### References |
|
||||
|
|
||||
The following guide was adapted to this project except that we install with Brew and have a few more packages. |
|
||||
|
|
||||
Guide: https://daniel.feldroy.com/posts/setting-up-latex-on-mac-os-x |
|
||||
|
|
||||
### Usage |
|
||||
|
|
||||
Use the `pandoc` command to generate a PDF. |
|
||||
|
|
||||
```bash |
|
||||
pandoc usage-guide.md -o usage-guide.pdf |
|
||||
``` |
|
||||
|
|
||||
And you can open the PDF with the `open` command. |
|
||||
|
|
||||
```bash |
|
||||
open usage-guide.pdf |
|
||||
``` |
|
||||
|
|
||||
Or use this one-liner |
|
||||
```bash |
|
||||
pandoc usage-guide.md -o usage-guide.pdf && open usage-guide.pdf |
|
||||
``` |
|
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 23 KiB |