Compare commits
251 Commits
master
...
724e800201
| Author | SHA1 | Date | |
|---|---|---|---|
|
724e800201
|
|||
|
abcaa9283d
|
|||
|
e175f68d25
|
|||
|
80b6a9bf46
|
|||
|
b089b8c0a8
|
|||
|
8f774ba8f0
|
|||
|
f4f5f47ee7
|
|||
|
16f17a9486
|
|||
|
72483674f6
|
|||
|
b69c7f381b
|
|||
|
d7d4dbed8b
|
|||
|
2437b19836
|
|||
|
abd23e0eb8
|
|||
|
57a4b977ec
|
|||
|
7f591e2724
|
|||
|
3d5c16f9cb
|
|||
|
fdb5f84c92
|
|||
|
eaf363ee27
|
|||
|
0ea9db3473
|
|||
|
8d6acca5e9
|
|||
|
bfc1f0839a
|
|||
|
258061c64d
|
|||
|
399ac5f0da
|
|||
|
74362de02a
|
|||
|
9f7b93b8a1
|
|||
|
665921d046
|
|||
|
84cf772273
|
|||
|
22cd49a012
|
|||
|
00d035a0e8
|
|||
|
fc56cafab8
|
|||
|
eee87e6ca7
|
|||
|
09852f19b6
|
|||
|
8b464cd89d
|
|||
|
98597768f3
|
|||
|
08f80ddb5c
|
|||
|
33fd8136a7
|
|||
|
b2943bfeac
|
|||
|
c3c7c86a66
|
|||
|
8563a6857f
|
|||
|
1650d25d0f
|
|||
|
f4ee2297a7
|
|||
|
35ced02977
|
|||
|
45709632d5
|
|||
|
e65fe8cd30
|
|||
|
21f725baf3
|
|||
|
c2a1995292
|
|||
|
af93330bf5
|
|||
|
e43ae63d8a
|
|||
|
add64ba889
|
|||
|
8d13297cb0
|
|||
|
eee95df47c
|
|||
|
1febeaf8a3
|
|||
|
088be26b48
|
|||
|
7f055f3607
|
|||
|
5a455fcdca
|
|||
|
846e28d92f
|
|||
|
ec3563093f
|
|||
|
0ec96b4461
|
|||
|
873504ecbf
|
|||
|
51f4a3462b
|
|||
|
0656d8a95d
|
|||
|
a79c795672
|
|||
|
159a40ecb5
|
|||
|
9d359640d3
|
|||
|
f0c60a4cea
|
|||
|
2c5ac7b475
|
|||
|
6a64de155d
|
|||
|
f5ba80fc16
|
|||
|
f8f48e9353
|
|||
|
f734e9ade4
|
|||
|
95e161aba9
|
|||
|
e4331e712a
|
|||
|
4804016fdf
|
|||
|
ccb6cdb454
|
|||
|
dade1f5d8d
|
|||
|
cecfdea07f
|
|||
|
7bea502bdf
|
|||
|
1fd539bcb9
|
|||
|
f940f4418d
|
|||
|
de476eb7ab
|
|||
|
2fbf21eaaf
|
|||
|
8ccbe2ebf1
|
|||
|
d4136a396a
|
|||
|
622a4038ac
|
|||
|
a65896b80d
|
|||
|
415703e21b
|
|||
|
89bf5eecd7
|
|||
|
b4059910ec
|
|||
|
7896f71534
|
|||
|
f9b30a3fe6
|
|||
|
31c80276de
|
|||
|
840ba4c10c
|
|||
|
53bf28b208
|
|||
|
d651e3a20c
|
|||
|
fb376a4906
|
|||
|
cd69d86246
|
|||
|
1ae1eeb159
|
|||
|
5171fffab5
|
|||
|
ca1e99013d
|
|||
|
7c71c994f2
|
|||
|
70655a4d39
|
|||
|
1551799b88
|
|||
|
4ab0db973f
|
|||
|
a3a2748d15
|
|||
|
ce8897d578
|
|||
|
637562f920
|
|||
|
42aff1f455
|
|||
|
855f6b3c99
|
|||
|
8a50ae7e32
|
|||
|
1a3572e64c
|
|||
|
ad6e3fe9d8
|
|||
|
99b63592d0
|
|||
|
6c004d14bd
|
|||
|
a6b488d1a6
|
|||
|
0cef259ecc
|
|||
|
150bc17ed4
|
|||
|
c9e9c9be46
|
|||
|
90d8dc3428
|
|||
|
863d11cffd
|
|||
|
b3d965d220
|
|||
|
496205c6b4
|
|||
|
9552df4b4e
|
|||
|
9881584cdb
|
|||
|
867583d30c
|
|||
|
125768b01e
|
|||
|
320538ad17
|
|||
|
56a5539106
|
|||
|
56b1048622
|
|||
|
3e4d5c2633
|
|||
|
cdb7eb86a5
|
|||
|
6de2518f1f
|
|||
|
34580eeab4
|
|||
|
0dd03e544c
|
|||
|
84a6310189
|
|||
|
68f8c55817
|
|||
|
9c0d592a24
|
|||
|
56349561f9
|
|||
|
702282d11f
|
|||
|
46856a9399
|
|||
|
eecf9b8db8
|
|||
|
1c891d971f
|
|||
|
6dfa664807
|
|||
|
5a27be5a3c
|
|||
|
8687daecfd
|
|||
|
6b5fe4bc2f
|
|||
|
c86bae36ad
|
|||
|
ef40e8078c
|
|||
|
80fc1cdc4d
|
|||
|
331de40dfd
|
|||
|
f3ee6607e7
|
|||
|
eec66b13ca
|
|||
|
9fc218feb1
|
|||
|
9ed68d1f0b
|
|||
|
80cc8022eb
|
|||
|
6bf45b9c2b
|
|||
|
860d070c55
|
|||
|
7e49d23736
|
|||
|
69fb34c2ba
|
|||
|
6664de6c07
|
|||
|
b93515ff32
|
|||
|
230042cc7b
|
|||
|
98acc8543c
|
|||
|
eea21cea1e
|
|||
|
fb8136f3b6
|
|||
|
e84c39030d
|
|||
|
75308cb264
|
|||
|
9b81a0bf18
|
|||
|
005a306fc6
|
|||
|
cb13ca0a3b
|
|||
|
5685830cba
|
|||
|
1f9b38306c
|
|||
|
9568cfe177
|
|||
|
18619efe39
|
|||
|
719221d74f
|
|||
|
5d95307ae2
|
|||
|
1b017d919a
|
|||
|
ce5ec9aace
|
|||
|
668dc8683b
|
|||
|
65dc5991c0
|
|||
|
05be03225d
|
|||
|
52dd703fa6
|
|||
|
e40ec28509
|
|||
|
1cb8f3ea65
|
|||
|
922a0f5d47
|
|||
|
94c32a3b30
|
|||
|
3024c3de32
|
|||
|
d936a8f96b
|
|||
|
1eb32828ec
|
|||
|
bf6236e60b
|
|||
|
3bf9e043fe
|
|||
|
efc359459c
|
|||
|
095f74773c
|
|||
|
d58a6196eb
|
|||
|
a24a6b599e
|
|||
|
f4409415d9
|
|||
|
d17b528baf
|
|||
|
7f4f589d5b
|
|||
|
61d33381e8
|
|||
|
3f1225a03a
|
|||
|
ad95fe796b
|
|||
|
9e078387d8
|
|||
|
fb81b24839
|
|||
|
f4295107a4
|
|||
|
35e4ae222c
|
|||
|
12a51bbb54
|
|||
|
6d47ddf89f
|
|||
|
2d56c89765
|
|||
|
21aec406df
|
|||
|
6eb6299b3a
|
|||
|
c3f2714929
|
|||
|
e98edf3de9
|
|||
|
cadece357b
|
|||
|
da42f35ff0
|
|||
|
dcb07799e3
|
|||
|
ece562caba
|
|||
|
23d44038ef
|
|||
|
31f93005b9
|
|||
|
8217a7fcd6
|
|||
|
00ac9881c3
|
|||
|
1f54a882d8
|
|||
|
7a9fb9e08b
|
|||
|
9305442c4b
|
|||
|
d67da4ad06
|
|||
|
d094784188
|
|||
|
c2cd53dc78
|
|||
|
89ce365bd0
|
|||
|
e6708dceaa
|
|||
|
2e463c626d
|
|||
|
797db5e1a9
|
|||
|
12dd3dfedc
|
|||
|
682e732643
|
|||
|
33158bdb57
|
|||
|
26c91c030a
|
|||
|
699e9988f2
|
|||
|
21bcb0464b
|
|||
|
6efcb43d23
|
|||
|
dcbe034d2f
|
|||
|
5f42fc3d8c
|
|||
|
92f72accf9
|
|||
|
f419e28a5a
|
|||
|
519d241b31
|
|||
|
f1febd7823
|
|||
|
9dee5c24e4
|
|||
|
20d59f7820
|
|||
|
66acd69bec
|
|||
|
f001691283
|
|||
|
607e51c481
|
|||
|
1855e18315
|
|||
|
0b6ba921ce
|
|||
|
d32dcc701b
|
|||
|
5bed9dbbc8
|
41
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Build Docker
|
||||
run-name: Build Docker Images
|
||||
on:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
BuildImage:
|
||||
runs-on: [ubuntu-latest, amd]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Install Docker
|
||||
run : |
|
||||
apt-get install ca-certificates curl gnupg
|
||||
install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
apt-get update
|
||||
apt-get install docker-ce-cli -y
|
||||
- name: Build Docker image
|
||||
run : |
|
||||
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
|
||||
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
|
||||
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
|
||||
tag=${tag//\//-}
|
||||
tag_num=${GITHUB_RUN_NUMBER}
|
||||
echo "tag_num=$tag_num"
|
||||
|
||||
if [[ "$tag" == "main" ]]; then
|
||||
tag="latest"
|
||||
else
|
||||
tag_num="${tag}-${tag_num}"
|
||||
fi
|
||||
|
||||
|
||||
docker build -t nathanwoodburn:$tag_num .
|
||||
docker tag nathanwoodburn:$tag_num git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag_num
|
||||
docker push git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag_num
|
||||
docker tag nathanwoodburn:$tag_num git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag
|
||||
docker push git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag
|
||||
8
.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
__pycache__/
|
||||
|
||||
.env
|
||||
.vs/
|
||||
.venv/
|
||||
*.tmp
|
||||
testing/
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"ExpandedNodes": [
|
||||
""
|
||||
],
|
||||
"PreviewInSolutionExplorer": false
|
||||
}
|
||||
BIN
.vs/slnx.sqlite
8
.well-known/assetlinks.json
Normal file
@@ -0,0 +1,8 @@
|
||||
[{
|
||||
"relation": ["delegate_permission/common.handle_all_urls"],
|
||||
"target": {
|
||||
"namespace": "android_app",
|
||||
"package_name": "au.woodburn.nathan",
|
||||
"sha256_cert_fingerprints": ["D8:97:22:C4:C5:AA:AC:6D:7B:57:F0:19:FF:A1:E7:2A:92:71:EE:CF:1F:E1:AF:5A:87:22:0D:00:76:9D:83:80"]
|
||||
}
|
||||
}]
|
||||
6
.well-known/wallets/.BTC.proof
Normal file
@@ -0,0 +1,6 @@
|
||||
I hereby confirm that I am the owner of the Bitcoin address bc1qzsp3wc2nwayl8awun57tggjn92w0awp9mzsn90.
|
||||
Nathan.Woodburn/
|
||||
--------------------
|
||||
HzEsSV17nmbMwnz55sW6jW/AnmYxW0TAdgiJsYRUyWs7WjBaGlzrvXkH1R8qosQXSvQ1nZNe9dS5SUCZtbNZzuM=
|
||||
--------------------
|
||||
You can verify this signature by pasting it into a signature verification tool such as https://www.verifybitcoinmessage.com/. Don't forget to remove trailing newlines.
|
||||
6
.well-known/wallets/.ETH.proof
Normal file
@@ -0,0 +1,6 @@
|
||||
I hereby confirm that I am the owner of the EVM address 0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e.
|
||||
Nathan.Woodburn/
|
||||
--------------------
|
||||
0x254919e1f2035a4f04614da9e1fbc1f45dab31b03b0baf1bb3325a9f9e437f1f787b99ebc6716b822fc190284c2c678054c91835492ff0df239ec60f6166587f1c
|
||||
--------------------
|
||||
You can verify this signature by pasting it into a signature verification tool such as https://etherscan.io/verifiedSignatures
|
||||
13
.well-known/wallets/.SOL.proof
Normal file
@@ -0,0 +1,13 @@
|
||||
I hereby confirm that I am the owner of the SOL address AJsPEEe6S7XSiVcdZKbeV8GRp1QuhFUsG8mLrqL4XgiU.
|
||||
Nathan.Woodburn/
|
||||
--------------------
|
||||
[71,63,207,190,90,17,145,39,4,98,110,176,86,140,143,107,237,96,24,43,2,116,21,70,47,98,192,24,193,210,89,220,30,128,219,105,9,35,146,188,216,143,164,32,255,44,146,249,153,33,54,214,203,159,80,26,107,165,217,240,153,61,39,0]
|
||||
--------------------
|
||||
0x473fcfbe5a11912704626eb0568c8f6bed60182b027415462f62c018c1d259dc1e80db69092392bcd88fa420ff2c92f9992136d6cb9f501a6ba5d9f0993d2700
|
||||
--------------------
|
||||
2Rd2EkAUwC8u4DtCZ5BXTkJEvWxozrxmcEzn7VbJFFbL81YLQngH9V1bTu3vivaQz7ZGqs5YtpPWxomsYeE7Ws6F
|
||||
--------------------
|
||||
Rz/PvloRkScEYm6wVoyPa+1gGCsCdBVGL2LAGMHSWdwegNtpCSOSvNiPpCD/LJL5mSE21sufUBprpdnwmT0nAA==
|
||||
--------------------
|
||||
You can verify this signature by pasting it into a signature verification tool such as https://amacar.github.io/solana-tools/#verify-message
|
||||
Please note I have included various formats for the signature to make it easier to verify.
|
||||
32
.well-known/wallets/.coins
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"ADA": "Cardano (ADA)",
|
||||
"ATOM": "Cosmos (ATOM)",
|
||||
"AVAX": "Avalanche (AVAX)",
|
||||
"BNB": "Binance (BNB)",
|
||||
"BTC": "Bitcoin (BTC)",
|
||||
"CRO": "Crypto.com (CRO)",
|
||||
"DOT": "Polkadot (DOT)",
|
||||
"ETH": "Ethereum (ETH)",
|
||||
"HNS": "Handshake (HNS)",
|
||||
"MATIC": "Polygon (MATIC)",
|
||||
"SOL": "Solana (SOL)",
|
||||
"XMR": "Monero (XMR)",
|
||||
"XRP": "Ripple (XRP)",
|
||||
"OSMO": "Osmosis (OSMO)",
|
||||
"STARS": "Stargaze (STARS)",
|
||||
"INJ": "Injective (INJ)",
|
||||
"LIKE": "LikeCoin (LIKE)",
|
||||
"SCRT": "Secret Network (SCRT)",
|
||||
"LTC": "Litecoin (LTC)",
|
||||
"DOGE": "Dogecoin (DOGE)",
|
||||
"ALGO": "Algorand (ALGO)",
|
||||
"TON": "Toncoin (TON)",
|
||||
"OP": "Optimism (OP)",
|
||||
"IAA": "IRIS (IAA)",
|
||||
"NEAR": "NEAR Protocol (NEAR)",
|
||||
"KAS": "Kasper (KAS)",
|
||||
"XLM": "Stellar (XLM)",
|
||||
"APT": "Aptos (APT)",
|
||||
"TRX": "Tron (TRX)",
|
||||
"BCH": "Bitcoin Cash (BCH)"
|
||||
}
|
||||
32
.well-known/wallets/.domains
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"ETH":"woodburn.au",
|
||||
"HNS":"nathan.woodburn",
|
||||
"SOL":"woodburn.sol",
|
||||
"ADA": "$nathanwoodburn",
|
||||
"MATIC": "woodburn.au",
|
||||
"BNB": "woodburn.au",
|
||||
"INJ": "woodburn.sol",
|
||||
"ATOM": "woodburn_nathan.cosmos",
|
||||
"OSMO": "woodburn_nathan.osmo",
|
||||
"SCRT": "woodburn_nathan.secret",
|
||||
"AKASH": "woodburn_nathan.akash",
|
||||
"SIF": "woodburn_nathan.sif",
|
||||
"SHENTU": "woodburn_nathan.shentu",
|
||||
"IAA": "woodburn_nathan.iaa",
|
||||
"REGEN": "woodburn_nathan.regen",
|
||||
"PERSISTENCE": "woodburn_nathan.persistence",
|
||||
"BOSTROM": "woodburn_nathan.bostrom",
|
||||
"JUNO": "woodburn_nathan.juno",
|
||||
"AXELAR": "woodburn_nathan.axelar",
|
||||
"SOMM": "woodburn_nathan.somm",
|
||||
"UMEE": "woodburn_nathan.umee",
|
||||
"GRAVITY": "woodburn_nathan.gravity",
|
||||
"STRIDE": "woodburn_nathan.stride",
|
||||
"KAVA": "woodburn_nathan.kava",
|
||||
"QUICK": "woodburn_nathan.quick",
|
||||
"TERRA": "woodburn_nathan.terra",
|
||||
"OMNIFLIX": "woodburn_nathan.omniflix",
|
||||
"LIKE": "woodburn_nathan.like",
|
||||
"CHIHUAHUA": "woodburn_nathan.chihuahua",
|
||||
"NEAR": "woodburn.near"
|
||||
}
|
||||
88
.well-known/wallets/.tokens
Normal file
@@ -0,0 +1,88 @@
|
||||
[
|
||||
{
|
||||
"symbol": "USDT",
|
||||
"name": "Tether",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "USDT",
|
||||
"name": "Tether",
|
||||
"chain": "SOL"
|
||||
},
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"name": "USDC",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"name": "USDC",
|
||||
"chain": "SOL"
|
||||
},
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"name": "USDC",
|
||||
"chain": "NOBLE"
|
||||
},
|
||||
{
|
||||
"symbol": "PYUSD",
|
||||
"name": "PayPal USD",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "PYUSD",
|
||||
"name": "PayPal USD",
|
||||
"chain": "SOL"
|
||||
},
|
||||
{
|
||||
"symbol": "WDBRN",
|
||||
"name": "Woodburn",
|
||||
"chain": "SOL"
|
||||
},
|
||||
{
|
||||
"symbol": "DAI",
|
||||
"name": "DAI Stablecoin",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "RAY",
|
||||
"name": "Raydium",
|
||||
"chain": "SOL"
|
||||
},
|
||||
{
|
||||
"symbol": "UNI",
|
||||
"name": "Uniswap",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "AAVE",
|
||||
"name": "AAVE",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "1INCH",
|
||||
"name": "1INCH",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "PSP",
|
||||
"name": "ParaSwap",
|
||||
"chain": "ETH"
|
||||
},
|
||||
{
|
||||
"symbol": "CAKE",
|
||||
"name": "PancakeSwap",
|
||||
"chain": "BNB"
|
||||
},
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"name": "Bitcoin Lightning",
|
||||
"chain": "null",
|
||||
"address": "thinbadger6@primal.net"
|
||||
},
|
||||
{
|
||||
"symbol": "stWDBRN",
|
||||
"name": "Woodburn Vault",
|
||||
"chain": "SOL"
|
||||
}
|
||||
]
|
||||
1
.well-known/wallets/ADA
Normal file
@@ -0,0 +1 @@
|
||||
addr1qy5l7vmx9l2uexv44hzjak4zmwecee4hht0k6shtk5jh7cjzu99z8vx5n467fquzradx7p42grdylv3zq2cgfw0f32fs443hxs
|
||||
1
.well-known/wallets/AKASH
Normal file
@@ -0,0 +1 @@
|
||||
akash1ugraczuyfmxy8k38nps4fu7e5derryzxpk2n77
|
||||
1
.well-known/wallets/ALGO
Normal file
@@ -0,0 +1 @@
|
||||
OUWNGLRLAN56VTNI3F4EKISPDIFIF2HMCV3OYS3DER7WXF2LCFMEV2TWPI
|
||||
1
.well-known/wallets/APT
Normal file
@@ -0,0 +1 @@
|
||||
0x372b3c513d149e5511912eba22e31f07d2b289e20ba84b2e0b7756e7a00295c3
|
||||
1
.well-known/wallets/ATOM
Normal file
@@ -0,0 +1 @@
|
||||
cosmos1ugraczuyfmxy8k38nps4fu7e5derryzxvd858y
|
||||
1
.well-known/wallets/AVAX
Normal file
@@ -0,0 +1 @@
|
||||
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e
|
||||
1
.well-known/wallets/AXELAR
Normal file
@@ -0,0 +1 @@
|
||||
axelar1ugraczuyfmxy8k38nps4fu7e5derryzxgr3uv9
|
||||
1
.well-known/wallets/BCH
Normal file
@@ -0,0 +1 @@
|
||||
qpsgs9daa6e2mn4v0u02pfunsme68a5uayn7e8knug
|
||||
1
.well-known/wallets/BNB
Normal file
@@ -0,0 +1 @@
|
||||
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e
|
||||
1
.well-known/wallets/BOSTROM
Normal file
@@ -0,0 +1 @@
|
||||
bostrom1ugraczuyfmxy8k38nps4fu7e5derryzx07n8er
|
||||
@@ -1 +1 @@
|
||||
bc1qhs94zzcw64qnwq4hvk056rwxwvgrkd7tq7d4xw
|
||||
bc1qzsp3wc2nwayl8awun57tggjn92w0awp9mzsn90
|
||||
1
.well-known/wallets/CHIHUAHUA
Normal file
@@ -0,0 +1 @@
|
||||
chihuahua1ugraczuyfmxy8k38nps4fu7e5derryzx0c26xx
|
||||
1
.well-known/wallets/DASH
Normal file
@@ -0,0 +1 @@
|
||||
Xpr5auWs1waBmWT3XsWXwzu8Di32x8VfH2
|
||||
1
.well-known/wallets/DOGE
Normal file
@@ -0,0 +1 @@
|
||||
DCrBQ3zoy3jBWwwT95tyjBVjYFXLgKS4MC
|
||||
1
.well-known/wallets/DOT
Normal file
@@ -0,0 +1 @@
|
||||
13KSjM7rxFu7SxAuqcNZ76wyjhfuV4Kx8pWfqpFAykSQeEn3
|
||||
1
.well-known/wallets/EOS
Normal file
@@ -0,0 +1 @@
|
||||
nwoodburn111
|
||||
1
.well-known/wallets/GRAVITY
Normal file
@@ -0,0 +1 @@
|
||||
gravity1ugraczuyfmxy8k38nps4fu7e5derryzxga4vzv
|
||||
@@ -1 +1 @@
|
||||
hs1qk4sq6mk3kcshp02xgchukv09m38czdnq5qv76w
|
||||
hs1qh7uzytf2ftwkd9dmjjs7az9qfver5m7dd7x4ej
|
||||
1
.well-known/wallets/IAA
Normal file
@@ -0,0 +1 @@
|
||||
iaa1ugraczuyfmxy8k38nps4fu7e5derryzxe08994
|
||||
1
.well-known/wallets/INJ
Normal file
@@ -0,0 +1 @@
|
||||
inj1dj6t8xlvyw5jrjdzp5rphutageqtp5u7wflgv9
|
||||
1
.well-known/wallets/JUNO
Normal file
@@ -0,0 +1 @@
|
||||
juno1ugraczuyfmxy8k38nps4fu7e5derryzx6ly0qc
|
||||
1
.well-known/wallets/KAS
Normal file
@@ -0,0 +1 @@
|
||||
kaspa:qzl7av7gq5j594pcs2gn6zf2xadpmhdm90nygjstvte0n6gt9f4fgx0w2dhm8
|
||||
1
.well-known/wallets/KAVA
Normal file
@@ -0,0 +1 @@
|
||||
kava1ugraczuyfmxy8k38nps4fu7e5derryzxscnf3r
|
||||
1
.well-known/wallets/LIKE
Normal file
@@ -0,0 +1 @@
|
||||
like1ugraczuyfmxy8k38nps4fu7e5derryzxl3mkyl
|
||||
1
.well-known/wallets/LTC
Normal file
@@ -0,0 +1 @@
|
||||
ltc1qx79yxm2gwnsrch925343hg3zt3r085x725a0tw
|
||||
1
.well-known/wallets/NEAR
Normal file
@@ -0,0 +1 @@
|
||||
3b06b5e91361739aed92707e888fbbd33f97b24a8a3f8fdd54a2c7e7fd7082a3
|
||||
1
.well-known/wallets/NOBLE
Normal file
@@ -0,0 +1 @@
|
||||
noble1ugraczuyfmxy8k38nps4fu7e5derryzxywjul2
|
||||
1
.well-known/wallets/OMNIFLIX
Normal file
@@ -0,0 +1 @@
|
||||
omniflix1ugraczuyfmxy8k38nps4fu7e5derryzx3nkds6
|
||||
1
.well-known/wallets/OP
Normal file
@@ -0,0 +1 @@
|
||||
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e
|
||||
1
.well-known/wallets/OSMO
Normal file
@@ -0,0 +1 @@
|
||||
osmo1ugraczuyfmxy8k38nps4fu7e5derryzxyk5y3k
|
||||
1
.well-known/wallets/PERSISTENCE
Normal file
@@ -0,0 +1 @@
|
||||
persistence1ugraczuyfmxy8k38nps4fu7e5derryzxzpp8fq
|
||||
1
.well-known/wallets/QUICK
Normal file
@@ -0,0 +1 @@
|
||||
quick1ugraczuyfmxy8k38nps4fu7e5derryzx8fhx7k
|
||||
1
.well-known/wallets/REGEN
Normal file
@@ -0,0 +1 @@
|
||||
regen1ugraczuyfmxy8k38nps4fu7e5derryzxn0vg3q
|
||||
1
.well-known/wallets/SCRT
Normal file
@@ -0,0 +1 @@
|
||||
secret1ugraczuyfmxy8k38nps4fu7e5derryzxwgna6c
|
||||
1
.well-known/wallets/SENT
Normal file
@@ -0,0 +1 @@
|
||||
sent1ugraczuyfmxy8k38nps4fu7e5derryzxhk3drt
|
||||
1
.well-known/wallets/SHENTU
Normal file
@@ -0,0 +1 @@
|
||||
shentu1ugraczuyfmxy8k38nps4fu7e5derryzxyerd4e
|
||||
1
.well-known/wallets/SIF
Normal file
@@ -0,0 +1 @@
|
||||
sif1ugraczuyfmxy8k38nps4fu7e5derryzxfsgzg0
|
||||
1
.well-known/wallets/SOMM
Normal file
@@ -0,0 +1 @@
|
||||
somm1ugraczuyfmxy8k38nps4fu7e5derryzxq3gckw
|
||||
1
.well-known/wallets/STARS
Normal file
@@ -0,0 +1 @@
|
||||
stars1ugraczuyfmxy8k38nps4fu7e5derryzxc3sfv4
|
||||
1
.well-known/wallets/STRIDE
Normal file
@@ -0,0 +1 @@
|
||||
stride1ugraczuyfmxy8k38nps4fu7e5derryzx0x8gng
|
||||
1
.well-known/wallets/SUI
Normal file
@@ -0,0 +1 @@
|
||||
0x9e14ca8b9bf9661fd8a67c2c147bb1f7ea81eb38eb10938b6a9cecb54419e3b2
|
||||
1
.well-known/wallets/TERRA
Normal file
@@ -0,0 +1 @@
|
||||
terra1ugraczuyfmxy8k38nps4fu7e5derryzx2fa59y
|
||||
1
.well-known/wallets/TON
Normal file
@@ -0,0 +1 @@
|
||||
UQDqC1B0a3S9th8ncaQHYJ689dnu9c0zJXeV727UMak9WbBm
|
||||
1
.well-known/wallets/TRX
Normal file
@@ -0,0 +1 @@
|
||||
THjwavxGZahj1scVw75fhGP2HCAcjNxwsK
|
||||
1
.well-known/wallets/UMEE
Normal file
@@ -0,0 +1 @@
|
||||
umee1ugraczuyfmxy8k38nps4fu7e5derryzx7m6trk
|
||||
1
.well-known/wallets/XLM
Normal file
@@ -0,0 +1 @@
|
||||
GCK4PA53V26MNP6U57EPK7EA42TBQMGJ4TUPMUPLLQNPZ64YX3XVLZGQ
|
||||
1
.well-known/wallets/XRP
Normal file
@@ -0,0 +1 @@
|
||||
rKzdnYvwDyeki5VCgMwjuofjBjAbg3DJnB
|
||||
12
.well-known/xrp-ledger.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
[METADATA]
|
||||
modified = 2024-07-02T00:00:00.000Z
|
||||
expires = 2050-07-02T00:00:00.000Z
|
||||
|
||||
[[ACCOUNTS]]
|
||||
address = "rKzdnYvwDyeki5VCgMwjuofjBjAbg3DJnB"
|
||||
desc = "Nathan.Woodburn/ (Twitter: @nathanwoodburn)"
|
||||
|
||||
[[PRINCIPALS]]
|
||||
name = "Nathan Woodburn"
|
||||
email = "xrp@nathan.woodburn.au"
|
||||
social_1 = "https://nathan.woodburn.au"
|
||||
93
403.css
@@ -1,93 +0,0 @@
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
/* width: 100%; */
|
||||
height: 99%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
family: "Poppins", sans-serif;
|
||||
background-image: linear-gradient(45deg, #f6d200 25%, #181617 25%, #181617 50%, #f6d200 50%, #f6d200 75%, #181617 75%, #181617 100%);
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-transform: uppercase;
|
||||
background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
animation: move 5s ease infinite;
|
||||
font-size: 384px;
|
||||
margin: 0;
|
||||
line-height: 0.7;
|
||||
position: relative;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
}
|
||||
h1:before, h1:after {
|
||||
content: "Caution";
|
||||
background-color: #f6d200;
|
||||
color: #181617;
|
||||
border-radius: 10px;
|
||||
font-size: 35px;
|
||||
position: absolute;
|
||||
padding: 31px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
-webkit-text-fill-color: #181617;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%) rotate(20deg);
|
||||
}
|
||||
h1:before {
|
||||
content: "";
|
||||
padding: 70px 130px;
|
||||
background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
|
||||
box-shadow: 0px 0px 10px #181617;
|
||||
}
|
||||
h1 span:before, h1 span:after {
|
||||
content: "";
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: #757575;
|
||||
color: #757575;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
top: 20%;
|
||||
z-index: 3;
|
||||
box-shadow: 0px 60px 0 0px;
|
||||
}
|
||||
h1 span:before {
|
||||
left: 37%;
|
||||
transform: rotate(22deg);
|
||||
top: -44%;
|
||||
}
|
||||
h1 span:after {
|
||||
right: 34%;
|
||||
transform: rotate(22deg);
|
||||
top: 3%;
|
||||
}
|
||||
input {
|
||||
margin-top: 3em;
|
||||
background: #f6d200;
|
||||
color: #181617;
|
||||
border: 0;
|
||||
padding: 20px 40px;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0px 0px 10px #181617;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
17
403.html
@@ -1,17 +0,0 @@
|
||||
<!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.0">
|
||||
<title>403 | Woodburn</title>
|
||||
<link rel="stylesheet" href="403.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1 class="text"><span>403</span></h1>
|
||||
<br>
|
||||
<form action="https://id.woodburn.au/logout">
|
||||
<input type="submit" value="Logout" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
24
404.html
@@ -1,24 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" >
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Nathan Woodburn</title>
|
||||
<link rel="icon" type="image/png" href="../assets/img/NJW Icon 512.png"/>
|
||||
<link rel="icon" type="image/png" href="https://nathan.woodburn.id.au/assets/img/NJW Icon 512.png"/>
|
||||
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css'><link rel="stylesheet" href="https://nathan.woodburn.id.au/404.css">
|
||||
</head>
|
||||
<body style="background-color:white;">
|
||||
<!-- partial:index.partial.html -->
|
||||
<p><br><br><br></p>
|
||||
<h1 style="text-align:center">Space Invaders destroyed this page!</h1>
|
||||
<t2 style="text-align:center">Take revenge on them!</t2>
|
||||
<p class="mobile"><br><br><br><br><br><br></p>
|
||||
<p class="center"><br><br><br>Use <span class="label label-danger">Space</span> to shoot and <span class="label label-danger">←</span> <span class="label label-danger">→</span> to move!   <button class="btn btn-default btn-xs" id="restart">Restart</button> or <button class="btn btn-default btn-xs" onclick="location.href='javascript:history.back()'" type="button">
|
||||
Retreat</button></p>
|
||||
|
||||
<canvas id="space-invaders">
|
||||
<!-- partial -->
|
||||
<script src="https://nathan.woodburn.id.au/404.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
446
404.js
@@ -1,446 +0,0 @@
|
||||
;(function() {
|
||||
"use strict";
|
||||
|
||||
// General
|
||||
var canvas,
|
||||
screen,
|
||||
gameSize,
|
||||
game;
|
||||
|
||||
// Assets
|
||||
var invaderCanvas,
|
||||
invaderMultiplier,
|
||||
invaderSize = 20,
|
||||
initialOffsetInvader,
|
||||
invaderAttackRate,
|
||||
invaderSpeed,
|
||||
invaderSpawnDelay = 250;
|
||||
|
||||
// Counter
|
||||
var i = 0,
|
||||
kills = 0,
|
||||
spawnDelayCounter = invaderSpawnDelay;
|
||||
|
||||
var invaderDownTimer;
|
||||
|
||||
// Text
|
||||
var blocks = [
|
||||
[3, 4, 8, 9, 10, 15, 16],
|
||||
[2, 4, 7, 11, 14, 16],
|
||||
[1, 4, 7, 11, 13, 16],
|
||||
[1, 2, 3, 4, 5, 7, 11, 13, 14, 15, 16, 17],
|
||||
[4, 7, 11, 16],
|
||||
[4, 8, 9, 10, 16]
|
||||
];
|
||||
|
||||
// Game Controller
|
||||
// ---------------
|
||||
var Game = function() {
|
||||
|
||||
this.level = -1;
|
||||
this.lost = false;
|
||||
|
||||
this.player = new Player();
|
||||
this.invaders = [];
|
||||
this.invaderShots = [];
|
||||
|
||||
if (invaderDownTimer === undefined) {
|
||||
invaderDownTimer = setInterval(function() {
|
||||
for (i = 0; i < game.invaders.length; i++) game.invaders[i].move();
|
||||
}, 1000 - (this.level * 1.8));
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
Game.prototype = {
|
||||
update: function() {
|
||||
|
||||
// Next level
|
||||
if (game.invaders.length === 0) {
|
||||
|
||||
spawnDelayCounter += 1;
|
||||
if (spawnDelayCounter < invaderSpawnDelay) return;
|
||||
|
||||
this.level += 1;
|
||||
|
||||
invaderAttackRate -= 0.002;
|
||||
invaderSpeed += 10;
|
||||
|
||||
game.invaders = createInvaders();
|
||||
|
||||
spawnDelayCounter = 0;
|
||||
}
|
||||
|
||||
if (!this.lost) {
|
||||
|
||||
// Collision
|
||||
game.player.projectile.forEach(function(projectile) {
|
||||
game.invaders.forEach(function(invader) {
|
||||
if (collides(projectile, invader)) {
|
||||
invader.destroy();
|
||||
projectile.active = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
this.invaderShots.forEach(function(invaderShots) {
|
||||
if (collides(invaderShots, game.player)) {
|
||||
game.player.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
for (i = 0; i < game.invaders.length; i++) game.invaders[i].update();
|
||||
|
||||
}
|
||||
|
||||
// Don't stop player & projectiles.. they look nice
|
||||
game.player.update();
|
||||
for (i = 0; i < game.invaderShots.length; i++) game.invaderShots[i].update();
|
||||
|
||||
this.invaders = game.invaders.filter(function(invader) {
|
||||
return invader.active;
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
draw: function() {
|
||||
|
||||
if (this.lost) {
|
||||
screen.fillStyle = "rgba(0, 0, 0, 0.03)";
|
||||
screen.fillRect(0, 0, gameSize.width, gameSize.height);
|
||||
|
||||
screen.font = "55px Lucida Console";
|
||||
screen.textAlign = "center";
|
||||
screen.fillStyle = "white";
|
||||
screen.fillText("You lost", gameSize.width / 2, gameSize.height / 2);
|
||||
screen.font = "20px Lucida Console";
|
||||
screen.fillText("Points: " + kills, gameSize.width / 2, gameSize.height / 2 + 30);
|
||||
|
||||
} else {
|
||||
screen.clearRect(0, 0, gameSize.width, gameSize.height);
|
||||
|
||||
screen.font = "10px Lucida Console";
|
||||
screen.textAlign = "right";
|
||||
screen.fillText("Points: " + kills, gameSize.width, gameSize.height - 12);
|
||||
}
|
||||
|
||||
screen.beginPath();
|
||||
|
||||
var i;
|
||||
this.player.draw();
|
||||
if (!this.lost)
|
||||
for (i = 0; i < this.invaders.length; i++) this.invaders[i].draw();
|
||||
for (i = 0; i < this.invaderShots.length; i++) this.invaderShots[i].draw();
|
||||
|
||||
screen.fill();
|
||||
|
||||
},
|
||||
|
||||
invadersBelow: function(invader) {
|
||||
return this.invaders.filter(function(b) {
|
||||
return Math.abs(invader.coordinates.x - b.coordinates.x) === 0 &&
|
||||
b.coordinates.y > invader.coordinates.y;
|
||||
}).length > 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Invaders
|
||||
// --------
|
||||
var Invader = function(coordinates) {
|
||||
this.active = true;
|
||||
this.coordinates = coordinates;
|
||||
this.size = {
|
||||
width: invaderSize,
|
||||
height: invaderSize
|
||||
};
|
||||
|
||||
this.patrolX = 0;
|
||||
this.speedX = invaderSpeed;
|
||||
|
||||
};
|
||||
|
||||
Invader.prototype = {
|
||||
update: function() {
|
||||
|
||||
if (Math.random() > invaderAttackRate && !game.invadersBelow(this)) {
|
||||
var projectile = new Projectile({
|
||||
x: this.coordinates.x + this.size.width / 2,
|
||||
y: this.coordinates.y + this.size.height - 5
|
||||
}, {
|
||||
x: 0,
|
||||
y: 2
|
||||
});
|
||||
game.invaderShots.push(projectile);
|
||||
}
|
||||
|
||||
},
|
||||
draw: function() {
|
||||
if (this.active) screen.drawImage(invaderCanvas, this.coordinates.x, this.coordinates.y);
|
||||
|
||||
},
|
||||
move: function() {
|
||||
if (this.patrolX < 0 || this.patrolX > 100) {
|
||||
this.speedX = -this.speedX;
|
||||
this.patrolX += this.speedX;
|
||||
this.coordinates.y += this.size.height;
|
||||
|
||||
if (this.coordinates.y + this.size.height * 2 > gameSize.height) game.lost = true;
|
||||
|
||||
} else {
|
||||
this.coordinates.x += this.speedX;
|
||||
this.patrolX += this.speedX;
|
||||
}
|
||||
|
||||
},
|
||||
destroy: function() {
|
||||
this.active = false;
|
||||
kills += 1;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Player
|
||||
// ------
|
||||
var Player = function() {
|
||||
this.active = true;
|
||||
this.size = {
|
||||
width: 16,
|
||||
height: 8
|
||||
};
|
||||
this.shooterHeat = -3;
|
||||
this.coordinates = {
|
||||
x: gameSize.width / 2 - (this.size.width / 2) | 0,
|
||||
y: gameSize.height - this.size.height * 2
|
||||
};
|
||||
|
||||
this.projectile = [];
|
||||
this.keyboarder = new KeyController();
|
||||
};
|
||||
|
||||
Player.prototype = {
|
||||
update: function() {
|
||||
|
||||
for (var i = 0; i < this.projectile.length; i++) this.projectile[i].update();
|
||||
|
||||
this.projectile = this.projectile.filter(function(projectile) {
|
||||
return projectile.active;
|
||||
});
|
||||
|
||||
if (!this.active) return;
|
||||
|
||||
if (this.keyboarder.isDown(this.keyboarder.KEYS.LEFT) && this.coordinates.x > 0) this.coordinates.x -= 2;
|
||||
else if (this.keyboarder.isDown(this.keyboarder.KEYS.RIGHT) && this.coordinates.x < gameSize.width - this.size.width) this.coordinates.x += 2;
|
||||
|
||||
if (this.keyboarder.isDown(this.keyboarder.KEYS.Space)) {
|
||||
this.shooterHeat += 1;
|
||||
if (this.shooterHeat < 0) {
|
||||
var projectile = new Projectile({
|
||||
x: this.coordinates.x + this.size.width / 2 - 1,
|
||||
y: this.coordinates.y - 1
|
||||
}, {
|
||||
x: 0,
|
||||
y: -7
|
||||
});
|
||||
this.projectile.push(projectile);
|
||||
} else if (this.shooterHeat > 12) this.shooterHeat = -3;
|
||||
} else {
|
||||
this.shooterHeat = -3;
|
||||
}
|
||||
|
||||
},
|
||||
draw: function() {
|
||||
if (this.active) {
|
||||
screen.rect(this.coordinates.x, this.coordinates.y, this.size.width, this.size.height);
|
||||
screen.rect(this.coordinates.x - 2, this.coordinates.y + 2, 20, 6);
|
||||
screen.rect(this.coordinates.x + 6, this.coordinates.y - 4, 4, 4);
|
||||
}
|
||||
|
||||
for (var i = 0; i < this.projectile.length; i++) this.projectile[i].draw();
|
||||
|
||||
},
|
||||
destroy: function() {
|
||||
this.active = false;
|
||||
game.lost = true;
|
||||
}
|
||||
};
|
||||
|
||||
// Projectile
|
||||
// ------
|
||||
var Projectile = function(coordinates, velocity) {
|
||||
this.active = true;
|
||||
this.coordinates = coordinates;
|
||||
this.size = {
|
||||
width: 3,
|
||||
height: 3
|
||||
};
|
||||
this.velocity = velocity;
|
||||
};
|
||||
|
||||
Projectile.prototype = {
|
||||
update: function() {
|
||||
this.coordinates.x += this.velocity.x;
|
||||
this.coordinates.y += this.velocity.y;
|
||||
|
||||
if (this.coordinates.y > gameSize.height || this.coordinates.y < 0) this.active = false;
|
||||
|
||||
},
|
||||
draw: function() {
|
||||
if (this.active) screen.rect(this.coordinates.x, this.coordinates.y, this.size.width, this.size.height);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// Keyboard input tracking
|
||||
// -----------------------
|
||||
var KeyController = function() {
|
||||
this.KEYS = {
|
||||
LEFT: 37,
|
||||
RIGHT: 39,
|
||||
Space: 32
|
||||
};
|
||||
var keyCode = [37, 39, 32];
|
||||
var keyState = {};
|
||||
|
||||
var counter;
|
||||
window.addEventListener('keydown', function(e) {
|
||||
for (counter = 0; counter < keyCode.length; counter++)
|
||||
if (keyCode[counter] == e.keyCode) {
|
||||
keyState[e.keyCode] = true;
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
window.addEventListener('keyup', function(e) {
|
||||
for (counter = 0; counter < keyCode.length; counter++)
|
||||
if (keyCode[counter] == e.keyCode) {
|
||||
keyState[e.keyCode] = false;
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
this.isDown = function(keyCode) {
|
||||
return keyState[keyCode] === true;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
// Other functions
|
||||
// ---------------
|
||||
function collides(a, b) {
|
||||
return a.coordinates.x < b.coordinates.x + b.size.width &&
|
||||
a.coordinates.x + a.size.width > b.coordinates.x &&
|
||||
a.coordinates.y < b.coordinates.y + b.size.height &&
|
||||
a.coordinates.y + a.size.height > b.coordinates.y;
|
||||
}
|
||||
|
||||
function getPixelRow(rowRaw) {
|
||||
var textRow = [],
|
||||
placer = 0,
|
||||
row = Math.floor(rowRaw / invaderMultiplier);
|
||||
if (row >= blocks.length) return [];
|
||||
for (var i = 0; i < blocks[row].length; i++) {
|
||||
var tmpContent = blocks[row][i] * invaderMultiplier;
|
||||
for (var j = 0; j < invaderMultiplier; j++) textRow[placer + j] = tmpContent + j;
|
||||
placer += invaderMultiplier;
|
||||
}
|
||||
return textRow;
|
||||
}
|
||||
|
||||
// Write Text
|
||||
// -----------
|
||||
function createInvaders() {
|
||||
var invaders = [];
|
||||
|
||||
var i = blocks.length * invaderMultiplier;
|
||||
while (i--) {
|
||||
var j = getPixelRow(i);
|
||||
for (var k = 0; k < j.length; k++) {
|
||||
invaders.push(new Invader({
|
||||
x: j[k] * invaderSize,
|
||||
y: i * invaderSize
|
||||
}));
|
||||
}
|
||||
}
|
||||
return invaders;
|
||||
}
|
||||
|
||||
// Start game
|
||||
// ----------
|
||||
window.addEventListener('load', function() {
|
||||
|
||||
var invaderAsset = new Image;
|
||||
invaderAsset.onload = function() {
|
||||
|
||||
invaderCanvas = document.createElement('canvas');
|
||||
invaderCanvas.width = invaderSize;
|
||||
invaderCanvas.height = invaderSize;
|
||||
invaderCanvas.getContext("2d").drawImage(invaderAsset, 0, 0);
|
||||
|
||||
// Game Creation
|
||||
canvas = document.getElementById("space-invaders");
|
||||
screen = canvas.getContext('2d');
|
||||
|
||||
initGameStart();
|
||||
loop();
|
||||
|
||||
};
|
||||
invaderAsset.src = "/assets/img/invader.gif";
|
||||
|
||||
});
|
||||
|
||||
window.addEventListener('resize', function() {
|
||||
initGameStart();
|
||||
});
|
||||
document.getElementById('restart').addEventListener('click', function() {
|
||||
initGameStart();
|
||||
});
|
||||
|
||||
function initGameStart() {
|
||||
if (window.innerWidth > 1200) {
|
||||
screen.canvas.width = 1200;
|
||||
screen.canvas.height = 500;
|
||||
gameSize = {
|
||||
width: 1200,
|
||||
height: 500
|
||||
};
|
||||
invaderMultiplier = 3;
|
||||
initialOffsetInvader = 420;
|
||||
} else if (window.innerWidth > 800) {
|
||||
screen.canvas.width = 900;
|
||||
screen.canvas.height = 600;
|
||||
gameSize = {
|
||||
width: 900,
|
||||
height: 600
|
||||
};
|
||||
invaderMultiplier = 2;
|
||||
initialOffsetInvader = 280;
|
||||
} else {
|
||||
screen.canvas.width = 600;
|
||||
screen.canvas.height = 300;
|
||||
gameSize = {
|
||||
width: 600,
|
||||
height: 300
|
||||
};
|
||||
invaderMultiplier = 1;
|
||||
initialOffsetInvader = 140;
|
||||
}
|
||||
|
||||
kills = 0;
|
||||
invaderAttackRate = 0.999;
|
||||
invaderSpeed = 20;
|
||||
spawnDelayCounter = invaderSpawnDelay;
|
||||
|
||||
game = new Game();
|
||||
}
|
||||
|
||||
function loop() {
|
||||
game.update();
|
||||
game.draw();
|
||||
|
||||
requestAnimationFrame(loop);
|
||||
}
|
||||
|
||||
})();
|
||||
293
404M.css
@@ -1,293 +0,0 @@
|
||||
@import url(https://fonts.googleapis.com/css?family=Ubuntu);
|
||||
html, body {
|
||||
background: #28254C;
|
||||
font-family: 'Ubuntu';
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.box {
|
||||
width: 350px;
|
||||
height: 100%;
|
||||
max-height: 600px;
|
||||
min-height: 450px;
|
||||
background: #332F63;
|
||||
border-radius: 20px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
padding: 30px 50px;
|
||||
}
|
||||
.box .box__ghost {
|
||||
padding: 15px 25px 25px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
transform: translate(-50%, -30%);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(1) {
|
||||
opacity: .2;
|
||||
animation: shine 4s ease-in-out 3s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(1):before, .box .box__ghost .symbol:nth-child(1):after {
|
||||
content: '';
|
||||
width: 12px;
|
||||
height: 4px;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
border-radius: 5px;
|
||||
bottom: 65px;
|
||||
left: 0;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(1):before {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(1):after {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(2) {
|
||||
position: absolute;
|
||||
left: -5px;
|
||||
top: 30px;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
border: 4px solid;
|
||||
border-radius: 50%;
|
||||
border-color: #fff;
|
||||
opacity: .2;
|
||||
animation: shine 4s ease-in-out 1.3s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(3) {
|
||||
opacity: .2;
|
||||
animation: shine 3s ease-in-out .5s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(3):before, .box .box__ghost .symbol:nth-child(3):after {
|
||||
content: '';
|
||||
width: 12px;
|
||||
height: 4px;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
border-radius: 5px;
|
||||
top: 5px;
|
||||
left: 40px;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(3):before {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(3):after {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(4) {
|
||||
opacity: .2;
|
||||
animation: shine 6s ease-in-out 1.6s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(4):before, .box .box__ghost .symbol:nth-child(4):after {
|
||||
content: '';
|
||||
width: 15px;
|
||||
height: 4px;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
border-radius: 5px;
|
||||
top: 10px;
|
||||
right: 30px;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(4):before {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(4):after {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(5) {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 40px;
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
border: 3px solid;
|
||||
border-radius: 50%;
|
||||
border-color: #fff;
|
||||
opacity: .2;
|
||||
animation: shine 1.7s ease-in-out 7s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(6) {
|
||||
opacity: .2;
|
||||
animation: shine 2s ease-in-out 6s infinite;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(6):before, .box .box__ghost .symbol:nth-child(6):after {
|
||||
content: '';
|
||||
width: 15px;
|
||||
height: 4px;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
border-radius: 5px;
|
||||
bottom: 65px;
|
||||
right: -5px;
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(6):before {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.box .box__ghost .symbol:nth-child(6):after {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.box .box__ghost .box__ghost-container {
|
||||
background: #fff;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border-radius: 100px 100px 0 0;
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
animation: upndown 3s ease-in-out infinite;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-eyes {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 45%;
|
||||
height: 12px;
|
||||
width: 70px;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-left {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: #332F63;
|
||||
border-radius: 50%;
|
||||
margin: 0 10px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-right {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: #332F63;
|
||||
border-radius: 50%;
|
||||
margin: 0 10px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-bottom {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-bottom div {
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
top: -10px;
|
||||
height: 20px;
|
||||
border-radius: 100%;
|
||||
background-color: #fff;
|
||||
}
|
||||
.box .box__ghost .box__ghost-container .box__ghost-bottom div:nth-child(2n) {
|
||||
top: -12px;
|
||||
margin: 0 -0px;
|
||||
border-top: 15px solid #332F63;
|
||||
background: transparent;
|
||||
}
|
||||
.box .box__ghost .box__ghost-shadow {
|
||||
height: 20px;
|
||||
box-shadow: 0 50px 15px 5px #3B3769;
|
||||
border-radius: 50%;
|
||||
margin: 0 auto;
|
||||
animation: smallnbig 3s ease-in-out infinite;
|
||||
}
|
||||
.box .box__description {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.box .box__description .box__description-container {
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
width: 200px;
|
||||
font-size: 16px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.box .box__description .box__description-container .box__description-title {
|
||||
font-size: 24px;
|
||||
letter-spacing: .5px;
|
||||
}
|
||||
.box .box__description .box__description-container .box__description-text {
|
||||
color: #8C8AA7;
|
||||
line-height: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.box .box__description .box__button {
|
||||
display: block;
|
||||
position: relative;
|
||||
background: #FF5E65;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 50px;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: #fff;
|
||||
line-height: 50px;
|
||||
font-size: 18px;
|
||||
padding: 0 70px;
|
||||
white-space: nowrap;
|
||||
margin-top: 25px;
|
||||
transition: background .5s ease;
|
||||
overflow: hidden;
|
||||
-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||||
}
|
||||
.box .box__description .box__button:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
height: 100px;
|
||||
background: #fff;
|
||||
bottom: -25px;
|
||||
left: 0;
|
||||
border: 2px solid #fff;
|
||||
transform: translateX(-50px) rotate(45deg);
|
||||
transition: transform .5s ease;
|
||||
}
|
||||
.box .box__description .box__button:hover {
|
||||
background: transparent;
|
||||
border-color: #fff;
|
||||
}
|
||||
.box .box__description .box__button:hover:before {
|
||||
transform: translateX(250px) rotate(45deg);
|
||||
}
|
||||
|
||||
@keyframes upndown {
|
||||
0% {
|
||||
transform: translateY(5px);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(15px);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(5px);
|
||||
}
|
||||
}
|
||||
@keyframes smallnbig {
|
||||
0% {
|
||||
width: 90px;
|
||||
}
|
||||
50% {
|
||||
width: 100px;
|
||||
}
|
||||
100% {
|
||||
width: 90px;
|
||||
}
|
||||
}
|
||||
@keyframes shine {
|
||||
0% {
|
||||
opacity: .2;
|
||||
}
|
||||
25% {
|
||||
opacity: .1;
|
||||
}
|
||||
50% {
|
||||
opacity: .2;
|
||||
}
|
||||
100% {
|
||||
opacity: .2;
|
||||
}
|
||||
}
|
||||
53
404M.html
@@ -1,53 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" >
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Nathan Woodburn</title>
|
||||
<link rel="icon" type="image/png" href="../images/favicon.png"/>
|
||||
<link rel="icon" type="image/png" href="https://www.nathanwoodburn.tk/images/favicon.png"/>
|
||||
<link rel="stylesheet" href="./404M.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- partial:index.partial.html -->
|
||||
<div class="box">
|
||||
<div class="box__ghost">
|
||||
<div class="symbol"></div>
|
||||
<div class="symbol"></div>
|
||||
<div class="symbol"></div>
|
||||
<div class="symbol"></div>
|
||||
<div class="symbol"></div>
|
||||
<div class="symbol"></div>
|
||||
|
||||
<div class="box__ghost-container">
|
||||
<div class="box__ghost-eyes">
|
||||
<div class="box__eye-left"></div>
|
||||
<div class="box__eye-right"></div>
|
||||
</div>
|
||||
<div class="box__ghost-bottom">
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box__ghost-shadow"></div>
|
||||
</div>
|
||||
|
||||
<div class="box__description">
|
||||
<div class="box__description-container">
|
||||
<div class="box__description-title">Whoops!</div>
|
||||
<div class="box__description-text">It seems like we couldn't find the page you were looking for</div>
|
||||
</div>
|
||||
|
||||
<a href="https://www.nathanwoodburn.tk" class="box__button">Go back</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- partial -->
|
||||
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script><script src="./404M.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
20
404M.js
@@ -1,20 +0,0 @@
|
||||
//based on https://dribbble.com/shots/3913847-404-page
|
||||
|
||||
var pageX = $(document).width();
|
||||
var pageY = $(document).height();
|
||||
var mouseY=0;
|
||||
var mouseX=0;
|
||||
|
||||
$(document).mousemove(function( event ) {
|
||||
//verticalAxis
|
||||
mouseY = event.pageY;
|
||||
yAxis = (pageY/2-mouseY)/pageY*300;
|
||||
//horizontalAxis
|
||||
mouseX = event.pageX / -pageX;
|
||||
xAxis = -mouseX * 100 - 100;
|
||||
|
||||
$('.box__ghost-eyes').css({ 'transform': 'translate('+ xAxis +'%,-'+ yAxis +'%)' });
|
||||
|
||||
//console.log('X: ' + xAxis);
|
||||
|
||||
});
|
||||
18
Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
|
||||
|
||||
RUN apk add curl
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt /app
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
python3 -m pip install -r requirements.txt
|
||||
|
||||
COPY . /app
|
||||
|
||||
# Add mount point for data volume
|
||||
# VOLUME /data
|
||||
|
||||
ENTRYPOINT ["python3"]
|
||||
CMD ["main.py"]
|
||||
|
||||
FROM builder AS dev-envs
|
||||
@@ -1 +0,0 @@
|
||||
include: [".well-known"]
|
||||
60
about.html
@@ -1,60 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en-au" style="background: url("assets/img/intro-bg.webp") bottom / cover no-repeat, black;">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Nathan.Woodburn/</title>
|
||||
<meta name="theme-color" content="#97009a">
|
||||
<link rel="canonical" href="https://nathan.woodburn.au/about.html">
|
||||
<meta property="og:url" content="https://nathan.woodburn.au/about.html">
|
||||
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
|
||||
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
|
||||
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
|
||||
<meta property="og:title" content="Nathan.Woodburn/">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
|
||||
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Nathan.Woodburn/">
|
||||
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
|
||||
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/android-chrome-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/android-chrome-512x512.png">
|
||||
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
|
||||
<link rel="stylesheet" href="assets/fonts/fontawesome-all.min.css">
|
||||
<link rel="stylesheet" href="assets/fonts/ionicons.min.css">
|
||||
<link rel="stylesheet" href="assets/css/styles.min.css">
|
||||
<link rel="stylesheet" href="assets/css/fixes.min.css">
|
||||
<link rel="stylesheet" href="assets/css/profile.min.css">
|
||||
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
|
||||
</head>
|
||||
|
||||
<body class="about-body" style="text-align: center;color: rgb(255,255,255);background: transparent;"><script src="https://nathan.woodburn/handshake.js" domain="nathan.woodburn"></script>
|
||||
<script src="https://nathan.woodburn/https.js"></script>
|
||||
<div class="profile-container" style="margin-bottom: 2em;margin-top: 5em;"><img class="profile background" src="assets/img/profile.jpg" style="border-radius: 50%;"><img class="profile foreground" src="assets/img/pfront.webp"></div>
|
||||
<h1 class="nathanwoodburn" style="margin-bottom: 0.5em;">Nathan.Woodburn/</h1>
|
||||
<div class="social-icons" style="background: rgba(255,255,255,0);color: rgb(255,255,255);padding: 0px;"><a href="https://www.facebook.com/nathanjwoodburn" target="_blank"><i class="icon ion-social-facebook facebook social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a target="_blank" href="https://twitter.com/woodburn_nathan"><i class="icon ion-social-twitter twitter social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://www.linkedin.com/in/nathanwoodburn/" target="_blank"><i class="icon ion-social-linkedin linkedin social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://github.com/Nathanwoodburn" target="_blank"><i class="icon ion-social-github github social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="mailto:contact@nathan.woodburn.au" target="_blank"><i class="icon ion-email email social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://keybase.io/nathanwoodburn" target="_blank"><i class="fab fa-keybase keybase social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a></div>
|
||||
<p style="margin-top: 1em;">Hi, I am Nathan Woodburn and I live in Canberra<br>I am currently studying at the Australian National University<br>I enjoy 3D printing and CAD<br>I code stuff with C#, Linux Bash<br>I can code in a ton of other languages with Google's help<br>I'm a co-founder of <a href="https://hns.au" target="_blank">Handshake Australia</a><br>I currently work for <a href="https://learn.namebase.io" target="_blank">Namebase</a><br><br></p><i class="fas fa-arrow-down" style="font-size: 50px;" onclick="slideout()"></i>
|
||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/script.min.js"></script>
|
||||
<script src="assets/js/about.min.js"></script>
|
||||
<script src="assets/js/hacker.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
35
addCoin.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import os
|
||||
import json
|
||||
|
||||
if not os.path.exists('.well-known/wallets'):
|
||||
os.makedirs('.well-known/wallets')
|
||||
|
||||
def addCoin(token:str, name:str, address:str):
|
||||
with open('.well-known/wallets/'+token.upper(),'w') as f:
|
||||
f.write(address)
|
||||
|
||||
with open('.well-known/wallets/.coins','r') as f:
|
||||
coins = json.load(f)
|
||||
|
||||
coins[token.upper()] = f'{name} ({token.upper()})'
|
||||
with open('.well-known/wallets/.coins','w') as f:
|
||||
f.write(json.dumps(coins, indent=4))
|
||||
|
||||
def addDomain(token:str, domain:str):
|
||||
with open('.well-known/wallets/.domains','r') as f:
|
||||
domains = json.load(f)
|
||||
|
||||
domains[token.upper()] = domain
|
||||
with open('.well-known/wallets/.domains','w') as f:
|
||||
f.write(json.dumps(domains, indent=4))
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Ask user for token
|
||||
token = input('Enter token symbol: ')
|
||||
name = input('Enter token name: ')
|
||||
address = input('Enter wallet address: ')
|
||||
addCoin(token, name, address)
|
||||
|
||||
if input('Do you want to add a domain? (y/n): ').lower() == 'y':
|
||||
domain = input('Enter domain: ')
|
||||
addDomain(token, domain)
|
||||
55
ascii.html
BIN
assets/WDBRN.png
|
Before Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 300 KiB |
7
assets/bootstrap/css/bootstrap.min.css
vendored
6
assets/bootstrap/js/bootstrap.min.js
vendored
@@ -1,57 +0,0 @@
|
||||
.bs-icon {
|
||||
--bs-icon-size: .75rem;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: var(--bs-icon-size);
|
||||
width: calc(var(--bs-icon-size) * 2);
|
||||
height: calc(var(--bs-icon-size) * 2);
|
||||
color: var(--bs-primary);
|
||||
}
|
||||
|
||||
.bs-icon-xs {
|
||||
--bs-icon-size: 1rem;
|
||||
width: calc(var(--bs-icon-size) * 1.5);
|
||||
height: calc(var(--bs-icon-size) * 1.5);
|
||||
}
|
||||
|
||||
.bs-icon-sm {
|
||||
--bs-icon-size: 1rem;
|
||||
}
|
||||
|
||||
.bs-icon-md {
|
||||
--bs-icon-size: 1.5rem;
|
||||
}
|
||||
|
||||
.bs-icon-lg {
|
||||
--bs-icon-size: 2rem;
|
||||
}
|
||||
|
||||
.bs-icon-xl {
|
||||
--bs-icon-size: 2.5rem;
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-primary {
|
||||
color: var(--bs-white);
|
||||
background: var(--bs-primary);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-primary-light {
|
||||
color: var(--bs-primary);
|
||||
background: rgba(var(--bs-primary-rgb), .2);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-semi-white {
|
||||
color: var(--bs-primary);
|
||||
background: rgba(255, 255, 255, .5);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-rounded {
|
||||
border-radius: .5rem;
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-circle {
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
.text2-center {
|
||||
text-align: center;
|
||||
margin: 1.25rem 0;
|
||||
border-top: 1px solid #dadada;
|
||||
padding: 1.25rem 0;
|
||||
}
|
||||
|
||||
.text-center1 {
|
||||
text-align: center;
|
||||
margin: 1.25rem 0;
|
||||
border-bottom: 1px solid #dadada;
|
||||
padding: 1.25rem 0;
|
||||
}
|
||||
|
||||
.col-md-3 {
|
||||
margin: 1.25rem 0;
|
||||
}
|
||||
|
||||
.shadow {
|
||||
box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
|
||||
}
|
||||
|
||||
.rounded {
|
||||
border-radius: .25rem !important;
|
||||
}
|
||||
|
||||
.border {
|
||||
border: 0px !important;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #2c3134;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #2c3134;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
color: black !important;
|
||||
background-color: white !important;
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
.social-icons {
|
||||
color: #313437;
|
||||
background-color: #fff;
|
||||
padding: 70px 0;
|
||||
}
|
||||
|
||||
@media (max-width:767px) {
|
||||
.social-icons {
|
||||
padding: 50px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:500px) {
|
||||
img.profile {
|
||||
width: 200px;
|
||||
margin-left: -100px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:500px) {
|
||||
.profile-container {
|
||||
height: 200px;
|
||||
margin-top: 2em !important;
|
||||
}
|
||||
}
|
||||
|
||||
.social-icons i {
|
||||
color: #757980;
|
||||
margin: 0 10px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border: 1px solid #c8ced7;
|
||||
text-align: center;
|
||||
border-radius: 50%;
|
||||
line-height: 60px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
1742
assets/css/animate.min.css
vendored
@@ -1,11 +0,0 @@
|
||||
body.about-body {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transition: 2s;
|
||||
height: 101%;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
img.no-drag {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
img.fog {
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
1
assets/css/index.min.css
vendored
@@ -1 +0,0 @@
|
||||
img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}
|
||||
1
assets/css/parallax.min.css
vendored
@@ -1 +0,0 @@
|
||||
.main{position:relative;height:100vh;width:99vw;overflow:hidden}.parallax{pointer-events:none;transition:none}.bg-img{position:absolute;width:194.44%;top:1.86%;left:50.69%;z-index:1}.fog-7{position:absolute;z-index:2;top:37.7%;left:70.8%;width:132%}.mountain-10{position:absolute;z-index:3;top:63.58%;width:71.52%;left:67.84%}.fog-6{position:absolute;z-index:4;top:62.09%;left:50.4%;width:129.3%}.mountain-9{position:absolute;z-index:5;top:63.95%;width:32.63%;left:18.3%}.mountain-8{position:absolute;z-index:6;top:60.6%;width:56.25%;left:36%}.fog-5{position:absolute;z-index:7;top:69.7%;left:51.3%;width:31.25%}.mountain-7{position:absolute;z-index:8;width:37.36%;top:65.18%;left:71.18%}.text{position:absolute;z-index:9;top:34%;left:50%;text-align:center;text-transform:uppercase;color:#fff;pointer-events:auto}.text .para1{font-weight:100;line-height:.88}.text .para2{font-weight:800}.mountain-6{position:absolute;z-index:10;top:57.4%;width:28.33%;left:90.97%}.fog-4{position:absolute;z-index:11;top:77.7%;left:45.84%;width:40.27%}.mountain-5{position:absolute;z-index:12;top:80.86%;width:43.4%;left:59%}.fog-3{position:absolute;z-index:13;top:63.58%;left:48.27%;width:107.63%}.mountain-4{position:absolute;z-index:14;top:74.19%;width:54.16%;left:23.55%}.mountain-3{position:absolute;z-index:15;top:61.35%;left:101.11%;width:32.22%}.fog-2{position:absolute;z-index:16;top:68.14%;left:48%;width:108.33%}.mountain-2{position:absolute;z-index:17;top:69.01%;left:78.61%;width:47.91%}.mountain-1{position:absolute;z-index:18;top:52%;left:8.27%;width:37.15%}.sun-rays{position:absolute;z-index:19;top:0;right:0;width:41.31%;pointer-events:none}.black-shadow{position:absolute;z-index:20;bottom:0;right:0;pointer-events:none;width:100%}.fog-1{position:absolute;z-index:21;top:59.26%;left:50.69%;width:111.8%}.vignette{position:absolute;z-index:100;width:100%;height:100%;top:0;left:0;background:radial-gradient(ellipse at center,rgba(0,0,0,0) 65%,rgba(0,0,0,.7));pointer-events:none}@media (max-width:1100px){.text h1{font-size:5.8rem}.text h2{display:none}}@media (max-width:725px){.bg-img{width:initial;height:208.1%}.fog-7{width:initial;height:146.17%}.mountain-10{width:initial;height:77.59%}.fog-6{width:initial;height:73.11%}.mountain-9{height:87.64%;width:initial}.mountain-8{height:84.33%;width:initial}.fog-5{width:initial;height:54.16%}.mountain-7{width:initial;height:72.26%}.mountain-6{width:initial;height:56.78%}.fog-4{width:initial;height:104.5%}.mountain-5{width:initial;height:60.64%}.fog-3{width:initial;height:90.78%}.mountain-4{width:initial;height:71.42%}.mountain-3{width:initial;height:96.86%}.fog-2{width:initial;height:84.73%}.mountain-2{display:none}.mountain-1{width:initial;height:100.03%}.fog-1{width:initial;height:89.86%}}@media (max-width:520px){.text h1{font-size:3.3rem}.text h2{font-size:2.6rem}}
|
||||
@@ -1,28 +0,0 @@
|
||||
.hide_underline {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.invert {
|
||||
filter: invert(1);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
.masthead {
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* For screen under 450 px set the nav icon width 100% */
|
||||
|
||||
@media screen and (max-width: 450px) {
|
||||
img.navicon {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 450px) {
|
||||
#navbar {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
.profile-container {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
img.profile {
|
||||
width: 300px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -150px;
|
||||
aspect-ratio: 1;
|
||||
padding-top: calc(var(--s)/5);
|
||||
transform: scale(1);
|
||||
transition: .5s;
|
||||
}
|
||||
|
||||
img.foreground {
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
img.background:hover {
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
1
assets/css/profile.min.css
vendored
@@ -1 +0,0 @@
|
||||
.profile-container{height:300px}img.profile{width:300px;position:absolute;left:50%;margin-left:-150px;aspect-ratio:1;padding-top:calc(var(--s)/5);transform:scale(1);transition:.5s}img.foreground{border-radius:50%;pointer-events:none}img.background:hover{filter:blur(5px)}
|
||||
@@ -1,104 +0,0 @@
|
||||
.profile-container {
|
||||
/*margin-left: calc(10% - 10px);*/
|
||||
height: 170px;
|
||||
width: 170px;
|
||||
z-index: 2;
|
||||
left: 10%;
|
||||
}
|
||||
|
||||
.title {
|
||||
position: absolute;
|
||||
margin-left: calc(100px);
|
||||
width: calc(100% - 100px);
|
||||
padding: 1em;
|
||||
margin-top: -225px;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.title > * {
|
||||
width: 100%;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
img.profile {
|
||||
left: 10px;
|
||||
width: 150px;
|
||||
position: absolute;
|
||||
aspect-ratio: 1;
|
||||
transform: scale(1);
|
||||
transition: .5s;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
img.background2 {
|
||||
left: 0px;
|
||||
width: 170px !important;
|
||||
margin-top: -10px;
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
img.foreground {
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
img.background:hover {
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
.spacer {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
/* For small screens */
|
||||
|
||||
img.profilesml {
|
||||
width: 150px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -75px;
|
||||
aspect-ratio: 1;
|
||||
padding-top: calc(var(--s)/5);
|
||||
transform: scale(1);
|
||||
transition: .5s;
|
||||
}
|
||||
|
||||
img.foregroundsml {
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
img.backgroundsml:hover {
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
img.background2sml {
|
||||
width: 170px !important;
|
||||
left: calc(50% - 10px);
|
||||
margin-top: -10px;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
/* For printing set colour to black */
|
||||
|
||||
@media print {
|
||||
div {
|
||||
color: black !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.noprintbreak {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.edu-main {
|
||||
page-break-before: always;
|
||||
}
|
||||
}
|
||||
|
||||
1
assets/css/styles.min.css
vendored
@@ -1 +0,0 @@
|
||||
.social-icons{color:#313437;background-color:#fff;padding:70px 0}@media (max-width:767px){.social-icons{padding:50px 0}}@media (max-width:500px){img.profile{width:200px;margin-left:-100px}.profile-container{height:200px;margin-top:2em!important}}.social-icons i{color:#757980;margin:0 10px;width:60px;height:60px;border:1px solid #c8ced7;text-align:center;border-radius:50%;line-height:60px;display:inline-block}
|
||||
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 340 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 13 MiB |
|
Before Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 86 KiB |