docs: mobile optimize docs portal, support videos, better gallery features (#1099)

* docs: quick update of readme and windows screenshots for vs 2022

* update the docs portal to be better on mobile, support videos, and better gallery

* docs: re-generate site
This commit is contained in:
Tyler Wilding 2022-01-20 00:17:39 -05:00 committed by GitHub
parent 264dc83379
commit 90438523cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
45 changed files with 267 additions and 124 deletions

View file

@ -1,25 +1,55 @@
import glob import glob
import os import os
from pathlib import Path from pathlib import Path
import datetime import json
galleryLinks = { galleryLinks = {
'jak1': [], 'jak1': {
'jak2': [], 'name': "Jak 1",
'jak3': [], 'media': [],
'jakx': [], },
'misc': [] 'jak2': {
'name': "Jak 2",
'media': [],
},
'jak3': {
'name': "Jak 3",
'media': [],
},
'jakx': {
'name': "Jak X",
'media': [],
},
'misc': {
'name': "Miscellaneous",
'media': [],
}
} }
def get_links(key, folder_to_search): def get_links(key, folder_to_search):
if os.path.isdir(folder_to_search): if os.path.isdir(folder_to_search):
files = [f for f in glob.glob(folder_to_search + "/*.*", recursive=True)] files = glob.glob(folder_to_search + "/*.png", recursive=True)
files.extend(glob.glob(folder_to_search + "/*.jpg", recursive=True))
files.extend(glob.glob(folder_to_search + "/*.jpeg", recursive=True))
for f in files: for f in files:
galleryLinks[key].append({ galleryLinks[key]["media"].append({
'fileName': os.path.basename(f), 'fileName': os.path.basename(f),
'lastModified': datetime.datetime.fromtimestamp(os.path.getmtime(f)).isoformat(), 'timestamp': Path(f).stem.split("_")[1],
'caption': Path(f).stem.replace("-", " ").title() 'caption': Path(f).stem.split("_")[0].replace("-", " ").title(),
'video': False
}) })
# get videos potentially
if os.path.exists("{}/videos.json".format(folder_to_search)):
with open("{}/videos.json".format(folder_to_search), 'r') as f:
data = json.load(f)
for video in data:
galleryLinks[key]["media"].append({
'link': video["link"].replace("watch?v=", "embed/"),
'timestamp': video["timestamp"],
'video': True
})
# sort by timestamp
galleryLinks[key]["media"].sort(key=lambda x: x["timestamp"], reverse=True)
get_links('jak1', './docs/gh-pages-proj/src/assets/gallery/jak1') get_links('jak1', './docs/gh-pages-proj/src/assets/gallery/jak1')
get_links('jak2', './docs/gh-pages-proj/src/assets/gallery/jak2') get_links('jak2', './docs/gh-pages-proj/src/assets/gallery/jak2')
@ -27,7 +57,6 @@ get_links('jak3', './docs/gh-pages-proj/src/assets/gallery/jak3')
get_links('jakx', './docs/gh-pages-proj/src/assets/gallery/jakx') get_links('jakx', './docs/gh-pages-proj/src/assets/gallery/jakx')
get_links('misc', './docs/gh-pages-proj/src/assets/gallery/misc') get_links('misc', './docs/gh-pages-proj/src/assets/gallery/misc')
import json
with open('./docs/gh-pages-proj/src/config/gallery.json', 'r+', encoding='utf-8') as f: with open('./docs/gh-pages-proj/src/config/gallery.json', 'r+', encoding='utf-8') as f:
f.seek(0) f.seek(0)
json.dump(galleryLinks, f, ensure_ascii=False, indent=2) json.dump(galleryLinks, f, ensure_ascii=False, indent=2)

View file

@ -18,15 +18,20 @@
- [Table of Contents](#table-of-contents) - [Table of Contents](#table-of-contents)
- [Project Description](#project-description) - [Project Description](#project-description)
- [Current Status](#current-status)
- [What's Next](#whats-next)
- [Getting Started - Linux (Ubuntu)](#getting-started---linux-ubuntu) - [Getting Started - Linux (Ubuntu)](#getting-started---linux-ubuntu)
- [Getting Started - Linux (Arch)](#getting-started---linux-arch) - [Getting Started - Linux (Arch)](#getting-started---linux-arch)
- [Getting Started - Nixpkgs](#getting-started---nixpkgs) - [Getting Started - Nixpkgs](#getting-started---nixpkgs)
- [Getting Started - Windows](#getting-started---windows) - [Getting Started - Windows](#getting-started---windows)
- [Building and Running the Game](#building-and-running-the-game)
- [Extract Assets](#extract-assets)
- [Build Game](#build-game)
- [Run Game](#run-game)
- [Project Layout](#project-layout) - [Project Layout](#project-layout)
- [Directory Layout](#directory-layout) - [Directory Layout](#directory-layout)
- [More Documentation](#more-documentation) - [On Windows / Visual Studio](#on-windows--visual-studio)
- [ASan Build](#asan-build)
- [On Windows / Visual Studio](#on-windows--visual-studio)
<!-- tocstop --> <!-- tocstop -->
## Project Description ## Project Description
@ -45,8 +50,7 @@ Our objectives are:
We support both Linux and Windows on x86-64. We support both Linux and Windows on x86-64.
We have a Discord server where we discuss development. We have a Discord server where we discuss development. https://discord.gg/BVEHQmm8
https://discord.gg/BVEHQmm8
## Current Status ## Current Status
So far, we've decompiled around 341,233 lines of GOAL code, out of an estimated 500,000 total lines and we've started work on an OpenGL renderer. Currently, the main display process (`*dproc*`) runs and sends data to our renderer. We can load textures, text files, and level files. Using keyboard controls, we can open the debug menu and turn on some simple debug visualizations. So far, we've decompiled around 341,233 lines of GOAL code, out of an estimated 500,000 total lines and we've started work on an OpenGL renderer. Currently, the main display process (`*dproc*`) runs and sends data to our renderer. We can load textures, text files, and level files. Using keyboard controls, we can open the debug menu and turn on some simple debug visualizations.
@ -142,14 +146,16 @@ nix-build -A packages.x86_64-linux.jak-asan # package with Clang ASan build
## Getting Started - Windows ## Getting Started - Windows
Install Visual Studio 2019 and get the C++ and CMake tools via the Visual Studio Installer Install Visual Studio 2022 and get the `Desktop development with C++` workload during the installation process.
> if you already have visual studio and don't have this installed - open your `Visual Studio Installer` and modify the installation
On Windows, it's recommended to get Scoop to use as a package manager, making the follow steps _much_ easier. Follow the steps on the bottom of the homepage here https://scoop.sh/ On Windows, it's recommended to get Scoop to use as a package manager, making the follow steps _much_ easier. Follow the steps on the bottom of the homepage here https://scoop.sh/
Once Scoop is installed, run the following command: Once Scoop is installed, run the following command:
```ps1 ```sh
scoop install llvm nasm scoop install git llvm nasm
``` ```
Initialize the repository's third-party dependencies: Initialize the repository's third-party dependencies:
@ -158,17 +164,13 @@ Initialize the repository's third-party dependencies:
git submodule update --init --recursive git submodule update --init --recursive
``` ```
Open the project as a CMake project, browse for the root level `CMakeLists.txt`: Open the project as a CMake project.
![](./docs/markdown/imgs/open-cmake-vs.png) ![](./docs/markdown/imgs/windows/open-project.png)
In the toolbar, you should be able to select an individual component to compile, or combine within the root CMakeLists.txt. In the future we will pre-define configurations to make this easier. Then build the entire project
![](./docs/markdown/imgs/cmake-build-vs.png) ![](./docs/markdown/imgs/windows/build-all.png)
You may also wish to view the files that pertain to each CMake target, rather than the project as it is normally:
![](./docs/markdown/imgs/cmake-target-view.png)
## Building and Running the Game ## Building and Running the Game
@ -204,7 +206,7 @@ gc> (test-play)
(play :use-vis #t :init-game #f) has been called! (play :use-vis #t :init-game #f) has been called!
0 #x0 0.0000 0 0 #x0 0.0000 0
gc> gc>
``` ```
Then, in the graphics window, you can use the period key to bring up the debug menu. Controllers also work, using the same mapping as the original game. Then, in the graphics window, you can use the period key to bring up the debug menu. Controllers also work, using the same mapping as the original game.

View file

@ -0,0 +1 @@
.overlay-page-width[data-v-77084e79]{width:100%}.img-caption[data-v-77084e79]{margin:1em;font-weight:700;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}.video-iframe[data-v-77084e79]{min-height:400px}.theme--light.v-overlay{color:rgba(0,0,0,.87)}.theme--dark.v-overlay{color:#fff}.v-overlay{align-items:center;border-radius:inherit;display:flex;justify-content:center;position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms}.v-overlay__content{position:relative}.v-overlay__scrim{border-radius:inherit;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;transition:inherit;width:100%;will-change:opacity}.v-overlay--absolute{position:absolute}.v-overlay--active{pointer-events:auto}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
.img-caption[data-v-33535a06]{position:absolute;bottom:0;margin:1em;font-weight:700;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}

File diff suppressed because one or more lines are too long

View file

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View file

@ -0,0 +1,6 @@
[
{
"link": "https://www.youtube.com/watch?v=6dJhyVqqq5Q",
"timestamp": "2022-01-15"
}
]

View file

@ -1,23 +1,46 @@
{ {
"jak1": [ "jak1": {
{ "name": "Jak 1",
"fileName": "can-save-and-load.png", "media": [
"lastModified": "2022-01-20T00:39:52.300413", {
"caption": "Can Save And Load" "link": "https://www.youtube.com/embed/6dJhyVqqq5Q",
}, "timestamp": "2022-01-15",
{ "video": true
"fileName": "boggy-reflections.png", },
"lastModified": "2022-01-20T00:39:52.296413", {
"caption": "Boggy Reflections" "fileName": "can-save-and-load_2022-01-11.png",
}, "timestamp": "2022-01-11",
{ "caption": "Can Save And Load",
"fileName": "too-much-fog.png", "video": false
"lastModified": "2022-01-20T00:39:52.300413", },
"caption": "Too Much Fog" {
} "fileName": "boggy-reflections_2022-01-10.png",
], "timestamp": "2022-01-10",
"jak2": [], "caption": "Boggy Reflections",
"jak3": [], "video": false
"jakx": [], },
"misc": [] {
"fileName": "too-much-fog_2022-01-10.png",
"timestamp": "2022-01-10",
"caption": "Too Much Fog",
"video": false
}
]
},
"jak2": {
"name": "Jak 2",
"media": []
},
"jak3": {
"name": "Jak 3",
"media": []
},
"jakx": {
"name": "Jak X",
"media": []
},
"misc": {
"name": "Miscellaneous",
"media": []
}
} }

View file

@ -1,20 +1,23 @@
<template> <template>
<v-container fluid> <v-container fluid>
<v-row v-for="(game, name) in assetLinks" :key="name"> <v-row v-for="(game, name) in assetLinks" :key="name">
<v-col cols="12"> <v-col cols="12" align="center">
<h2>{{ name }}</h2> <h2>{{ sectionMetadata[name].name }}</h2>
</v-col> </v-col>
<v-col <v-col
v-for="(asset, index) in game" v-for="(asset, index) in game"
:key="name + asset + index" :key="name + asset + index"
class="d-flex child-flex" class="d-flex child-flex"
cols="3" cols="12"
md="4"
> >
<v-img <v-img
v-if="!asset.video"
:src="require(`@/assets/gallery/${name}/${asset.fileName}`)" :src="require(`@/assets/gallery/${name}/${asset.fileName}`)"
:lazy-src="require(`@/assets/gallery/${name}/${asset.fileName}`)" :lazy-src="require(`@/assets/gallery/${name}/${asset.fileName}`)"
aspect-ratio="1" aspect-ratio="1"
class="grey lighten-2" class="grey lighten-2"
@click="assetSelected(name, asset)"
> >
<template v-slot:placeholder> <template v-slot:placeholder>
<v-row class="fill-height ma-0" align="center" justify="center"> <v-row class="fill-height ma-0" align="center" justify="center">
@ -24,21 +27,49 @@
></v-progress-circular> ></v-progress-circular>
</v-row> </v-row>
</template> </template>
<span class="img-caption">{{ asset.caption }}</span>
</v-img> </v-img>
<iframe
v-if="asset.video"
class="video-iframe"
:src="asset.link"
frameBorder="0"
></iframe>
</v-col> </v-col>
</v-row> </v-row>
<v-overlay class="overlay-page-width" v-if="selectedItem.asset">
<v-container>
<v-row>
<v-img
:src="
require(`@/assets/gallery/${selectedItem.sectionName}/${selectedItem.asset.fileName}`)
"
:lazy-src="
require(`@/assets/gallery/${selectedItem.sectionName}/${selectedItem.asset.fileName}`)
"
contain
@click="assetDeselected()"
></v-img>
</v-row>
<v-row>
<h3 class="img-caption">{{ selectedItem.asset.caption }}</h3>
</v-row>
</v-container>
</v-overlay>
</v-container> </v-container>
</template> </template>
<style scoped> <style scoped>
.overlay-page-width {
width: 100%;
}
.img-caption { .img-caption {
position: absolute;
bottom: 0;
margin: 1em; margin: 1em;
font-weight: 700; font-weight: 700;
text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000,
1px 1px 0 #000; 1px 1px 0 #000;
} }
.video-iframe {
min-height: 400px;
}
</style> </style>
<script> <script>
import galleryLinks from "../gallery"; import galleryLinks from "../gallery";
@ -48,6 +79,27 @@ export default {
components: {}, components: {},
data: function() { data: function() {
return { return {
selectedItem: {
sectionName: "",
asset: null
},
sectionMetadata: {
jak1: {
name: ""
},
jak2: {
name: ""
},
jak3: {
name: ""
},
jakx: {
name: ""
},
misc: {
name: ""
}
},
assetLinks: { assetLinks: {
jak1: [], jak1: [],
jak2: [], jak2: [],
@ -61,11 +113,26 @@ export default {
const keys = Object.keys(galleryLinks); const keys = Object.keys(galleryLinks);
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
const key = keys[i]; const key = keys[i];
for (let j = 0; j < galleryLinks[key].length; j++) { this.sectionMetadata[key].name = galleryLinks[key]["name"];
const asset = galleryLinks[key][j]; for (let j = 0; j < galleryLinks[key]["media"].length; j++) {
const asset = galleryLinks[key]["media"][j];
this.assetLinks[key].push(asset); this.assetLinks[key].push(asset);
} }
} }
},
methods: {
assetSelected: function(sectionName, asset) {
this.selectedItem = {
sectionName: sectionName,
asset: asset
};
},
assetDeselected: function() {
this.selectedItem = {
sectionName: "",
asset: ""
};
}
} }
}; };
</script> </script>

View file

@ -63,47 +63,7 @@
</v-col> </v-col>
<v-container style="margin-top: 2em;"> <v-container style="margin-top: 2em;">
<v-row> <v-row>
<v-col cols="8"> <v-col cols="12" md="4">
<v-row>
<v-col
align="center"
justify="center"
class="orange--text text--darken-2"
>
<h3>GitHub Updates</h3>
</v-col>
</v-row>
<v-row>
<v-col>
<v-timeline>
<v-timeline-item v-for="(pr, index) in recentPRs" :key="'pr' + index">
<template v-slot:icon>
<v-avatar>
<img :src="pr.user.avatar_url" />
</v-avatar>
</template>
<template v-slot:opposite>
<span>{{ pr.user.login }}</span>
</template>
<v-card class="elevation-2">
<v-card-title>
<h5>{{ pr.title }}</h5>
</v-card-title>
<v-card-text>
{{ pr.body }}
</v-card-text>
<v-card-actions>
<v-btn text color="accent" :href="pr.html_url" target="_blank">
View Change
</v-btn>
</v-card-actions>
</v-card>
</v-timeline-item>
</v-timeline>
</v-col>
</v-row>
</v-col>
<v-col cols="4">
<v-row> <v-row>
<v-col <v-col
align="center" align="center"
@ -154,9 +114,19 @@
<h5>Renderers and Core Pieces</h5> <h5>Renderers and Core Pieces</h5>
</v-col> </v-col>
</v-row> </v-row>
<v-row v-for="(milestone, index) in majorMilestones.jak1" :key="'jak1-milestone' + index"> <v-row>
<v-col align="center" justify="center"> <v-col
<v-icon v-if="milestone.status === 'Completed'" class="green--text"> v-for="(milestone, index) in majorMilestones.jak1"
:key="'jak1-milestone' + index"
cols="12"
md="6"
align="center"
justify="center"
>
<v-icon
v-if="milestone.status === 'Completed'"
class="green--text"
>
mdi-check mdi-check
</v-icon> </v-icon>
<v-icon v-else class="yellow--text"> <v-icon v-else class="yellow--text">
@ -166,6 +136,54 @@
</v-col> </v-col>
</v-row> </v-row>
</v-col> </v-col>
<v-col cols="12" md="8">
<v-row>
<v-col
align="center"
justify="center"
class="orange--text text--darken-2"
>
<h3>GitHub Updates</h3>
</v-col>
</v-row>
<v-row>
<v-col>
<v-timeline dense>
<v-timeline-item
v-for="(pr, index) in recentPRs"
:key="'pr' + index"
>
<template v-slot:icon>
<v-avatar>
<img :src="pr.user.avatar_url" />
</v-avatar>
</template>
<template v-slot:opposite>
<span>{{ pr.user.login }}</span>
</template>
<v-card class="elevation-2">
<v-card-title>
<h5>{{ pr.title }}</h5>
</v-card-title>
<v-card-text>
{{ pr.body }}
</v-card-text>
<v-card-actions>
<v-btn
text
color="accent"
:href="pr.html_url"
target="_blank"
>
View Change
</v-btn>
</v-card-actions>
</v-card>
</v-timeline-item>
</v-timeline>
</v-col>
</v-row>
</v-col>
</v-row> </v-row>
</v-container> </v-container>
</v-row> </v-row>
@ -186,11 +204,8 @@
font-family: "Lexend", sans-serif !important; font-family: "Lexend", sans-serif !important;
} }
.text-stroke { .text-stroke {
text-shadow: text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000,
-1px -1px 0 #000, 1px 1px 0 #000;
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
} }
</style> </style>

View file

@ -2,6 +2,7 @@ module.exports = {
transpileDependencies: [ transpileDependencies: [
'vuetify' 'vuetify'
], ],
filenameHashing: false,
publicPath: process.env.NODE_ENV === 'production' publicPath: process.env.NODE_ENV === 'production'
? '/jak-project/' ? '/jak-project/'
: '/' : '/'

View file

Before

Width:  |  Height:  |  Size: 993 KiB

After

Width:  |  Height:  |  Size: 993 KiB

View file

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 1 MiB

View file

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

View file

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/jak-project/favicon.png"><title>OpenGOAL - The Jak and Daxter Project</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Code&family=Lexend:wght@400;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link href="/jak-project/css/chunk-46518b2d.5add0646.css" rel="prefetch"><link href="/jak-project/css/chunk-4c8decd5.78624a63.css" rel="prefetch"><link href="/jak-project/css/chunk-55aa138e.957c03f9.css" rel="prefetch"><link href="/jak-project/js/chunk-46518b2d.588756f9.js" rel="prefetch"><link href="/jak-project/js/chunk-4c8decd5.5cd61028.js" rel="prefetch"><link href="/jak-project/js/chunk-55aa138e.dbdb85fb.js" rel="prefetch"><link href="/jak-project/css/chunk-vendors.a37b1574.css" rel="preload" as="style"><link href="/jak-project/js/app.ec6a37d6.js" rel="preload" as="script"><link href="/jak-project/js/chunk-vendors.186da3e2.js" rel="preload" as="script"><link href="/jak-project/css/chunk-vendors.a37b1574.css" rel="stylesheet"></head><style>body { <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/jak-project/favicon.png"><title>OpenGOAL - The Jak and Daxter Project</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Code&family=Lexend:wght@400;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link href="/jak-project/css/chunk-21f25f00.css" rel="prefetch"><link href="/jak-project/css/chunk-461a09f2.css" rel="prefetch"><link href="/jak-project/css/chunk-a7b0a1b0.css" rel="prefetch"><link href="/jak-project/js/chunk-21f25f00.js" rel="prefetch"><link href="/jak-project/js/chunk-461a09f2.js" rel="prefetch"><link href="/jak-project/js/chunk-a7b0a1b0.js" rel="prefetch"><link href="/jak-project/css/chunk-vendors.css" rel="preload" as="style"><link href="/jak-project/js/app.js" rel="preload" as="script"><link href="/jak-project/js/chunk-vendors.js" rel="preload" as="script"><link href="/jak-project/css/chunk-vendors.css" rel="stylesheet"></head><style>body {
font-family: 'Lexend', sans-serif !important; font-family: 'Lexend', sans-serif !important;
} }
code { code {
@ -6,4 +6,4 @@
} }
.v-application { .v-application {
font-family: 'Lexend', sans-serif !important; font-family: 'Lexend', sans-serif !important;
}</style><body><noscript><strong>We're sorry but docs-and-tooling doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/jak-project/js/chunk-vendors.186da3e2.js"></script><script src="/jak-project/js/app.ec6a37d6.js"></script></body></html> }</style><body><noscript><strong>We're sorry but docs-and-tooling doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/jak-project/js/chunk-vendors.js"></script><script src="/jak-project/js/app.js"></script></body></html>

View file

@ -1,2 +0,0 @@
(function(e){function n(n){for(var r,o,c=n[0],i=n[1],l=n[2],d=0,s=[];d<c.length;d++)o=c[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&s.push(a[o][0]),a[o]=0;for(r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r]);f&&f(n);while(s.length)s.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,n=0;n<u.length;n++){for(var t=u[n],r=!0,o=1;o<t.length;o++){var c=t[o];0!==a[c]&&(r=!1)}r&&(u.splice(n--,1),e=i(i.s=t[0]))}return e}var r={},o={app:0},a={app:0},u=[];function c(e){return i.p+"js/"+({}[e]||e)+"."+{"chunk-4c8decd5":"5cd61028","chunk-46518b2d":"588756f9","chunk-55aa138e":"dbdb85fb"}[e]+".js"}function i(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var n=[],t={"chunk-4c8decd5":1,"chunk-46518b2d":1,"chunk-55aa138e":1};o[e]?n.push(o[e]):0!==o[e]&&t[e]&&n.push(o[e]=new Promise((function(n,t){for(var r="css/"+({}[e]||e)+"."+{"chunk-4c8decd5":"78624a63","chunk-46518b2d":"5add0646","chunk-55aa138e":"957c03f9"}[e]+".css",a=i.p+r,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=u[c],d=l.getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(d===r||d===a))return n()}var s=document.getElementsByTagName("style");for(c=0;c<s.length;c++){l=s[c],d=l.getAttribute("data-href");if(d===r||d===a)return n()}var f=document.createElement("link");f.rel="stylesheet",f.type="text/css",f.onload=n,f.onerror=function(n){var r=n&&n.target&&n.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete o[e],f.parentNode.removeChild(f),t(u)},f.href=a;var p=document.getElementsByTagName("head")[0];p.appendChild(f)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)n.push(r[2]);else{var u=new Promise((function(n,t){r=a[e]=[n,t]}));n.push(r[2]=u);var l,d=document.createElement("script");d.charset="utf-8",d.timeout=120,i.nc&&d.setAttribute("nonce",i.nc),d.src=c(e);var s=new Error;l=function(n){d.onerror=d.onload=null,clearTimeout(f);var t=a[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",s.name="ChunkLoadError",s.type=r,s.request=o,t[1](s)}a[e]=void 0}};var f=setTimeout((function(){l({type:"timeout",target:d})}),12e4);d.onerror=d.onload=l,document.head.appendChild(d)}return Promise.all(n)},i.m=e,i.c=r,i.d=function(e,n,t){i.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,n){if(1&n&&(e=i(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)i.d(t,r,function(n){return e[n]}.bind(null,r));return t},i.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="/jak-project/",i.oe=function(e){throw console.error(e),e};var l=window["webpackJsonp"]=window["webpackJsonp"]||[],d=l.push.bind(l);l.push=n,l=l.slice();for(var s=0;s<l.length;s++)n(l[s]);var f=d;u.push([0,"chunk-vendors"]),t()})({0:function(e,n,t){e.exports=t("56d7")},"56d7":function(e,n,t){"use strict";t.r(n);t("e260"),t("e6cf"),t("cca6"),t("a79d");var r=t("2b0e"),o=function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("v-app",[t("v-main",[t("router-view")],1)],1)},a=[],u={name:"App",components:{},data:function(){return{}}},c=u,i=t("2877"),l=t("6544"),d=t.n(l),s=t("7496"),f=t("f6c4"),p=Object(i["a"])(c,o,a,!1,null,null,null),h=p.exports;d()(p,{VApp:s["a"],VMain:f["a"]});var m=t("f309");r["a"].use(m["a"]);var v=new m["a"]({theme:{dark:!0}}),b=(t("d3b7"),t("3ca3"),t("ddb0"),t("8c4f"));r["a"].use(b["a"]);var g=[{path:"/",name:"Home",component:function(){return Promise.all([t.e("chunk-4c8decd5"),t.e("chunk-55aa138e")]).then(t.bind(null,"bb51"))}},{path:"/gallery",name:"Gallery",component:function(){return Promise.all([t.e("chunk-4c8decd5"),t.e("chunk-46518b2d")]).then(t.bind(null,"0d77"))}}],y=new b["a"]({mode:"history",base:"/jak-project/",routes:g}),k=y;r["a"].config.productionTip=!1,new r["a"]({vuetify:v,router:k,render:function(e){return e(h)}}).$mount("#app")}});
//# sourceMappingURL=app.ec6a37d6.js.map

File diff suppressed because one or more lines are too long

2
docs/js/app.js Normal file
View file

@ -0,0 +1,2 @@
(function(e){function t(t){for(var r,o,c=t[0],i=t[1],l=t[2],f=0,s=[];f<c.length;f++)o=c[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&s.push(a[o][0]),a[o]=0;for(r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r]);p&&p(t);while(s.length)s.shift()();return u.push.apply(u,l||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,o=1;o<n.length;o++){var c=n[o];0!==a[c]&&(r=!1)}r&&(u.splice(t--,1),e=i(i.s=n[0]))}return e}var r={},o={app:0},a={app:0},u=[];function c(e){return i.p+"js/"+({}[e]||e)+".js"}function i(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.e=function(e){var t=[],n={"chunk-a7b0a1b0":1,"chunk-21f25f00":1,"chunk-461a09f2":1};o[e]?t.push(o[e]):0!==o[e]&&n[e]&&t.push(o[e]=new Promise((function(t,n){for(var r="css/"+({}[e]||e)+".css",a=i.p+r,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=u[c],f=l.getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(f===r||f===a))return t()}var s=document.getElementsByTagName("style");for(c=0;c<s.length;c++){l=s[c],f=l.getAttribute("data-href");if(f===r||f===a)return t()}var p=document.createElement("link");p.rel="stylesheet",p.type="text/css",p.onload=t,p.onerror=function(t){var r=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete o[e],p.parentNode.removeChild(p),n(u)},p.href=a;var d=document.getElementsByTagName("head")[0];d.appendChild(p)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=u);var l,f=document.createElement("script");f.charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.src=c(e);var s=new Error;l=function(t){f.onerror=f.onload=null,clearTimeout(p);var n=a[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",s.name="ChunkLoadError",s.type=r,s.request=o,n[1](s)}a[e]=void 0}};var p=setTimeout((function(){l({type:"timeout",target:f})}),12e4);f.onerror=f.onload=l,document.head.appendChild(f)}return Promise.all(t)},i.m=e,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/jak-project/",i.oe=function(e){throw console.error(e),e};var l=window["webpackJsonp"]=window["webpackJsonp"]||[],f=l.push.bind(l);l.push=t,l=l.slice();for(var s=0;s<l.length;s++)t(l[s]);var p=f;u.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},"56d7":function(e,t,n){"use strict";n.r(t);n("e260"),n("e6cf"),n("cca6"),n("a79d");var r=n("2b0e"),o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-app",[n("v-main",[n("router-view")],1)],1)},a=[],u={name:"App",components:{},data:function(){return{}}},c=u,i=n("2877"),l=n("6544"),f=n.n(l),s=n("7496"),p=n("f6c4"),d=Object(i["a"])(c,o,a,!1,null,null,null),h=d.exports;f()(d,{VApp:s["a"],VMain:p["a"]});var m=n("f309");r["a"].use(m["a"]);var v=new m["a"]({theme:{dark:!0}}),b=(n("d3b7"),n("3ca3"),n("ddb0"),n("8c4f"));r["a"].use(b["a"]);var g=[{path:"/",name:"Home",component:function(){return Promise.all([n.e("chunk-a7b0a1b0"),n.e("chunk-461a09f2")]).then(n.bind(null,"bb51"))}},{path:"/gallery",name:"Gallery",component:function(){return Promise.all([n.e("chunk-a7b0a1b0"),n.e("chunk-21f25f00")]).then(n.bind(null,"0d77"))}}],y=new b["a"]({mode:"history",base:"/jak-project/",routes:g}),w=y;r["a"].config.productionTip=!1,new r["a"]({vuetify:v,router:w,render:function(e){return e(h)}}).$mount("#app")}});
//# sourceMappingURL=app.js.map

1
docs/js/app.js.map Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-46518b2d"],{"0d77":function(e,n,a){"use strict";a.r(n);var t=function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("v-container",{attrs:{fluid:""}},e._l(e.assetLinks,(function(n,o){return t("v-row",{key:o},[t("v-col",{attrs:{cols:"12"}},[t("h2",[e._v(e._s(o))])]),e._l(n,(function(n,r){return t("v-col",{key:o+n+r,staticClass:"d-flex child-flex",attrs:{cols:"3"}},[t("v-img",{staticClass:"grey lighten-2",attrs:{src:a("a531")("./"+o+"/"+n.fileName),"lazy-src":a("a531")("./"+o+"/"+n.fileName),"aspect-ratio":"1"},scopedSlots:e._u([{key:"placeholder",fn:function(){return[t("v-row",{staticClass:"fill-height ma-0",attrs:{align:"center",justify:"center"}},[t("v-progress-circular",{attrs:{indeterminate:"",color:"grey lighten-5"}})],1)]},proxy:!0}],null,!0)},[t("span",{staticClass:"img-caption"},[e._v(e._s(n.caption))])])],1)}))],2)})),1)},o=[],r=a("1da1"),i=(a("96cf"),a("b64b"),a("bef0")),s=i,c={name:"Gallery",components:{},data:function(){return{assetLinks:{jak1:[],jak2:[],jak3:[],jakx:[],misc:[]}}},mounted:function(){var e=Object(r["a"])(regeneratorRuntime.mark((function e(){var n,a,t,o,r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(n=Object.keys(s),a=0;a<n.length;a++)for(t=n[a],o=0;o<s[t].length;o++)r=s[t][o],this.assetLinks[t].push(r);case 2:case"end":return e.stop()}}),e,this)})));function n(){return e.apply(this,arguments)}return n}()},l=c,f=(a("72c5"),a("2877")),u=a("6544"),p=a.n(u),d=a("62ad"),g=a("a523"),m=a("adda"),k=a("490a"),h=a("0fd9"),v=Object(f["a"])(l,t,o,!1,null,"33535a06",null);n["default"]=v.exports;p()(v,{VCol:d["a"],VContainer:g["a"],VImg:m["a"],VProgressCircular:k["a"],VRow:h["a"]})},1166:function(e,n,a){e.exports=a.p+"img/can-save-and-load.088bcab3.png"},3923:function(e,n,a){e.exports=a.p+"img/too-much-fog.e8f9d612.png"},"72c5":function(e,n,a){"use strict";a("afae")},a531:function(e,n,a){var t={"./jak1/boggy-reflections.png":"f03d","./jak1/can-save-and-load.png":"1166","./jak1/too-much-fog.png":"3923"};function o(e){var n=r(e);return a(n)}function r(e){if(!a.o(t,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t[e]}o.keys=function(){return Object.keys(t)},o.resolve=r,e.exports=o,o.id="a531"},afae:function(e,n,a){},bef0:function(e){e.exports=JSON.parse('{"jak1":[{"fileName":"can-save-and-load.png","lastModified":"2022-01-20T00:39:52.300413","caption":"Can Save And Load"},{"fileName":"boggy-reflections.png","lastModified":"2022-01-20T00:39:52.296413","caption":"Boggy Reflections"},{"fileName":"too-much-fog.png","lastModified":"2022-01-20T00:39:52.300413","caption":"Too Much Fog"}],"jak2":[],"jak3":[],"jakx":[],"misc":[]}')},f03d:function(e,n,a){e.exports=a.p+"img/boggy-reflections.acbae15f.png"}}]);
//# sourceMappingURL=chunk-46518b2d.588756f9.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB