The changelog here is too large to put in the commit message, check the updated readme for more information

This commit is contained in:
CaramelKat 2020-12-23 01:37:07 -06:00
parent e8cc92ff96
commit d11b04efad
43 changed files with 4367 additions and 258 deletions

View File

@ -1,2 +1,48 @@
# juxt-web
Juxtaposition applet UI for the Wii U and 3DS
# Juxt-Web
<p align="left">
<a href="https://discord.gg/rxekqVJ" target="_blank">
<img src="https://discordapp.com/api/guilds/408718485913468928/widget.png?style=banner3">
</a>
</p>
## Pretendo replacement for https://portal.olv.nintendo.net and https://ctr.olv.nintendo.net
# What is this?
This is the PN miiverse replacement web UI, which works with the 3DS and Wii U Miiverse Applets
# Install and usage
First install [NodeJS](https://nodejs.org) and [MongoDB](https://mongodb.com). Download/clone this repo and run `npm i` to install all dependencies. Edit `example.config.js` to your liking and rename it `config.js`. Run the server via `npm run start`.
Check out the [Wiki](https://github.com/PretendoNetwork/juxt-web/wiki) for information on how to set up your mongoDB to work with the application
## What works
- [x] View most types of Miiverse posts
* Text, Painting, Screenshot, Youtube, etc.
- [x] Yeah! Posts
- [x] View Communities
- [x] Follow Communities
- [x] Follow Users
- [x] View User Profiles
- [x] Guest browsing mode
- [x] Full Out-of-box experience
- [x] Authentication with an [account server](https://github.com/PretendoNetwork/account)
- [x] User Bio and privacy settings
## Currently implemented endpoints
* [GET] /titles/show
* [GET] /communities
* [GET] /communities/[title ID]/new
* [POST] /communities/follow
* [GET] /users/show?pid=[user ID]
* [GET] /users/me
* [POST] /users/follow
* [POST] /post/empathy
## Footnotes
* The rules still need to be rewritten, as of now they simply reflect what Nintendo came up with at the time
* This still isn't fully production ready, as it lacks proper error handling in 99% of the client side JS.
* Because of the above, as well as the sheer complexity of patching the applets themselves, I will not be offering support with setting this up for yourself for the time being. Once the documentation is complete in the wiki I'll be happy to help :)

621
package-lock.json generated
View File

@ -50,6 +50,18 @@
"negotiator": "0.6.2"
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@ -59,6 +71,12 @@
"color-convert": "^1.9.0"
}
},
"append-field": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
"integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=",
"dev": true
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@ -72,17 +90,49 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
"dev": true
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@ -97,6 +147,24 @@
"safe-buffer": "5.1.2"
}
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
@ -143,11 +211,59 @@
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
"integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
"busboy": {
"version": "0.2.14",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
"integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
"dev": true,
"requires": {
"dicer": "0.2.5",
"readable-stream": "1.1.x"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@ -179,12 +295,33 @@
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
@ -225,6 +362,15 @@
"integrity": "sha1-6Z5384LGjy5asrPzqCuAMZV1Kag=",
"dev": true
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -233,6 +379,12 @@
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"denque": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
@ -248,6 +400,52 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dicer": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
"integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
"dev": true,
"requires": {
"readable-stream": "1.1.x",
"streamsearch": "0.1.2"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
}
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -331,6 +529,36 @@
"integrity": "sha1-mQ75eUC39MKCPZWTZIt5voWKY4s=",
"dev": true
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true
},
"filelist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz",
@ -354,6 +582,23 @@
"unpipe": "~1.0.0"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@ -375,17 +620,48 @@
"universalify": "^1.0.0"
}
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"dev": true,
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"hoek": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
"dev": true
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@ -398,6 +674,17 @@
"toidentifier": "1.0.0"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -416,11 +703,32 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isemail": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
"integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
"dev": true,
"requires": {
"punycode": "2.x.x"
}
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"jake": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
@ -433,6 +741,25 @@
"minimatch": "^3.0.4"
}
},
"joi": {
"version": "13.7.0",
"resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
"integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
"dev": true,
"requires": {
"hoek": "5.x.x",
"isemail": "3.x.x",
"topo": "3.x.x"
},
"dependencies": {
"hoek": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
"integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==",
"dev": true
}
}
},
"js-yaml": {
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
@ -442,6 +769,30 @@
"esprima": "^4.0.0"
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@ -458,6 +809,18 @@
}
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"kareem": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
@ -516,6 +879,21 @@
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
@ -620,11 +998,68 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multer": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
"integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
"dev": true,
"requires": {
"append-field": "^1.0.0",
"busboy": "^0.2.11",
"concat-stream": "^1.5.2",
"mkdirp": "^0.5.1",
"object-assign": "^4.1.1",
"on-finished": "^2.3.0",
"type-is": "^1.6.4",
"xtend": "^4.0.0"
}
},
"nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"node-expat": {
"version": "2.3.18",
"resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz",
"integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==",
"dev": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.13.2"
}
},
"node-rsa": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz",
"integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
"requires": {
"asn1": "^0.2.4"
}
},
"node-snowflake": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/node-snowflake/-/node-snowflake-0.0.1.tgz",
"integrity": "sha1-C+XqvVsRMfY55j6JxfgtqoFLOrk="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
"object-to-xml": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/object-to-xml/-/object-to-xml-2.0.0.tgz",
@ -649,6 +1084,11 @@
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"pako": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/pako/-/pako-2.0.2.tgz",
"integrity": "sha512-9e8DRI3+dRLomCmMBAH30B2ejh+blwXr7VmMEx/pVFZlSDA7oyI8uKMhKXr8IrZpoxBF2YlxUvhqRXzTT1i0NA=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@ -659,6 +1099,17 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"pngjs": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",
"integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@ -673,6 +1124,18 @@
"ipaddr.js": "1.9.1"
}
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
"dev": true
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
@ -713,6 +1176,42 @@
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
}
}
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
@ -824,11 +1323,34 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"streamsearch": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
"dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@ -846,11 +1368,61 @@
"has-flag": "^3.0.0"
}
},
"tga": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tga/-/tga-1.0.4.tgz",
"integrity": "sha512-UdYjLm6XDhH0czfel87opaoynxIWI6AXMLkaUvZyl8AzJnAvOH1bHmHjdcolTzi4RjbBU8rgd7ys7sHxFAY1WA==",
"requires": {
"debug": "^2.6.1"
}
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"topo": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
"integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
"dev": true,
"requires": {
"hoek": "6.x.x"
},
"dependencies": {
"hoek": {
"version": "6.1.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz",
"integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==",
"dev": true
}
}
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@ -860,6 +1432,12 @@
"mime-types": "~2.1.24"
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
"universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
@ -870,6 +1448,15 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"uri-js": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
"integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -880,11 +1467,39 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"xml2json": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz",
"integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==",
"dev": true,
"requires": {
"hoek": "^4.2.1",
"joi": "^13.1.2",
"node-expat": "^2.3.18"
}
},
"xmlbuilder": {
"version": "15.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
@ -901,6 +1516,12 @@
"@types/node": "14.6.2",
"js-yaml": "3.14.0"
}
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
}
}
}

View File

@ -2,6 +2,7 @@
"name": "juxt-web",
"version": "1.0.0",
"dependencies": {
"body-parser": "^1.19.0",
"colors": "^1.4.0",
"express": "^4.17.1",
"fs-extra": "^9.0.1",
@ -9,12 +10,20 @@
"moment": "^2.29.1",
"mongoose": "^5.10.14",
"morgan": "^1.10.0",
"node-rsa": "^1.1.1",
"node-snowflake": "0.0.1",
"pako": "^2.0.2",
"pngjs": "^6.0.0",
"tga": "^1.0.4",
"xmlbuilder": "^15.1.1",
"xmlbuilder2": "^2.4.0"
},
"devDependencies": {
"ejs": "^3.1.5",
"express-subdomain": "^1.0.5",
"object-to-xml": "^2.0.0"
"multer": "^1.4.2",
"object-to-xml": "^2.0.0",
"request": "^2.88.2",
"xml2json": "^0.12.0"
}
}

204
src/authentication.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -2,10 +2,13 @@
"http": {
"port": 80
},
"secret": "[Database Secret Key]",
"account_server_domain": "",
"account_server_secret": "",
"X-Nintendo-Client-ID": "",
"X-Nintendo-Client-Secret": "",
"mongoose": {
"uri": "mongodb://localhost:27017",
"database": "[Database Name]",
"database": "Miiverse",
"options": {
"useNewUrlParser": true,
"useUnifiedTopology": true

View File

@ -75,7 +75,7 @@ async function getCommunityByID(community_id) {
});
}
async function getNumberPostsByCommunity(community) {
async function getTotalPostsByCommunity(community) {
verifyConnected();
return POST.find({
title_id: community.title_id
@ -92,13 +92,19 @@ async function getPostByID(postID) {
async function getPostsByUserID(userID) {
verifyConnected();
return POST.find({
pid: userID
});
}
async function getNumberPostsByUserID(userID) {
async function getNumberUserPostsByID(userID, number) {
verifyConnected();
return POST.find({
pid: userID
}).sort({ created_at: -1}).limit(number);
}
async function getTotalPostsByUserID(userID) {
verifyConnected();
return POST.find({
pid: userID
@ -133,6 +139,14 @@ async function getNewPostsByCommunity(community, numberOfPosts) {
}).sort({ created_at: -1 }).limit(numberOfPosts);
}
async function getUserPostsAfterTimestamp(post, numberOfPosts) {
verifyConnected();
return POST.find({
pid: post.pid,
created_at: { $lt: post.created_at }
}).limit(numberOfPosts);
}
async function getDiscoveryHosts() {
verifyConnected();
return ENDPOINT.findOne({
@ -162,14 +176,16 @@ module.exports = {
getNewCommunities,
getCommunityByTitleID,
getCommunityByID,
getNumberPostsByCommunity,
getTotalPostsByCommunity,
getDiscoveryHosts,
getPostsByCommunity,
getHotPostsByCommunity,
getNewPostsByCommunity,
getPostsByCommunityKey,
getPostsByUserID,
getNumberPostsByUserID,
getNumberUserPostsByID,
getTotalPostsByUserID,
getPostByID,
getUserByPID,
getUserPostsAfterTimestamp,
};

View File

@ -56,6 +56,20 @@ CommunitySchema.methods.downEmpathy = async function() {
await this.save();
};
CommunitySchema.methods.upFollower = async function() {
const followers = this.get('followers');
this.set('followers', followers + 1);
await this.save();
};
CommunitySchema.methods.downFollower = async function() {
const followers = this.get('followers');
this.set('followers', followers - 1);
await this.save();
};
const COMMUNITY = model('COMMUNITY', CommunitySchema);
module.exports = {

View File

@ -19,7 +19,7 @@ const PostSchema = new Schema({
},
community_id: String,
country_id: Number,
created_at: String,
created_at: Date,
feeling_id: Number,
id: Number,
is_autopost: {

View File

@ -8,6 +8,7 @@ const UserSchema = new Schema({
country: String,
pfp_uri: String,
mii: String,
mii_face_url: String,
/**
* Account Status
* 0 - Fine
@ -24,49 +25,65 @@ const UserSchema = new Schema({
type: Boolean,
default: false
},
favorite_communities: {
type: [String],
default: undefined
},
profile_comment: {
type: String,
default: undefined
},
/**
* Game Skill Level
* 1 - Beginner
* 2 - Intermediate
* 3 - Expert
*/
game_skill: {
type: Number,
default: 0
},
/**
* Profile Visibility settings
* 1 - Everyone
* 2 - Friends Only
* 3 - Private
*/
game_skill_visibility: {
type: Number,
default: 1
type: Boolean,
default: true
},
profile_comment_visibility: {
type: Number,
default: 1
type: Boolean,
default: true
},
birthday_visibility: {
type: Number,
default: 3
type: Boolean,
default: false
},
relationship_visibility: {
type: Number,
default: 2
type: Boolean,
default: false
},
country_visibility: {
type: Boolean,
default: false
},
profile_favorite_community_visibility: {
type: Boolean,
default: true
},
notifications: {
type: Boolean,
default: false
},
likes: {
type: [Number],
default: [0]
},
followed_communities: {
type: [Number],
default: [0]
},
followed_users: {
type: [Number],
default: [0]
},
following_users: {
type: [Number],
default: [0]
},
followers: {
type: Number,
default: 1
default: 0
},
following: {
type: Number,
default: 0
}
});
@ -144,6 +161,97 @@ UserSchema.methods.setFavoriteCommunityVisibility = async function(favoriteCommu
await this.save();
};
UserSchema.methods.getCountryVisibility = async function() {
return this.get('country_visibility');
};
UserSchema.methods.setCountryVisibility = async function(countryVisibility) {
this.set('country_visibility', countryVisibility);
await this.save();
};
UserSchema.methods.addToLikes = async function(postID) {
const likes = this.get('likes');
likes.addToSet(postID);
await this.save();
}
UserSchema.methods.removeFromLike = async function(postID) {
const likes = this.get('likes');
likes.pull(postID);
await this.save();
}
UserSchema.methods.addToCommunities = async function(postID) {
const communities = this.get('followed_communities');
communities.addToSet(postID);
await this.upFollowing();
await this.save();
}
UserSchema.methods.removeFromCommunities = async function(postID) {
const communities = this.get('followed_communities');
communities.pull(postID);
await this.downFollowing();
await this.save();
}
UserSchema.methods.addToUsers = async function(postID) {
const users = this.get('followed_users');
users.addToSet(postID);
await this.upFollowing();
await this.save();
}
UserSchema.methods.removeFromUsers = async function(postID) {
const users = this.get('followed_users');
users.pull(postID);
await this.downFollowing();
await this.save();
}
UserSchema.methods.addToFollowers = async function(postID) {
const users = this.get('following_users');
users.addToSet(postID);
await this.upFollower();
await this.save();
}
UserSchema.methods.removeFromFollowers = async function(postID) {
const users = this.get('following_users');
users.pull(postID);
await this.downFollower();
await this.save();
}
UserSchema.methods.upFollower = async function() {
const followers = this.get('followers');
this.set('followers', followers + 1);
await this.save();
};
UserSchema.methods.downFollower = async function() {
const followers = this.get('followers');
this.set('followers', followers - 1);
await this.save();
};
UserSchema.methods.upFollowing = async function() {
const following = this.get('following');
this.set('following', following + 1);
await this.save();
};
UserSchema.methods.downFollowing = async function() {
const following = this.get('following');
this.set('following', following - 1);
await this.save();
};
const USER = model('USER', UserSchema);
module.exports = {

View File

@ -29,6 +29,7 @@ app.use(express.urlencoded({
}));
app.use(xmlparser);
// import the servers into one
app.use(juxt_web);

View File

@ -18,10 +18,13 @@ router.use(subdomain('ctr.olv', ctr));
// Setup routes
portal.use('/titles/show', routes.PORTAL_SHOW);
portal.use('/communities', routes.PORTAL_COMMUNITIES);
portal.use('/users', routes.PORTAL_USER);
portal.use('/post', routes.PORTAL_POST);
portal.use('/', routes.PORTAL_WEB);
ctr.use('/titles/show', routes.CTR_SHOW);
ctr.use('/communities', routes.CTR_COMMUNITIES);
ctr.use('/users', routes.CTR_USER);
ctr.use('/', routes.CTR_WEB);
module.exports = router;

View File

@ -8,14 +8,25 @@ var router = express.Router();
/* GET discovery server. */
router.get('/', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
database.connect().then(async e => {
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('ctr_communities.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
let popularCommunities = await database.getMostPopularCommunities(6);
let newCommunities = await database.getNewCommunities(3);
if(isAJAX) {
res.render('ctr_communities_ajax.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
}
else {
res.render('ctr_communities.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
}
}).catch(error => {
res.set("Content-Type", "application/xml");
res.statusCode = 400;
@ -35,15 +46,31 @@ router.get('/', function (req, res) {
router.get('/*/new', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
let community_id = req.originalUrl.replace('/communities/', '').replace('/new','').trim();
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
if(isAJAX)
community_id = community_id.substring(0, community_id.indexOf('?'));
database.connect().then(async e => {
let community = await database.getCommunityByID(community_id);
let newPosts = await database.getPostsByCommunity(community, 25);
res.render('ctr_community.ejs', {
// EJS variable and server-side variable
community: community,
newPosts: newPosts
});
let community = await database.getCommunityByID(community_id.substring(0, community_id));
let newPosts = await database.getNewPostsByCommunity(community, 100);
let totalNumPosts = await database.getNumberPostsByCommunity(community);
if(isAJAX) {
res.render('ctr_community_ajax.ejs', {
// EJS variable and server-side variable
community: community,
newPosts: newPosts,
totalNumPosts: totalNumPosts
});
}
else {
res.render('ctr_community.ejs', {
// EJS variable and server-side variable
community: community,
newPosts: newPosts,
totalNumPosts: totalNumPosts
});
}
}).catch(error => {
console.error(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {

View File

@ -1,7 +1,7 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
//const util = require('../../../../util/authentication');
const util = require('../../../../authentication');
const ejs = require('ejs');
var router = express.Router();
@ -9,14 +9,83 @@ var router = express.Router();
router.get('/', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
database.connect().then(async e => {
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('ctr_show.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let user = null;
if(pid === null)
{
pid = 1000000000;
user = await database.getUserByPID(pid);
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('ctr_guest_notice.ejs', {});
}
else
{
user = await database.getUserByPID(pid);
if(user === null)
{
res.render('ctr_first_run.ejs', {});
}
else
{
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('ctr_show.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
}
}
}).catch(error => {
console.log(error)
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.get('/first', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
res.render('ctr_first_run.ejs', {});
});
router.post('/newUser', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let user = null;
if(pid === null)
{
res.sendStatus(501);
}
else
{
user = await database.getUserByPID(pid);
if(user === null)
{
await util.data.create_user(pid, req.body.experience, req.body.notifications);
if(await database.getUserByPID(pid) !== null)
res.sendStatus(200);
else
res.sendStatus(504);
}
else
{
res.sendStatus(504);
}
}
}).catch(error => {
console.log(error)
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {

View File

@ -0,0 +1,97 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
const util = require('../../../../authentication');
const ejs = require('ejs');
var router = express.Router();
/* GET discovery server. */
router.get('/me', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
database.connect().then(async e => {
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
//console.log(req.headers["x-nintendo-servicetoken"]);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
let newPosts = await database.getPostsByUserID(pid);
let numPosts = await database.getNumberPostsByUserID(pid);
if(isAJAX) {
res.render('ctr_user_page_ajax.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
else {
res.render('portal_user_page.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.get('/show', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
var userID = req.query.pid;
database.connect().then(async e => {
let user = await database.getUserByPID(userID);
let newPosts = await database.getPostsByUserID(user.pid);
let numPosts = await database.getNumberPostsByUserID(user.pid);
if(isAJAX) {
res.render('portal_user_page_ajax.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
else {
res.render('portal_user_page.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
}).catch(error => {
console.error(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
module.exports = router;

View File

@ -2,7 +2,10 @@ module.exports = {
PORTAL_SHOW: require('./portal/show'),
PORTAL_WEB: require('./portal/web'),
PORTAL_COMMUNITIES: require('./portal/communities'),
PORTAL_USER: require('./portal/userpage'),
PORTAL_POST: require('./portal/posts'),
CTR_SHOW: require('./ctr/show'),
CTR_WEB: require('./ctr/web'),
CTR_COMMUNITIES: require('./ctr/communities'),
CTR_USER: require('./ctr/userpage'),
};

View File

@ -1,13 +1,14 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
//const util = require('../../../../util/authentication');
const util = require('../../../../authentication');
const ejs = require('ejs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var router = express.Router();
/* GET discovery server. */
router.get('/', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
database.connect().then(async e => {
let popularCommunities = await database.getMostPopularCommunities(9);
@ -44,21 +45,26 @@ router.get('/', function (req, res) {
});
router.get('/*/new', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
let community_id = req.originalUrl.replace('/communities/', '').replace('/new','').trim();
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
if(isAJAX)
community_id = community_id.substring(0, community_id.indexOf('?'));
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
let community = await database.getCommunityByID(community_id.substring(0, community_id));
let newPosts = await database.getNewPostsByCommunity(community, 100);
let totalNumPosts = await database.getNumberPostsByCommunity(community);
let totalNumPosts = await database.getTotalPostsByCommunity(community);
if(isAJAX) {
res.render('portal_community_ajax.ejs', {
// EJS variable and server-side variable
community: community,
newPosts: newPosts,
totalNumPosts: totalNumPosts
totalNumPosts: totalNumPosts,
user: user
});
}
else {
@ -66,7 +72,8 @@ router.get('/*/new', function (req, res) {
// EJS variable and server-side variable
community: community,
newPosts: newPosts,
totalNumPosts: totalNumPosts
totalNumPosts: totalNumPosts,
user: user
});
}
}).catch(error => {
@ -86,4 +93,43 @@ router.get('/*/new', function (req, res) {
});
});
router.post('/follow', upload.none(), function (req, res) {
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let community = await database.getCommunityByID(req.body.communityID);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.id) === -1)
{
community.upFollower();
user.addToCommunities(community.id);
res.sendStatus(200);
}
else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.id) !== -1)
{
community.downFollower();
user.removeFromCommunities(community.id);
res.sendStatus(200);
}
else
res.sendStatus(423);
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 423;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
module.exports = router;

View File

@ -0,0 +1,132 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
const util = require('../../../../authentication');
const { POST } = require('../../../../models/post');
const ejs = require('ejs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
const snowflake = require('node-snowflake').Snowflake;
const moment = require('moment');
var router = express.Router();
router.post('/empathy', function (req, res) {
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let post = await database.getPostByID(req.body.postID);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
if(req.body.type === 'up' && user !== null && user.likes.indexOf(post.id) === -1 && user.id !== post.pid)
{
post.upEmpathy();
user.addToLikes(post.id)
res.sendStatus(200);
}
else if(req.body.type === 'down' && user !== null && user.likes.indexOf(post.id) !== -1 && user.id !== post.pid)
{
post.downEmpathy();
user.removeFromLike(post.id);
res.sendStatus(200);
}
else
res.sendStatus(423);
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 423;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.post('/new', upload.none(), async function (req, res, next) {
try
{
let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
//console.log(pid);
if(pid === null)
{
throw new Error('The User token was not valid');
}
else
{
let usrObj = await database.getUserByPID(pid);
const creationDate = moment().format('YYYY-MM-DD HH:MM:SS');
let appData = "";
if (req.body.app_data) {
appData = req.body.app_data.replace(/\0/g, "").trim();
}
let painting = "";
if (req.body.painting) {
painting = req.body.painting.replace(/\0/g, "").trim();
}
let paintingURI = "";
if (req.body.painting) {
paintingURI = await util.data.processPainting(painting);
}
let screenshot = "";
if (req.body.screenshot) {
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
}
const document = {
title_id: paramPackData.title_id,
screen_name: usrObj.user_id,
body: req.body.body,
app_data: appData,
painting: painting,
painting_uri: paintingURI,
screenshot: screenshot,
url: req.body.url,
search_key: req.body.search_key,
topic_tag: req.body.topic_tag,
community_id: req.body.community_id,
country_id: paramPackData.country_id,
created_at: creationDate,
feeling_id: req.body.feeling_id,
id: snowflake.nextId(),
is_autopost: req.body.is_autopost,
is_spoiler: req.body.is_spoiler,
is_app_jumpable: req.body.is_app_jumpable,
language_id: req.body.language_id,
mii: usrObj.mii,
mii_face_url: usrObj.pfp_uri,
pid: pid,
platform_id: paramPackData.platform_id,
region_id: paramPackData.region_id,
};
const newPost = new POST(document);
newPost.save();
res.sendStatus(200);
}
}
catch (e)
{
console.error(e);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 7,
message: "POSTING_FROM_NNID"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
}
});
module.exports = router;

View File

@ -1,22 +1,90 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
//const util = require('../../../../util/authentication');
const util = require('../../../../authentication');
const ejs = require('ejs');
var router = express.Router();
/* GET discovery server. */
router.get('/', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
database.connect().then(async e => {
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('portal_show.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let user = null;
if(pid === null)
{
pid = 1000000000;
user = await database.getUserByPID(pid);
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('portal_guest_notice.ejs', {});
}
else
{
user = await database.getUserByPID(pid);
if(user === null)
{
res.render('portal_first_run.ejs', {});
}
else
{
let popularCommunities = await database.getMostPopularCommunities(9);
let newCommunities = await database.getNewCommunities(6);
res.render('portal_show.ejs', {
// EJS variable and server-side variable
popularCommunities: popularCommunities,
newCommunities: newCommunities
});
}
}
}).catch(error => {
console.log(error)
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.get('/first', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
res.render('portal_first_run.ejs', {});
});
router.post('/newUser', function (req, res) {
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let user = null;
if(pid === null)
{
res.sendStatus(501);
}
else
{
user = await database.getUserByPID(pid);
if(user === null)
{
await util.data.create_user(pid, req.body.experience, req.body.notifications);
if(await database.getUserByPID(pid) !== null)
res.sendStatus(200);
else
res.sendStatus(504);
}
else
{
res.sendStatus(504);
}
}
}).catch(error => {
console.log(error)
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {

View File

@ -0,0 +1,224 @@
var express = require('express');
var xml = require('object-to-xml');
const database = require('../../../../database');
const util = require('../../../../authentication');
const ejs = require('ejs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var router = express.Router();
router.get('/me', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
database.connect().then(async e => {
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
let newPosts = await database.getNumberUserPostsByID(pid, 1);
let numPosts = await database.getTotalPostsByUserID(pid);
if(isAJAX) {
res.render('portal_me_page_ajax.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
else {
res.render('portal_me_page.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.post('/me', upload.none(), function (req, res) {
console.log('yeet im running look at me you dumb bitch');
database.connect().then(async e => {
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
if (pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
user.country_visibility = !!req.body.country;
user.birthday_visibility = !!req.body.birthday;
user.game_skill_visibility = !!req.body.experience;
user.profile_comment_visibility = !!req.body.commentShow;
if (req.body.comment)
user.setProfileComment(req.body.comment);
res.redirect('/users/me');
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
})
});
router.get('/show', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
var userID = req.query.pid;
if(userID === 'me') {
res.sendStatus(504);
return;
}
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
if(pid === null)
pid = 1000000000;
let parentUser = await database.getUserByPID(pid);
let user = await database.getUserByPID(userID);
let newPosts = await database.getNumberUserPostsByID(user.pid, 1);
let numPosts = await database.getTotalPostsByUserID(user.pid);
if(isAJAX) {
res.render('portal_user_page_ajax.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts,
parentUser: parentUser
});
}
else {
res.render('portal_user_page.ejs', {
// EJS variable and server-side variable
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
}).catch(error => {
console.error(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.get('/loadPosts', function (req, res) {
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let post = await database.getPostByID(req.query.postID);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
let newPosts = await database.getUserPostsAfterTimestamp(post, 1);
let numPosts = await database.getNumberUserPostsByID(pid);
if(newPosts.length > 0)
{
res.render('portal_user_page_posts_ajax.ejs', {
user: user,
newPosts: newPosts,
numPosts: numPosts
});
}
else
{
res.sendStatus(204);
}
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 400;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
router.post('/follow', upload.none(), function (req, res) {
database.connect().then(async e => {
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
let userToFollow = await database.getUserByPID(req.body.userID);
if(pid === null)
pid = 1000000000;
let user = await database.getUserByPID(pid);
if(req.body.type === 'true' && user !== null && user.followed_users.indexOf(userToFollow.pid) === -1)
{
userToFollow.addToFollowers(user.pid);
user.addToUsers(userToFollow.pid);
res.sendStatus(200);
}
else if(req.body.type === 'false' && user !== null && user.followed_users.indexOf(userToFollow.pid) !== -1)
{
userToFollow.removeFromFollowers(user.pid);
user.removeFromUsers(userToFollow.pid);
res.sendStatus(200);
}
else
res.sendStatus(423);
}).catch(error => {
console.log(error);
res.set("Content-Type", "application/xml");
res.statusCode = 423;
response = {
result: {
has_error: 1,
version: 1,
code: 400,
error_code: 15,
message: "SERVER_ERROR"
}
};
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
});
});
module.exports = router;

View File

@ -19,4 +19,12 @@ router.get('/icons/mario-kart.jpg', function (req, res) {
res.sendFile('icons/mario-kart.jpg', {root: path.join(__dirname, '../../../../webfiles/portal/')});
});
router.get('/fonts/Poppins-Light.woff', function (req, res) {
res.sendFile('fonts/Poppins-Light.woff', {root: path.join(__dirname, '../../../../webfiles/portal/')});
});
router.get('/fonts/Poppins-Light.ttf', function (req, res) {
res.sendFile('fonts/Poppins-Light.ttf', {root: path.join(__dirname, '../../../../webfiles/portal/')});
});
module.exports = router;

View File

@ -1,74 +1,89 @@
<div class="top-screen">
<div class="header-description">
<p>
Check out the communities for the games that you play or games that you're curious about!
</p>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3DS Testing</title>
<script src="/js/juxt.js"></script>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<link href="https://fonts.googleapis.com/css2?family=Poppins&amp;display=swap" rel="stylesheet">
</head>
<body>
<div id="main">
<div class="top-screen">
<div class="header-description">
<p>
Check out the communities for the games that you play or games that you're curious about!
</p>
</div>
<div id="headers-communities-icon" class="header-icon"></div>
<h2 class="header-title">Communities</h2>
</div>
<div id="headers-communities-icon" class="header-icon"></div>
<h2 class="header-title">Communities</h2>
</div>
<div class="bottom-screen">
<div class="search-container">
<div id="search-icon"></div>
<input id="search-bar" type="text" placeholder="Search communities..." name="search" onclick="searchCommunities(this)" readonly>
</div>
<div class="communities-wrapper" id="popular-communities">
<h1 class="communities-header">Popular Places</h1>
<table>
<tbody>
<div class="bottom-screen">
<div class="search-container">
<div id="search-icon"></div>
<input id="search-bar" type="text" placeholder="Search communities..." name="search" onclick="searchCommunities(this)" readonly>
</div>
<div class="communities-wrapper" id="popular-communities">
<h1 class="communities-header">Popular Places</h1>
<table>
<tbody>
<% for(var i = 0; i < popularCommunities.length; i++) {%>
<% if(i === popularCommunities.length - 1) { %>
<tr>
<td>
<div class="community-wrapper bottom" id="<%= popularCommunities[i].id %>">
<img class="community-icon bottom" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-title"><%= popularCommunities[i].name %></h2>
<div class="community-list-wrapper bottom" id="<%= popularCommunities[i].id %>">
<img class="community-list-icon bottom" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-list-title"><%= popularCommunities[i].name %></h2>
<h4><%= popularCommunities[i].followers %> followers</h4>
</div>
</td>
</tr>
<% } else { %>
<tr>
<td>
<div class="community-wrapper" id="<%= popularCommunities[i].id %>">
<img class="community-icon" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-title"><%= popularCommunities[i].name %></h2>
<h4><%= popularCommunities[i].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
<tr>
<td>
<div class="community-list-wrapper" id="<%= popularCommunities[i].id %>">
<img class="community-list-icon" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-list-title"><%= popularCommunities[i].name %></h2>
<h4><%= popularCommunities[i].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
</div>
<div class="communities-wrapper" id="new-communities">
<h1 class="communities-header">New Communities</h1>
<table>
<tbody>
<% for(var j = 0; j < newCommunities.length; j++) {%>
<% if(j === newCommunities.length - 1) { %>
<tr>
<td>
<div class="community-list-wrapper bottom" id="<%= newCommunities[i] %>">
<img class="community-list-icon bottom" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-list-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% } else { %>
<tr>
<td>
<div class="community-list-wrapper" id="<%= newCommunities[i] %>">
<img class="community-list-icon" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-list-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
</div>
<div class="toolbar-padding"></div>
</div>
<div class="communities-wrapper" id="new-communities">
<h1 class="communities-header">New Communities</h1>
<table>
<tbody>
<% for(var j = 0; j < newCommunities.length; j++) {%>
<% if(j === newCommunities.length - 1) { %>
<tr>
<td>
<div class="community-wrapper bottom" id="<%= popularCommunities[i].id %>">
<img class="community-icon bottom" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% } else { %>
<tr>
<td>
<div class="community-wrapper" id="<%= popularCommunities[i].id %>">
<img class="community-icon" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
</div>
<div class="toolbar-padding"></div>
</div>
</div>
<body onload="onStart()"></body>
</body>
</html>

View File

@ -0,0 +1,74 @@
<div class="top-screen">
<div class="header-description">
<p>
Check out the communities for the games that you play or games that you're curious about!
</p>
</div>
<div id="headers-communities-icon" class="header-icon"></div>
<h2 class="header-title">Communities</h2>
</div>
<div class="bottom-screen">
<div class="search-container">
<div id="search-icon"></div>
<input id="search-bar" type="text" placeholder="Search communities..." name="search" onclick="searchCommunities(this)" readonly>
</div>
<div class="communities-wrapper" id="popular-communities">
<h1 class="communities-header">Popular Places</h1>
<table>
<tbody>
<% for(var i = 0; i < popularCommunities.length; i++) {%>
<% if(i === popularCommunities.length - 1) { %>
<tr>
<td>
<div class="community-list-wrapper bottom" id="<%= popularCommunities[i].id %>">
<img class="community-list-icon bottom" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-list-title"><%= popularCommunities[i].name %></h2>
<h4><%= popularCommunities[i].followers %> followers</h4>
</div>
</td>
</tr>
<% } else { %>
<tr>
<td>
<div class="community-list-wrapper" id="<%= popularCommunities[i].id %>">
<img class="community-list-icon" src="<%= popularCommunities[i].browser_icon %>">
<h2 class="community-list-title"><%= popularCommunities[i].name %></h2>
<h4><%= popularCommunities[i].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
</div>
<div class="communities-wrapper" id="new-communities">
<h1 class="communities-header">New Communities</h1>
<table>
<tbody>
<% for(var j = 0; j < newCommunities.length; j++) {%>
<% if(j === newCommunities.length - 1) { %>
<tr>
<td>
<div class="community-list-wrapper bottom" id="<%= newCommunities[i] %>">
<img class="community-list-icon bottom" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-list-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% } else { %>
<tr>
<td>
<div class="community-list-wrapper" id="<%= newCommunities[i] %>">
<img class="community-list-icon" src="<%= newCommunities[j].browser_icon %>">
<h2 class="community-list-title"><%= newCommunities[j].name %></h2>
<h4><%= newCommunities[j].followers %> followers</h4>
</div>
</td>
</tr>
<% }} %>
</tbody>
</table>
</div>
<div class="toolbar-padding"></div>
</div>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,59 @@
<div class="top-screen">
<div class="header-description">
<p>
</p>
</div>
<div id="" class="header-icon"><img class="community-page-info-icon" src="<%= user.mii_face_url %>"></div>
<h2 class="header-title"><%= user.user_id %></h2>
</div>
<div class="bottom-screen">
<table class="community-page-table-wrapper">
<tbody>
<tr>
</tr>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Country</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Birthday</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Game experience</h4>
<h4 class="community-page-table-text">
<%if(user.game_skill === 0) {%>
Beginner
<%} else if(user.game_skill === 1) {%>
Intermediate
<%} else if(user.game_skill === 2) {%>
Expert
<%} else {%>
N/A
<%}%>
</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Yeahs</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
</tr>
</tbody>
</table>
<div class="communities-wrapper" id="popular-communities">
<h1 class="communities-header">Popular Places</h1>
</div>
<div class="communities-wrapper" id="new-communities">
<h1 class="communities-header">New Communities</h1>
</div>
<div class="toolbar-padding"></div>
</div>

View File

@ -2,25 +2,41 @@
<head>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<script src="/js/juxt.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-279PNEDGEE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-279PNEDGEE');
<!-- 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-T9NZ7BK');</script>
<!-- End Google Tag Manager -->
</script>
</head>
<body>
<menu id="nav-bar" class="">
<li id="nav-bar-profile" class="" onclick="loadTab('nav-bar-profile')"><a>User Page</a></li>
<li id="nav-bar-activity-feed" class="" onclick="loadTab('nav-bar-activity-feed')"><a>Activity Feed</a></li>
<li id="nav-bar-communities" class="selected" onclick="loadTab('nav-bar-communities')"><a>Communities</a></li>
<li id="nav-bar-messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" class="" onclick="loadTab('nav-bar-news')"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-profile" data-url="users/me" class="" onclick="loadTab(this)"><a>User Page</a></li>
<li id="nav-bar-activity-feed" data-url="activity-feed" class="" onclick="loadTab(this)"><a>Activity Feed</a></li>
<li id="nav-bar-communities" data-url="communities" class="selected" onclick="loadTab(this)"><a>Communities</a></li>
<li id="nav-bar-messages" data-url="messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" data-url="news" class="" onclick="loadTab(this)"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-exit" class="" onclick="exit()"><a href="">Close</a></li>
<li id="nav-bar-back" class="none"><a href="">Back</a></li>
</menu>
<div id="main">
<h1 class="page-header">Communities</h1>
<div class="search-container">
<!--<div class="search-container">
<form action="/action_page.php">
<img id="search-icon" src="/icons/Icon-feather-search.svg"></img>
<input id="search-bar" type="text" placeholder="Search communities..." name="search">
</form>
</div>
</div>-->
<div id="popular" class="communities-wrapper">
<h1 class="communities-header">Popular Places</h1>
<table>

View File

@ -1,10 +1,10 @@
<h1 class="page-header">Communities</h1>
<div class="search-container">
<!--<div class="search-container">
<form action="/action_page.php">
<img id="search-icon" src="/icons/Icon-feather-search.svg"></img>
<input id="search-bar" type="text" placeholder="Search communities..." name="search">
</form>
</div>
</div>-->
<div id="popular" class="communities-wrapper">
<h1 class="communities-header">Popular Places</h1>
<table>

View File

@ -2,23 +2,116 @@
<head>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<script src="/js/juxt.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-279PNEDGEE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-279PNEDGEE');
<!-- 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-T9NZ7BK');</script>
<!-- End Google Tag Manager -->
</script>
</head>
<body>
<menu id="nav-bar" class="">
<li id="nav-bar-profile" class="" onclick="loadTab('nav-bar-profile')"><a>User Page</a></li>
<li id="nav-bar-activity-feed" class="" onclick="loadTab('nav-bar-activity-feed')"><a>Activity Feed</a></li>
<li id="nav-bar-communities" class="selected" onclick="loadTab('nav-bar-communities')"><a>Communities</a></li>
<li id="nav-bar-messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" class="" onclick="loadTab('nav-bar-news')"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-profile" data-url="users/me" class="" onclick="loadTab(this)"><a>User Page</a></li>
<li id="nav-bar-activity-feed" data-url="activity-feed" class="" onclick="loadTab(this)"><a>Activity Feed</a></li>
<li id="nav-bar-communities" data-url="communities" class="selected" onclick="loadTab(this)"><a>Communities</a></li>
<li id="nav-bar-messages" data-url="messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" data-url="news" class="" onclick="loadTab(this)"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-exit" class="" onclick="exit()"><a href="">Close</a></li>
<li id="nav-bar-back" class="none"><a href="">Back</a></li>
</menu>
<div id="main">
<div id="windowOverlay" class="overlay" style="margin-bottom: 0">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<!--Start of Main Post-->
<form action="/users/me" method="post" enctype="multipart/form-data">
<table>
<tr>
<td class="post-close-button-wrapper">
<div class="post-close-button" onclick="hideNewPostScreen()" ></div>
</td>
<td>
<input type="submit" value="Save" class="submit-button" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);wiiuSound.playSoundByName('BGM_OLV_MAIN_LOOP_NOWAIT', 3);">
</td>
</tr>
<tr>
<td>
<h1 class="communities-header" style="padding-left: 75px; padding-top: 10px">Profile Settings</h1>
</td>
</tr>
<tr></tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Country on Profile
<input type="checkbox" id="country" name="country" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.country_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Birthday on Profile
<input type="checkbox" id="birthday" name="birthday" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.birthday_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Game Experience on Profile
<input type="checkbox" id="experience" name="experience" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.game_skill_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Comment on Profile
<input type="checkbox" id="commentShow" name="commentShow" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.profile_comment_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label for="comment" style="font-size: xx-large">Profile Comment</label>
<textarea id="comment" name="comment" maxlength="150" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('Profile comment cannot contain explicit language');}"><%= user.profile_comment %></textarea>
</td>
<br>
</tr>
</table>
</form>
</div>
</div>
</div>
<div class="community-page-header" style="background-image: <%= community.WiiU_browser_header %>"></div>
<div class="community-page-header-overlay"></div>
<div class="community-page-back-button" onclick="loadTab('nav-bar-communities')"></div>
<div class="community-page-back-button" onclick="window.history.back()"></div>
<div id="community-new-post-wrapper">
<div class="new-post-button-text" onclick="showNewPostScreen()">
+ New Post
</div>
</div>
<div class="community-page-info-container">
<div class="community-page-follow-button-wrapper" onclick="window.location.reload(false)"></div>
<%if(user.followed_communities.indexOf(community.id) !== -1){ %>
<div class="community-page-follow-button-wrapper selected">
<p class="community-page-follow-button-text" id="<%= community.id %>" onclick="followCommunity(this)" style="color: #FFFFFF">Following</p>
</div>
<%} else {%>
<div class="community-page-follow-button-wrapper">
<p class="community-page-follow-button-text" id="<%= community.id %>" onclick="followCommunity(this)">Follow Community</p>
</div>
<%}%>
<img class="community-page-info-icon" src="<%= community.browser_icon %>">
<h2 class="community-page-title"><%= community.name %></h2>
<h4 class="community-page-description"><%= community.description %></h4>
@ -67,16 +160,16 @@
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>" onclick="loadUserProfile(<%=post.pid%>)">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>" onclick="loadUserProfile(<%=post.pid%>)">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h2 class="community-page-post-username" onclick="loadUserProfile(<%=post.pid%>)"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper">
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>

View File

@ -1,8 +1,59 @@
<div id="windowOverlay" class="overlay" style="margin-bottom: 0">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<!--Start of Main Post-->
<form action="/users/me" method="post" enctype="multipart/form-data">
<table>
<tr>
<td colspan="2">
<h1 class="communities-header" style="padding-left: 75px; padding-top: 10px">Post to <%= community.name %></h1>
</td>
</tr>
<tr>
<td>
<div class="post-type-button-text">T</div>
</td>
<td style="padding-left: 75px;" rowspan="2">
<textarea id="comment" name="comment" placeholder="Tap here to make a post." style="margin-bottom: 0; height: 200px" maxlength="300" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('Prost cannot contain explicit language');}"></textarea>
</td>
<br>
</tr>
<tr>
<td>
<div class="post-type-button-painting">P</div>
</td>
</tr>
<tr>
<td class="post-close-button-wrapper" colspan="2">
<div class="post-close-button" onclick="hideNewPostScreen()" ></div>
</td>
<td>
<input type="submit" value="Submit" class="submit-button" style="margin-left: -124px;" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);wiiuSound.playSoundByName('BGM_OLV_MAIN_LOOP_NOWAIT', 3);">
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
<div class="community-page-header" style="background-image: url('<%= community.WiiU_browser_header %>')"></div>
<div class="community-page-header-overlay"></div>
<div class="community-page-back-button" onclick="loadTab('nav-bar-communities')"></div>
<div class="community-page-back-button" onclick="window.history.back()"></div>
<div id="community-new-post-wrapper">
<div class="new-post-button-text" onclick="showNewPostScreen()">
+ New Post
</div>
</div>
<div class="community-page-info-container">
<div class="community-page-follow-button-wrapper"></div>
<%if(user.followed_communities.indexOf(community.id) !== -1){ %>
<div class="community-page-follow-button-wrapper selected">
<p class="community-page-follow-button-text" id="<%= community.id %>" onclick="followCommunity(this)" style="color: #FFFFFF">Following</p>
</div>
<%} else {%>
<div class="community-page-follow-button-wrapper">
<p class="community-page-follow-button-text" id="<%= community.id %>" onclick="followCommunity(this)">Follow Community</p>
</div>
<%}%>
<img class="community-page-info-icon" src="<%= community.browser_icon %>">
<h2 class="community-page-title"><%= community.name %></h2>
<h4 class="community-page-description"><%= community.description %></h4>
@ -51,16 +102,16 @@
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>" onclick="loadUserProfile(<%=post.pid%>)">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>" onclick="loadUserProfile(<%=post.pid%>)">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h2 class="community-page-post-username" onclick="loadUserProfile(<%=post.pid%>)"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper">
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>

View File

@ -25,7 +25,7 @@
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper">
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,258 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<script src="/js/juxt.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-279PNEDGEE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-279PNEDGEE');
<!-- 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-T9NZ7BK');</script>
<!-- End Google Tag Manager -->
</script>
</head>
<body>
<menu id="nav-bar" class="">
<li id="nav-bar-profile" data-url="users/me" class="selected" onclick="loadTab(this)"><a>User Page</a></li>
<li id="nav-bar-activity-feed" data-url="activity-feed" class="" onclick="loadTab(this)"><a>Activity Feed</a></li>
<li id="nav-bar-communities" data-url="communities" class="" onclick="loadTab(this)"><a>Communities</a></li>
<li id="nav-bar-messages" data-url="messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" data-url="news" class="" onclick="loadTab(this)"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-exit" class="" onclick="exit()"><a href="">Close</a></li>
</menu>
<div id="main">
<div id="windowOverlay" class="overlay" style="margin-bottom: 0">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<!--Start of Main Post-->
<form action="/users/me" method="post" enctype="multipart/form-data">
<table>
<tr>
<td class="post-close-button-wrapper">
<div class="post-close-button" onclick="hideOverlay()" ></div>
</td>
<td>
<input type="submit" value="Save" class="submit-button" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);wiiuSound.playSoundByName('BGM_OLV_MAIN_LOOP_NOWAIT', 3);">
</td>
</tr>
<tr>
<td>
<h1 class="communities-header" style="padding-left: 75px; padding-top: 10px">Profile Settings</h1>
</td>
</tr>
<tr></tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Country on Profile
<input type="checkbox" id="country" name="country" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.country_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Birthday on Profile
<input type="checkbox" id="birthday" name="birthday" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.birthday_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Game Experience on Profile
<input type="checkbox" id="experience" name="experience" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.game_skill_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Comment on Profile
<input type="checkbox" id="commentShow" name="commentShow" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.profile_comment_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label for="comment" style="font-size: xx-large">Profile Comment</label>
<textarea id="comment" name="comment" maxlength="150" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('Profile comment cannot contain explicit language');}"><%= user.profile_comment %></textarea>
</td>
<br>
</tr>
</table>
</form>
</div>
</div>
</div>
<div class="community-page-header" style="background: #673DB6"></div>
<div class="user-page-back-button" onclick="window.history.back()">
<p class="user-page-back-button-text">Go back</p>
</div>
<div class="community-page-info-container">
<div class="user-page-follow-button-wrapper">
<p class="user-page-follow-button-text" onclick="showOverlay()">User Settings</p>
</div>
<img class="community-page-info-icon" src="<%= user.pfp_uri %>">
<h2 class="community-page-title"><%= user.user_id %></h2>
<h4 class="community-page-description"><%if(user.profile_comment_visibility){%> <%= user.profile_comment %> <%}else {%>Private<%}%></h4>
<div class="community-page-margin-line"></div>
<table class="community-page-table-wrapper">
<tbody>
<tr>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Country</h4>
<h4 class="community-page-table-text"><%if(user.country_visibility){%>N/A<%}else {%>Private<%}%></h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Birthday</h4>
<h4 class="community-page-table-text"><%if(user.birthday_visibility){%>N/A<%}else {%>Private<%}%></h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Game experience</h4>
<h4 class="community-page-table-text">
<%if(user.game_skill_visibility){%>
<%if(user.game_skill === 0) {%>
Beginner
<%} else if(user.game_skill === 1) {%>
Intermediate
<%} else if(user.game_skill === 2) {%>
Expert
<%} else {%>
N/A
<%}%>
<%}else {%>
Private
<%}%>
</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Yeahs</h4>
<h4 class="community-page-table-text">0</h4>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="user-page-tab-table">
<tbody>
<tr>
<td onclick="switchUserPageTabs(0)">
<div class="user-page-tab left selected" id="user-page-posts-tab">
<%=numPosts%> Posts
</div>
<div class="user-page-tab-triangle selected" id="user-page-posts-triangle"></div>
</td>
<td onclick="switchUserPageTabs(1)">
<div class="user-page-tab" id="user-page-friends-tab">
0 Friends
</div>
<div class="user-page-tab-triangle" id="user-page-friends-triangle"></div>
</td>
<td onclick="switchUserPageTabs(2)">
<div class="user-page-tab" id="user-page-following-tab">
<%= user.following %> Following
</div>
<div class="user-page-tab-triangle" id="user-page-following-triangle"></div>
</td>
<td onclick="switchUserPageTabs(3)">
<div class="user-page-tab right" id="user-page-followers-tab">
<%= user.followers %> Followers
</div>
<div class="user-page-tab-triangle" id="user-page-followers-triangle"></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="community-page-posts-wrapper" <% if(numPosts === 0) {%>style="height: 110px"<%}%>>
<% if(numPosts === 0) {%>
<p style="font-size: xx-large; margin-left: 443px;">No Posts</p>
<%} else { %>
<button id="load-more-posts-button" onclick="loadUserPosts()">Load More Posts</button>
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper" id="<%= post.id %>">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
</div>
<%if(post.screenshot !== '' && post.painting === '' && post.url === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
</div>
<% } else if(post.painting !== '' && post.screenshot === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.screenshot === '' && post.painting === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<% } else if(post.body !== '' && post.screenshot === '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<h3><%= post.body %></h3>
</div>
<% } else if(post.screenshot !== '' && post.body !== '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.screenshot !== '' && post.painting !== '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.body !== '' && post.screenshot === '' && post.painting === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.url !== '' && post.painting !== '' && post.screenshot === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<%}%>
<% }); %>
<%}%>
</div>
<br>
<img src="" onerror="wiiuBrowser.showLoadingIcon(!1);window.scroll(0, 0);">
</div>
<br>
<body onload="stopLoading(); wiiuBrowser.showLoadingIcon(!1)">
</body>
</html>

View File

@ -0,0 +1,222 @@
<div id="windowOverlay" class="overlay" style="margin-bottom: 0">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<!--Start of Main Post-->
<form action="/users/me" method="post" enctype="multipart/form-data">
<table>
<tr>
<td class="post-close-button-wrapper">
<div class="post-close-button" onclick="hideOverlay()" ></div>
</td>
<td>
<input type="submit" value="Save" class="submit-button" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);wiiuSound.playSoundByName('BGM_OLV_MAIN_LOOP_NOWAIT', 3);">
</td>
</tr>
<tr>
<td>
<h1 class="communities-header" style="padding-left: 75px; padding-top: 10px">Profile Settings</h1>
</td>
</tr>
<tr></tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Country on Profile
<input type="checkbox" id="country" name="country" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.country_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Birthday on Profile
<input type="checkbox" id="birthday" name="birthday" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.birthday_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Game Experience on Profile
<input type="checkbox" id="experience" name="experience" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.game_skill_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label class="checkbox-container">Show Comment on Profile
<input type="checkbox" id="commentShow" name="commentShow" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);" <%if(user.profile_comment_visibility){%>checked="checked"<%}%>>
<span class="checkmark"></span>
</label>
</td>
</tr>
<tr>
<td style="padding-left: 75px;">
<label for="comment" style="font-size: xx-large">Profile Comment</label>
<textarea id="comment" name="comment" maxlength="150" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('Profile comment cannot contain explicit language');}"><%= user.profile_comment %></textarea>
</td>
<br>
</tr>
</table>
</form>
</div>
</div>
</div>
<div class="community-page-header" style="background: #673DB6"></div>
<div class="user-page-back-button" onclick="window.history.back()">
<p class="user-page-back-button-text">Go back</p>
</div>
<div class="community-page-info-container">
<div class="user-page-follow-button-wrapper">
<p class="user-page-follow-button-text" onclick="showOverlay()">User Settings</p>
</div>
<img class="community-page-info-icon" src="<%= user.pfp_uri %>">
<h2 class="community-page-title"><%= user.user_id %></h2>
<h4 class="community-page-description"><%if(user.profile_comment_visibility){%> <%= user.profile_comment %> <%}else {%>Private<%}%></h4>
<div class="community-page-margin-line"></div>
<table class="community-page-table-wrapper">
<tbody>
<tr>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Country</h4>
<h4 class="community-page-table-text"><%if(user.country_visibility){%>N/A<%}else {%>Private<%}%></h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Birthday</h4>
<h4 class="community-page-table-text"><%if(user.birthday_visibility){%>N/A<%}else {%>Private<%}%></h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Game experience</h4>
<h4 class="community-page-table-text">
<%if(user.game_skill_visibility){%>
<%if(user.game_skill === 0) {%>
Beginner
<%} else if(user.game_skill === 1) {%>
Intermediate
<%} else if(user.game_skill === 2) {%>
Expert
<%} else {%>
N/A
<%}%>
<%}else {%>
Private
<%}%>
</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Yeahs</h4>
<h4 class="community-page-table-text">0</h4>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="user-page-tab-table">
<tbody>
<tr>
<td onclick="switchUserPageTabs(0)">
<div class="user-page-tab left selected" id="user-page-posts-tab">
<%=numPosts%> Posts
</div>
<div class="user-page-tab-triangle selected" id="user-page-posts-triangle"></div>
</td>
<td onclick="switchUserPageTabs(1)">
<div class="user-page-tab" id="user-page-friends-tab">
0 Friends
</div>
<div class="user-page-tab-triangle" id="user-page-friends-triangle"></div>
</td>
<td onclick="switchUserPageTabs(2)">
<div class="user-page-tab" id="user-page-following-tab">
<%= user.following %> Following
</div>
<div class="user-page-tab-triangle" id="user-page-following-triangle"></div>
</td>
<td onclick="switchUserPageTabs(3)">
<div class="user-page-tab right" id="user-page-followers-tab">
<%= user.followers %> Followers
</div>
<div class="user-page-tab-triangle" id="user-page-followers-triangle"></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="community-page-posts-wrapper" <% if(numPosts === 0) {%>style="height: 110px"<%}%>>
<% if(numPosts === 0) {%>
<p style="font-size: xx-large; margin-left: 443px;">No Posts</p>
<%} else { %>
<button id="load-more-posts-button" onclick="loadUserPosts()">Load More Posts</button>
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper" id="<%= post.id %>">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
</div>
<%if(post.screenshot !== '' && post.painting === '' && post.url === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
</div>
<% } else if(post.painting !== '' && post.screenshot === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.screenshot === '' && post.painting === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<% } else if(post.body !== '' && post.screenshot === '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<h3><%= post.body %></h3>
</div>
<% } else if(post.screenshot !== '' && post.body !== '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.screenshot !== '' && post.painting !== '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.body !== '' && post.screenshot === '' && post.painting === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.url !== '' && post.painting !== '' && post.screenshot === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<%}%>
<% }); %>
<%}%>
</div>
<br>
<img src="" onerror="wiiuBrowser.showLoadingIcon(!1);window.scroll(0, 0);">

View File

@ -0,0 +1,20 @@
<div id="showPost" class="overlay">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<table>
<tbody>
<!--Start of Main Post-->
<tr>
<td class="post-close-button-wrapper">
<div class="post-close-button" onclick="hideOverlay()"></div>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</div>
</div>
</div>

View File

@ -0,0 +1,65 @@
<div id="showPost" class="overlay">
<div class="overlay-content">
<div id="post-window" class="post-wrapper">
<div id="reply-banner-wrapper">
<div id="reply-banner-upload-menu">
<table>
<tbody>
<tr>
<td></td>
<td>TV Screenshot</td>
</tr>
<tr>
<td></td>
<td>DRC Screenshot</td>
</tr>
<tr>
<td></td>
<td>Drawing</td>
</tr>
</tbody>
</table>
</div>
<div id="reply-banner-upload-button" onclick="wiiuSound.playSoundByName('SE_OLV_OK', 1);replyBannerMenu()"></div>
<div id="reply-banner-submit-button"></div>
</div>
<table>
<tbody>
<!--Start of Main Post-->
<tr>
<td class="post-close-button-wrapper">
<div class="post-close-button" onclick="hidePost()"></div>
</td>
<td>
</td>
<td class="post-reply-button-wrapper">
<div class="post-reply-button" onclick="replyBanner()"></div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="post-user-info-wrapper">
<img class="verified" id="post-user-icon" src="/icons/mario-kart.jpg">
<span class="verified-user-badge" style="/**display: none;**/"></span>
<h2 id="post-username">Jemma</h2>
<h4 id="post-time-stamp">Today at 14:23 - Mario Community</h4>
</div>
</td>
<td>
<div class="post-yeah-button-wrapper">
<div class="post-yeah-button" onclick="yeah(this.parentNode)"></div>
</div>
<div id="post-yeah-count">0 Yeahs</div>
</td>
</tr>
<tr>
<td colspan="3">
<img id="painting" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAB4CAYAAACDziveAAADIklEQVR4Ae3BgW4jVxIEwayG/v+XyyYO77A2bBwlDfc46oxI/4QkLTRI0lKDJC01SNJSgyQtNUjSUoMkLTVI0lKDJC01SNJSgyQtNUjSUoMkLTVI0lKDJC01SNJSgyQtNUjSUoMkLTVI0lKDJC01SNJSw8WSIEl3MFwoCQ9JkKR3N0jSUsMPkARJ+qzh5pLwkIQkSNKzhptry6+SIEnPGH6AtmyXhCRIet6g20vCkQRJzxl0e22R9HmDJC31gb4kCX/XFkn3MejTkvBPkiDpPgZ9ShL+TVsk3ccHP0ASjra8UluS0BZJ9zbo09oi6f4GSVpqkKSlBt1eEo62SHrOIElLDZK01KBbS8LRFknPG24uCUdbJOlZgyQtNei2knC0RdLnDJK01CBJSw26pSQcbZH0eYMkLTXcWBKOtkjSZwy6nSQcbZH0NYMkLfXBb5SEZ7Tlf0nC0RZJ+qwPXigJX5GEh7bor5JwtEXS1w0vkoTvSkISJOkVPviN2vKMJPwqCW3ZLglHWyR9zwcv1JavaMtDEh7a8qskHG2RpK/44CJJONpyhbboP5JwtEXS9w2StNRwM0k42vJKSXgHSTjaIukag/5REh6SIOlnGiRpqeFGknC05VWScLTl/ykJR1skXWeQpKUGva0kHG2RdK1Bf5GEoy2Sfq7hJpJwtGWDtjy0RdL1Br21tkh6jUGSlhr0X0k42iLpZxtuIAlHWyTpCsMFknC05Y6ScLRF0s83SNJSg0jC0RZJOwxvLglHWyTpKsNySTjaImmPQZKWGhZLwtEWSbsMkrTU8MaScLTlSkk42iJpn0GSlhqWastDWyTtNLyxtjy05RXaImmv4ZuScLTlam2RpFcYJGmpQW8tCZJeY9DbSsJDEiRdb5CkpQa9pSQcbZF0vUGSlhokaalBb6ktRxIkXW+QpKWGb2rLQ1t0rbY8tEXS9dI/IUkLDZK01CBJSw2StNQgSUsNkrTUIElLDZK01CBJSw2StNQgSUsNkrTUIElLDZK01CBJSw2StNQgSUsNkrTUIElLDZK01CBJSw2StNQgSUsNkrTUIElL/QEnbcj+L2WT+gAAAABJRU5ErkJggg==">
</td>
</tr>
<!--End of Main Post-->
</table>
</div>
</div>
</div>

View File

@ -2,25 +2,41 @@
<head>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<script src="/js/juxt.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-279PNEDGEE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-279PNEDGEE');
<!-- 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-T9NZ7BK');</script>
<!-- End Google Tag Manager -->
</script>
</head>
<body>
<menu id="nav-bar" class="">
<li id="nav-bar-profile" class="" onclick="loadTab('nav-bar-profile')"><a>User Page</a></li>
<li id="nav-bar-activity-feed" class="" onclick="loadTab('nav-bar-activity-feed')"><a>Activity Feed</a></li>
<li id="nav-bar-communities" class="selected" onclick="loadTab('nav-bar-communities')"><a>Communities</a></li>
<li id="nav-bar-messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" class="" onclick="loadTab('nav-bar-news')"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-profile" data-url="users/me" class="" onclick="loadTab(this)"><a>User Page</a></li>
<li id="nav-bar-activity-feed" data-url="activity-feed" class="" onclick="loadTab(this)"><a>Activity Feed</a></li>
<li id="nav-bar-communities" data-url="communities" class="selected" onclick="loadTab(this)"><a>Communities</a></li>
<li id="nav-bar-messages" data-url="messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" data-url="news" class="" onclick="loadTab(this)"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-exit" class="" onclick="exit()"><a href="">Close</a></li>
<li id="nav-bar-back" class="none"><a href="">Back</a></li>
</menu>
<div id="main">
<h1 class="page-header">Communities</h1>
<div class="search-container">
<form action="/action_page.php">
<!--<div class="search-container">
<form action="/">
<img id="search-icon" src="/icons/Icon-feather-search.svg"></img>
<input id="search-bar" type="text" placeholder="Search communities..." name="search">
</form>
</div>
</div>-->
<div id="popular" class="communities-wrapper">
<h1 class="communities-header">Popular Places</h1>
<table>
@ -67,6 +83,6 @@
</div>
</div>
<body onload="stopLoading()">
<body onload="stopLoading();wiiuSound.playSoundByName('BGM_OLV_MAIN', 3);">
</body>
</html>

View File

@ -0,0 +1,196 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
<script src="/js/juxt.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-279PNEDGEE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-279PNEDGEE');
<!-- 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-T9NZ7BK');</script>
<!-- End Google Tag Manager -->
</script>
</head>
<body>
<menu id="nav-bar" class="">
<li id="nav-bar-profile" data-url="users/me" class="selected" onclick="loadTab(this)"><a>User Page</a></li>
<li id="nav-bar-activity-feed" data-url="activity-feed" class="" onclick="loadTab(this)"><a>Activity Feed</a></li>
<li id="nav-bar-communities" data-url="communities" class="" onclick="loadTab(this)"><a>Communities</a></li>
<li id="nav-bar-messages" data-url="messages" class="" onclick="loadMessagesTab();"><a>Messages<span id="messages-badge" class="badge" style=""></span></a></li>
<li id="nav-bar-news" data-url="news" class="" onclick="loadTab(this)"><a>Notifications<span id="news-badge" class="badge" style=""></span></a></li >
<li id="nav-bar-exit" class="" onclick="exit()"><a href="">Close</a></li>
</menu>
<div id="main">
<div class="community-page-header" style="background: #673DB6"></div>
<div class="user-page-back-button" onclick="window.history.back()">
<p class="user-page-back-button-text">Go back</p>
</div>
<div class="community-page-info-container">
<%if(parentUser.followed_users.indexOf(user.pid) !== -1){ %>
<div class="user-page-follow-button-wrapper selected">
<p class="user-page-follow-button-text" id="<%= user.pid %>" onclick="followUser(this)" style="color: #FFFFFF">Following</p>
</div>
<%} else {%>
<div class="user-page-follow-button-wrapper">
<p class="user-page-follow-button-text" id="<%= user.pid %>" onclick="followUser(this)">Follow User</p>
</div>
<%}%>
<img class="community-page-info-icon" src="<%= user.pfp_uri %>">
<h2 class="community-page-title"><%= user.user_id %></h2>
<h4 class="community-page-description"><%= user.profile_comment %></h4>
<div class="community-page-margin-line"></div>
<table class="community-page-table-wrapper">
<tbody>
<tr>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Country</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Birthday</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Game experience</h4>
<h4 class="community-page-table-text">
<%if(user.game_skill === 0) {%>
Beginner
<%} else if(user.game_skill === 1) {%>
Intermediate
<%} else if(user.game_skill === 2) {%>
Expert
<%} else {%>
N/A
<%}%>
</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Yeahs</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="user-page-tab-table">
<tbody>
<tr>
<td onclick="switchUserPageTabs(0)">
<div class="user-page-tab left selected" id="user-page-posts-tab">
<%=numPosts%> Posts
</div>
<div class="user-page-tab-triangle selected" id="user-page-posts-triangle"></div>
</td>
<td onclick="switchUserPageTabs(1)">
<div class="user-page-tab" id="user-page-friends-tab">
0 Friends
</div>
<div class="user-page-tab-triangle" id="user-page-friends-triangle"></div>
</td>
<td onclick="switchUserPageTabs(2)">
<div class="user-page-tab" id="user-page-following-tab">
<%= user.following %> Following
</div>
<div class="user-page-tab-triangle" id="user-page-following-triangle"></div>
</td>
<td onclick="switchUserPageTabs(3)">
<div class="user-page-tab right" id="user-page-followers-tab">
<%= user.followers %> Followers
</div>
<div class="user-page-tab-triangle" id="user-page-followers-triangle"></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="community-page-posts-wrapper">
<% if(numPosts === 0) {%>
<p>No Posts</p>
<%} else { %>
<button id="load-more-posts-button" onclick="loadUserPosts()">Load More Posts</button>
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper" id="<%= post.id %>">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
</div>
<%if(post.screenshot !== '' && post.painting === '' && post.url === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
</div>
<% } else if(post.painting !== '' && post.screenshot === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.screenshot === '' && post.painting === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<% } else if(post.body !== '' && post.screenshot === '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<h3><%= post.body %></h3>
</div>
<% } else if(post.screenshot !== '' && post.body !== '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.screenshot !== '' && post.painting !== '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.body !== '' && post.screenshot === '' && post.painting === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.url !== '' && post.painting !== '' && post.screenshot === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<%}%>
<% }); %>
<%}%>
</div>
<br>
<img src="" onerror="wiiuBrowser.showLoadingIcon(!1);window.scroll(0, 0);">
</div>
<br>
<body onload="stopLoading(); wiiuBrowser.showLoadingIcon(!1)">
</body>
</html>

View File

@ -0,0 +1,160 @@
<div class="community-page-header" style="background: #673DB6"></div>
<div class="user-page-back-button" onclick="window.history.back()">
<p class="user-page-back-button-text">Go back</p>
</div>
<div class="community-page-info-container">
<%if(parentUser.followed_users.indexOf(user.pid) !== -1){ %>
<div class="user-page-follow-button-wrapper selected">
<p class="user-page-follow-button-text" id="<%= user.pid %>" onclick="followUser(this)" style="color: #FFFFFF">Following</p>
</div>
<%} else {%>
<div class="user-page-follow-button-wrapper">
<p class="user-page-follow-button-text" id="<%= user.pid %>" onclick="followUser(this)">Follow User</p>
</div>
<%}%>
<img class="community-page-info-icon" src="<%= user.pfp_uri %>">
<h2 class="community-page-title"><%= user.user_id %></h2>
<h4 class="community-page-description"><%= user.profile_comment %></h4>
<div class="community-page-margin-line"></div>
<table class="community-page-table-wrapper">
<tbody>
<tr>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Country</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Birthday</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Game experience</h4>
<h4 class="community-page-table-text">
<%if(user.game_skill === 0) {%>
Beginner
<%} else if(user.game_skill === 1) {%>
Intermediate
<%} else if(user.game_skill === 2) {%>
Expert
<%} else {%>
N/A
<%}%>
</h4>
</div>
</td>
<td>
<div class="community-page-shaded-info-container">
<h4 class="community-page-table-label">Yeahs</h4>
<h4 class="community-page-table-text">N/A</h4>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="user-page-tab-table">
<tbody>
<tr>
<td onclick="switchUserPageTabs(0)">
<div class="user-page-tab left selected" id="user-page-posts-tab">
<%=numPosts%> Posts
</div>
<div class="user-page-tab-triangle selected" id="user-page-posts-triangle"></div>
</td>
<td onclick="switchUserPageTabs(1)">
<div class="user-page-tab" id="user-page-friends-tab">
0 Friends
</div>
<div class="user-page-tab-triangle" id="user-page-friends-triangle"></div>
</td>
<td onclick="switchUserPageTabs(2)">
<div class="user-page-tab" id="user-page-following-tab">
<%= user.following %> Following
</div>
<div class="user-page-tab-triangle" id="user-page-following-triangle"></div>
</td>
<td onclick="switchUserPageTabs(3)">
<div class="user-page-tab right" id="user-page-followers-tab">
<%= user.followers %> Followers
</div>
<div class="user-page-tab-triangle" id="user-page-followers-triangle"></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="community-page-posts-wrapper">
<% if(numPosts === 0) {%>
<p>No Posts</p>
<%} else { %>
<button id="load-more-posts-button" onclick="loadUserPosts()">Load More Posts</button>
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper" id="<%= post.id %>">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
</div>
<%if(post.screenshot !== '' && post.painting === '' && post.url === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
</div>
<% } else if(post.painting !== '' && post.screenshot === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.screenshot === '' && post.painting === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<% } else if(post.body !== '' && post.screenshot === '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<h3><%= post.body %></h3>
</div>
<% } else if(post.screenshot !== '' && post.body !== '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.screenshot !== '' && post.painting !== '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.body !== '' && post.screenshot === '' && post.painting === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.url !== '' && post.painting !== '' && post.screenshot === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<%}%>
<% }); %>
<%}%>
</div>
<br>
<img src="" onerror="wiiuBrowser.showLoadingIcon(!1);window.scroll(0, 0);">

View File

@ -0,0 +1,59 @@
<% newPosts.forEach(function(post) { %>
<div class="post-user-info-wrapper" id="<%= post.id %>">
<%if(post.verified) {%>
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
<%} else {%>
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>">
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
<%}%>
<h2 class="community-page-post-username"><%= post.screen_name %></h2>
<h4 class="community-page-post-time-stamp"><%= post.created_at %></h4>
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, <%= post.id %>)"></div>
</div>
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
</div>
<%if(post.screenshot !== '' && post.painting === '' && post.url === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
</div>
<% } else if(post.painting !== '' && post.screenshot === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.screenshot === '' && post.painting === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<% } else if(post.body !== '' && post.screenshot === '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<h3><%= post.body %></h3>
</div>
<% } else if(post.screenshot !== '' && post.body !== '' && post.painting === '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.screenshot !== '' && post.painting !== '' && post.url === '') {%>
<div class="community-page-post-wrapper">
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<% } else if(post.url !== '' && post.body !== '' && post.screenshot === '' && post.painting === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="community-page-post-text-overlay">
<h3><%= post.body %></h3>
</div>
</div>
<% } else if(post.url !== '' && post.painting !== '' && post.screenshot === '' && post.body === '') {%>
<div class="community-page-post-wrapper">
<iframe width="760" height="427.5" src="<%= post.url %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
</div>
<%}%>
<% }); %>

View File

@ -164,6 +164,7 @@ h4 {
width: 50px;
height: 50px;
border-radius: 10px;
margin-top: 5px;
margin-right: 10px;
margin-left: 5px;
float: left;
@ -466,3 +467,125 @@ h4 {
width: 500px;
height: 65px;
}
/*First run page*/
.about-wrapper {
display: none;
text-align: center;
width: 350px;
height: 640px;
/*margin: 40px 190px;*/
/*background-color: rgba(255,255,255,1);
border: 1.5px solid #d6d2d2;
border-radius: 10px;*/
}
.about-header {
/*margin-top: -420px;
margin-left: 175px;*/
text-align: center;
font-size: 20px;
padding-top: 180px;
}
.about-body {
font-size: 15px;
position: absolute;
text-align: center;
margin-top: 15px;
margin-left: 50px;
margin-right: 50px;
max-width: 800px;
}
.about-button {
position: absolute;
height: 37px;
width: 100px;
margin-top: 175px;
background: #673DB6;
color: white;
font-size: large;
border-width: 0;
border-radius: 10px;
}
/*Community and User Page*/
.community-page-info-icon {
width: 40px;
height: 40px;
border-radius: 10px;
}
.user-page-tab-table {
position: relative;
margin-top: 35px;
margin-bottom: -10px;
margin-left: -15px;
background: white;
width: 1035px;
border: 1.5px solid #d6d2d2;
border-radius: 10px;
}
.user-page-tab {
width: 260px;
text-align: center;
color: black;
background-color: white;
cursor: pointer;
font-size: x-large;
padding-top: 30px;
padding-bottom: 30px;
margin: -3px;
}
.user-page-tab.selected {
color: white;
background-color: #673DB6;
}
.user-page-tab.left {
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
}
.user-page-tab.right {
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
.user-page-tab-triangle {
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-top: 35px solid #673DB6;
border-bottom: 20px solid transparent;
display: none;
position: absolute;
margin-top: -15px;
margin-left: 100px;
}
.user-page-tab-triangle.selected {
display: inline-block;
}
.community-page-table-wrapper {
border-top: #D6D2D2;
border-width: 5px;
position: absolute;
padding-top: 115px;
margin-left: 17px;
line-height: 20px;
}
.community-page-table-label {
color: #673DB6;
padding-left: 15px;
}
.community-page-table-text {
color: black;
padding-left: 15px;
margin-top: -15px
}

File diff suppressed because one or more lines are too long

View File

@ -812,6 +812,7 @@ td.messages-list-wrapper.end {
margin-bottom: 0;
position: absolute;
max-width: 150px;
line-height: 25px;
}
.community-list-wrapper {
cursor: pointer;
@ -869,7 +870,7 @@ h4 {
position: absolute;
z-index: 3;
width: 1035px;
min-height: 250px;
min-height: 255px;
background-color: rgba(255,255,255,1);
border: 1.5px solid #d6d2d2;
border-radius: 10px;
@ -884,17 +885,20 @@ h4 {
position: absolute;
padding-top: 115px;
margin-left: 17px;
line-height: 20px;
}
.community-page-table-label {
color: #673DB6;
padding-left: 15px;
font-size: larger;
}
.community-page-table-text {
color: black;
padding-left: 15px;
margin-top: -15px
margin-top: -15px;
font-size: large;
}
.community-page-margin-line {
@ -917,21 +921,31 @@ h4 {
}
.community-page-follow-button-wrapper {
width: 270px;
height: 60px;
margin-left: 760px;
margin-top: 20px;
width: 250px;
height: 61px;
margin-left: 772px;
margin-top: 15px;
position: absolute;
background-size: 95% !important;
background-size: 100% !important;
background-repeat: no-repeat !important;
background: url('data:image/png;base64,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');
cursor: pointer;
background: url('data:image/png;base64,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');
}
.community-page-follow-button-wrapper.selected {
background: url('data:image/png;base64,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');
background: url('data:image/png;base64,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');
background-repeat: no-repeat !important;
}
.community-page-follow-button-text {
padding-left: 60px;
margin-top: 10px;
color: #1F8A42;
font-size: 17px;
font-weight: bold;
-webkit-user-select: none;
}
.community-page-info-icon {
width: 100px;
border-radius: 10px;
@ -948,13 +962,13 @@ h4 {
position: absolute;
margin-left: 140px;
width: 550px;
line-height: 20px;
}
.community-page-posts-wrapper {
position: relative;
z-index: 3;
width: 1035px;
min-height: 250px;
background-color: rgba(255,255,255,1);
border: 1.5px solid #d6d2d2;
border-radius: 10px;
@ -981,6 +995,7 @@ h4 {
.community-page-post-wrapper {
padding-top: 25px;
margin-left: 137px;
margin-bottom: 90px;
width: 760px;
}
@ -1090,7 +1105,7 @@ h4 {
background-color: rgba(255,255,255,0.95);
border: 1.5px solid #d6d2d2;
border-radius: 10px;
margin-top: -75px;
margin-top: -80px;
margin-left: 13px;
}
@ -1102,4 +1117,292 @@ iframe {
border: 1.5px solid #d6d2d2;
border-radius: 10px;
background-color: black;
}
/*user page*/
.user-page-follow-button-wrapper {
width: 250px;
height: 61px;
margin-left: 772px;
margin-top: 15px;
position: absolute;
background-size: 100% !important;
background-repeat: no-repeat !important;
cursor: pointer;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVAAAAA8CAYAAAAwqeJMAAAABHNCSVQICAgIfAhkiAAABq9JREFUeF7t3UFsFFUcx/H/0wq0QoHWWIyQcGhJalQKHAjShRbDoQUTTaQePLBFU0oiYNCL1QOJUE4SRaOVqJSEi2CiCenWhGgLFJADsuiB0GJCpEQwdoGCLEh1zH/MYAPLdrszkDed75w27by3733e5JfZeW9mjAzbmhZ2rjTGiTvGqTJipgz/H58RQACBqAo44lwyjkk6jmnffqhup+dg9EO8pmvK+KH012KkJqpA9BsBBBDIScCR7hsFhS+0d9decgN0dXWiS8Nz0tRx6ZfffLJw1pxSKZpYkFNd7IQAAghEQaD3eEr2fHTy4tm+waniSPenPfW1pjnWEXfE7CguGXdj467F4wnOKBwK9BEBBPIVaH318OVfey9PNuI0mqbqRLcxsrh581ypipXlWyflEEAAgUgI6Jno1vVHxXFkv2mKdVzUCaOtiaX8bI/E8NNJBBDwI3Dt6pBsqN8n7sTS6ljC0craDtT5qZOyCCCAQGQEmhd1un0lQCMz5HQUAQSCEiBAg5KkHgQQiJwAARq5IafDCCAQlAABGpQk9SCAQOQECNDIDTkdRgCBoAQI0KAkqQcBBCInQIBGbsjpMAIIBCVAgAYlST0IIBA5AQI0ckNOhxFAICgBAjQoSepBAIHICRCgkRtyOowAAkEJEKBBSVIPAghEToAAjdyQ02EEEAhKIFQBeqSzX450npOzpwelaOJDUjqtUJasmMnzS4M6GqgHAQRGJRCKANXn7rW1HJPeZCpj52ZXl8nKlqd5jumohp6dEUDAr0AoAvSTlmNyoud3KSmbIA3rnhB9V1P6yk3pTQ7Il9tOyvU/h2TJizOlYV2lXw/KI4AAAjkLWB+gyYMXpO3tH2XCwwXSuqf2jrPMgd/S8u6qHjdE3/58ocyoKM658+yIAAII+BGwPkB3bzsp3391Rla8VinPNszM2Fdvn2XxcnluVYUfD8oigAACOQtYH6DvrT0qfSdSsuGD+TJrTknGjnlnqbOrH5U1rfNy7jw7IoAAAn4ErA9Q7/pntreFfrf7jL6nOet10LN9g+4b9PRaKWepfg4ZyiKAgCdgfYDu/aJPOtpPi860r2mdm3HkvLPUlW89JQvqpmfcx3sFacXsEnnjw/kcAQgggIBvAesDdPgkUcPaSnfd5/DNu/6pM/Tv7IjddSkTAer7WKECBBC4TcD6ANX26gL6nVt+dps+vXySVMWmybWrN+XEwQsycD7t/j3TNVINTW/tqAbx4c5+d/H9M/X/naXq5wV1j3NQIIAAAnkJhCJAtWcahh+3HHOXKw3f9MxTJ44yLV/a1Ngj/b9cyQrD0qe8jhsKIYCAiIQmQHW09I6k/r5BOXV8wL2VU0PzbjPzur/OzuvkkW56pqq3gQ4/69Q67rY0iqMDAQQQGEkgVAE6Umey/Z9roH70KIsAApkECFCOCwQQQCBPAasDVH9+9yVT7tOXdBIo21b6WKHMKC92lzvp59s3rWvzK4e4Zz7PA4ViCCBwp4C1AeotT8pn0JY3VsjyxvJ8ilIGAQQQyFnAygAd/vQlXRivk0U64ZNtGzh/TU4dT8kP355zd+O++JyPAXZEAIE8BawLUO++dr1jaM2WeaN+xqc3WaQe2e6fz9OLYggggMAtAesC1LstM9u97yONn3f7J88IHUmK/yOAgB8B6wK0ZUWXpC5cl62JpaM++/QgWLLk55CgLAII5CpgXYB6DWo7UJdrHzLuF1Q9vhpBYQQQGNMCBOiYHl46hwAC91LAugB9vW6f29/3O5f66rd2TO+T19eAsCGAAAL3QsC6ANXrl7plu8c9Fwh9glPptCLf9eTyXeyDAALRFLAuQKM5DPQaAQTCKECAhnHUaDMCCFghQIBaMQw0AgEEwihAgIZx1GgzAghYIUCAWjEMNAIBBMIoQICGcdRoMwIIWCFAgFoxDDQCAQTCKECAhnHUaDMCCFghQIBaMQw0AgEEwihAgIZx1GgzAghYIXArQJtiiUtGZLKfx8hZ0SMagQACCNwHAX3N+ob6feKIXDZN1YluY2SxnwcZ34c28xUIIICAFQLec4cdR/ab5lhH3BGzo7hkfHrjrkWFRRMLrGgkjUAAAQRsFNi0queP/tNXHjHiNBptoHcWWlJW6Ly0vtJUVJXm/VR4GztMmxBAAAG/Ar3JlOz9rPfvvp8uPqhnn9t76mvcAI3XdE0ZN5T+Rn/K+/0SyiOAAAJjWUDD86+Cwufbu2t1/uj/TX/O/+OYuBip0omlsYxA3xBAAIFcBXTCSBxJPmCc9raDy9q9cv8CffPLP2vbpcMAAAAASUVORK5CYII=');
}
.user-page-follow-button-wrapper.selected {
background: url('data:image/png;base64,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');
background-repeat: no-repeat !important;
}
.user-page-follow-button-text {
padding-left: 60px;
margin-top: 10px;
color: #673DB6;
font-size: 17px;
font-weight: bold;
-webkit-user-select: none;
}
.user-page-back-button {
z-index: 3;
position: absolute;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAA4CAYAAAC8P2e6AAAABHNCSVQICAgIfAhkiAAAA0pJREFUeF7tnTFIlVEUx895Q0tEQlM0OfgkbC1cIgia8vl80BbYEi5R0KbgKCWNtT1tEVqCMFBXQRq0gmhQlIRcApeKJ5KE1LvxPSJB1D7hcc+5fr+3KZd3zv2d/4+7fN99KiJS6ar3aUmHNUiPqHRk/+MDgUITCNIIKiuhGcZn1odmtVKeHChpmC40FDYPgSMINIPWtL88sagqvZCCAAQOJhCCLGm1XG+I6lkgQQAChxAIYUur3RMBQBCAwNEEEIWEQCAHAUTJAYklEEAUMgCBHAQQJQcklkAAUcgABHIQQJQckFgCAUQhAxDIQQBRckBiCQTci3L6zCm5//haa1LPRhbkx/YuU4NAdAKuRckkGZu6KZ0Xz7XAPH+0JDNTy9EhURACbkXZL0k2qtHBOVl+t8nUIBCdgEtRDpLk6ciCzE+vRwdEQQhkBNyJgiQE0yMBV6IgiceI0JOrEwVJCKRnAi5OFCTxHBF6c3GiIAlBTIGA6YmCJClEhB5NTxQkIYApETA5UZAkpYjQq8mJkkny5GVVLnTuXfzyqv5RPrz50taJ7Gzvysba97Z+J19WXALRT5QX7wclkyXGZ/ntpozemYtRihonnEB0UV6v3Y2GNHvS+PblqWj1KHRyCUQX5d7YVblxq/sf0Z87v+Tz6ldp/m7/9WLz0594PuzkZjfqzqKLku3ueq1LHvx9xyT7e2P1W+vJYN41iTp7ih2DgIkoyHKMCbHUBQEzUZDFxfxpIicBU1GQJeeUWGZOwFwUZDHPAA3kIOBCFGTJMSmWmBJwIwqymOaA4v8h4EoUZCGvXgm4EwVZvEal2H25FOUwWR7W+E3WYsfVbvduRTlIFq4ssgtK0Su7FmW/LFyAV/S42u3fvSgZmktXzrcIcUukXVCKXjkJUYo+JPZvTwBR7GdABwkQQJQEhkSL9gQQxX4GdJAAAURJYEi0aE8AUexnQAcJEECUBIZEi/YEEMV+BnSQAAFESWBItGhPAFHsZ0AHCRDQarneENW9+00TaJoWIRCVQAhb2l+eWFSV3qiFKQaBhAiEIEtaKU8OlDTwokdCg6PVuASaQWualax01fu0pMMapEdUOuK2QTUIOCQQpBFUVkIzjM+sD83+AQT5cLAQHn9qAAAAAElFTkSuQmCC')
0 0;
background-repeat: no-repeat !important;
cursor: pointer;
width: 150px;
height: 45px;
background-size: 100%;
margin-left: -15px;
margin-top: -295px;
}
.user-page-back-button-text {
padding-left: 55px;
margin-top: 6px;
color: white;
font-size: large;
}
.user-page-tab-table {
position: relative;
margin-top: 35px;
margin-bottom: -10px;
margin-left: -15px;
background: white;
width: 1035px;
border: 1.5px solid #d6d2d2;
border-radius: 10px;
}
.user-page-tab {
width: 260px;
text-align: center;
color: black;
background-color: white;
cursor: pointer;
font-size: x-large;
padding-top: 30px;
padding-bottom: 30px;
margin: -3px;
}
.user-page-tab.selected {
color: white;
background-color: #673DB6;
}
.user-page-tab.left {
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
}
.user-page-tab.right {
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
.user-page-tab-triangle {
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-top: 35px solid #673DB6;
border-bottom: 20px solid transparent;
display: none;
position: absolute;
margin-top: -15px;
margin-left: 100px;
}
.user-page-tab-triangle.selected {
display: inline-block;
}
/*First run page*/
.about-wrapper {
display: none;
text-align: center;
width: 940px;
height: 640px;
margin: 40px 190px;
/*background-color: rgba(255,255,255,1);
border: 1.5px solid #d6d2d2;
border-radius: 10px;*/
}
.about-header {
/*margin-top: -420px;
margin-left: 175px;*/
text-align: center;
font-size: 40px;
}
.about-body {
font-size: xx-large;
position: absolute;
text-align: center;
margin-left: 30px;
max-width: 800px;
}
.about-button {
position: absolute;
height: 75px;
width: 200px;
margin-top: 500px;
background: #673DB6;
color: white;
font-size: xx-large;
border-width: 0;
border-radius: 15px;
}
#load-more-posts-button {
position: absolute;
height: 50px;
width: 175px;
background: #673DB6;
color: white;
font-size: large;
border-width: 0;
border-radius: 15px;
bottom: 15px;
left: 430px
}
#user-new-post-wrapper {
position: fixed;
z-index: 10;
right: 0;
bottom: 0;
width: 250px;
height: 100px;
border-top-left-radius: 15px;
background-color: #673DB6;
color: white;
text-align: center;
font-size: xx-large;
display: table;
}
#community-new-post-wrapper {
position: fixed;
z-index: 10;
right: 0;
bottom: 0;
width: 250px;
height: 100px;
border-top-left-radius: 15px;
background-color: #1F8A42;
color: white;
text-align: center;
font-size: xx-large;
display: table;
}
.new-post-button-text {
display: table-cell;
vertical-align: middle;
}
/* The container */
.checkbox-container {
display: block;
position: relative;
padding-top: 3px;
padding-left: 60px;
margin-bottom: 30px;
cursor: pointer;
font-size: xx-large;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* Hide the browser's default checkbox */
.checkbox-container input {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
/* Checkbox Style*/
/* Create a custom checkbox */
.checkmark {
position: absolute;
top: 0;
left: 0;
height: 50px;
width: 50px;
background-color: #eee;
border-radius: 5px;
}
/* When the checkbox is checked, add a blue background */
.checkbox-container input:checked ~ .checkmark {
background-color: #4F279B;
}
/* Create the checkmark/indicator (hidden when not checked) */
.checkmark:after {
content: "";
position: absolute;
display: none;
}
/* Show the checkmark when checked */
.checkbox-container input:checked ~ .checkmark:after {
display: block;
}
/* Style the checkmark/indicator */
.checkbox-container .checkmark:after {
left: 18px;
top: 10px;
width: 10px;
height: 20px;
border: solid white;
border-width: 0 6px 6px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
border-radius: 2px;
}
textarea {
background-color: #eee;
border-style: none;
border-radius: 5px;
width: 900px;
height: 100px;
margin-bottom: 50px;
resize: none;
font-size: x-large;
}
.submit-button {
height: 40px;
width: 122px;
font-size: x-large;
color: #673DB6;
background-color: white;
border-radius: 5px;
border-color: #673DB6;
border-style: solid;
border-width: medium;
margin-left: -203px;
margin-top: -5px;
position: absolute;
}
.post-type-button-text {
background-color: #4F279B;
}
.post-type-button-painting {
background-color: #323232;
}

File diff suppressed because one or more lines are too long