diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..1dcef2d9f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +.env \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..b58b603fe --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/final_project.iml b/.idea/final_project.iml new file mode 100644 index 000000000..0c8867d7e --- /dev/null +++ b/.idea/final_project.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..12b00a064 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 000000000..e8f79ea7b --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: npm start \ No newline at end of file diff --git a/README.md b/README.md index 88765ffde..d2f350b43 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,103 @@ # Final Project -*Due before the start of class, October 11th (final day of the term)* -For your final project, you'll implement a web application that exhibits understanding of the course materials. -This project should provide an opportunity to both be creative and to pursue individual research and learning goals. +Group 3 Team Members +- Felix Chen +- Jason Odell +- Timothy Goon +- Denver Blake + +Website Link: https://aram-generator.herokuapp.com/ + +Video Link: https://drive.google.com/file/d/1oLcI_5p4T-1tOXv322fftIzquvw4JZGF/view?usp=sharing + +## Description +ARAM is a 5v5 mode in League of Legends where each player is assigned a random character that they own and can trade with their teammates. Currently, there is no good way to generate an ARAM character draft in non-matchmaking player organized games, so we made a match generator which would assign characters to players for these types of games. + +Using the Riot API, each time we generate a draft of characters, we retrieve each player’s owned character pool and grab a total of 10 characters for each team. + +Our interface has the user input 10 usernames with 5 on each team. After clicking a ‘generate’ button, our program outputs 10 characters for each team to select from, with each username owning at least 2 out of the 10 generated characters. + +We also created a tournament generator where you can add teams to a database and randomly generate matches so that every team has a match against another team. + +## Additional Instructions + +The requests on our app require the use of the Riot API which is unreliable and may fail. If any request takes more than 1 minute refresh the page on our app and try again. +Also, if too many people are using our app at once the Riot API may stop responding. In this case wait a few minutes and try again later. +Additionally if you wish to test our code on your own machine, you will need your own Riot API key. You can get a developer API key by going to https://developer.riotgames.com + +Here is a list of valid League of Legends summoner names to test the app with. + +1. Xialblo +2. NearbyAnt +3. Tiicho +4. Kyøu +5. Time to Break +6. Kieran2500 +7. Planet 9 +8. Big Jadeo +9. Deino Mite +10. jairzinho +11. Robertdobert +12. happynoob23 +13. ezra3102 +14. uginghostdragon +15. FC Wombat +16. Schnellaffe +17. Xyatz314 +18. WrÆth +19. WalrusKing21 +20. link101011 +21. maxchief101 +22. luckybanana16 +23. HexKnight +24. Wephen +25. Dragonkillermega +26. TeaGoon +27. Emperor Gandalf +28. TheSimoneseCat +29. Viserra +30. Trutru32 +31. Dayanah +32. cadgweep +33. Mumichu +34. Megagamer10 +35. jhooney WPI +36. Ksesha +37. ricetoeatyou +38. Rilay +39. ItsMyMiddleLane +40. GriffonStrike14 +41. The Quıpster +42. Gearldine6Z +43. Yuumíí +44. SovietPupper +45. rathmadara +46. Flagged ID +47. HideOnShrubbery +48. Parzival0913 + +## Technologies +- Javascript +- Nodejs +- Bootstrap - used for styling +- React - used for frontend + - react-router-dom +- Heroku - used to deploy the website +- Express - used for backend +- Mongodb - used for storing users, teams, matches, and tournaments +- Mongoose - used to store & retrieve data from mongodb +- Riot Games API - used for generating champions and getting IDs linked to summoner names +- LeagueJS - Wrapper for riot API calls + +## Challenges +The Riot API takes longer to respond than expected so our code runs a lot slower than we’d like. Additionally the API doesn’t always respond when called. +CORS was inconvenient during development +Formatting the images to show next to each character was annoying + +## Responsibilities + +- Felix Chen - Front end for single draft generation and some css styling +- Jason Odell - API functions champion generation & getting account IDs from summoner names. Added checks for valid summoner name input +- Timothy Goon - login and register system, connect single match generation page with backend, code reviews and refactoring, app deployment +- Denver Blake - Front & Back end for TournamentCreation page, set up database schemas for tournament, matches, and teams -## General description -Your project should consist of a complete Web application, exhibiting facets of the three main sections of the course material: - -- Static Web page content and design. You should have a project that is accessible, easily navigable, and features significant content. -- Dynamic behavior implemented with JavaScript (TypeScript is also allowed if your group wants to explore it). -- Server-side programming *using Node.js*. Typically this will take the form of some sort of persistent data (database), authentication, and possibly server-side computation. -- A video (less than five minutes) where each group member explains some aspect of the project. An easy way to produce this video is for you all the groups members to join a Zoom call that is recorded; each member can share their screen when they discuss the project or one member can "drive" the interface while other members narrate (this second option will probably work better.) The video should be posted on YouTube or some other accessible video hosting service. Make sure your video is less than five minutes, but long enough to successfully explain your project and show it in action. There is no minimum video length. - -## Project ideation -Excellent projects typically serve someone/some group; for this assignment you need to define your users and stakeholders. I encourage you to identify projects that will have impact, either artistically, politically, or in terms of productivity. - -## Logistics -### Team size -Students are will work in teams of 3-5 students for the project; teams of two can be approved with the permission of the instructor. Working in teams should help enable you to build a good project in a limited amount of time. Use the `#project-logistics` channel in Discord to pitch ideas for final projects and/or find fellow team members as needed. - -Teams must be in place by end of day on Saturday, September 25th. If you have not identified a team at this point, you will be assigned a team. You will be given some class time on Monday to work on your proposal, but please plan on reserving additional time as needed. - -### Deliverables - -__Proposal:__ -Provide an outline of your project direction and the names of associated team members. -The outline should have enough detail so that staff can determine if it meets the minimum expectations, or if it goes too far to be reasonable by the deadline. Please include a general description of a project, and list of key technologies/libraries you plan on using (e.g. React, Three.js, Svelte, TypeScript etc.). Name the file proposal.md and submit a pull request. -Submit a PR to turn it in by Monday, September 27th at11:59 PM. Only one pull request is required per team. - -There are no other scheduled checkpoints for your project. - -#### Turning in Your Outline / Project -Submit a second PR on the final project repo to turn in your app and code. Again, only one pull request per team. - -Deploy your app, in the form of a webpage, to Glitch/Heroku/Digital Ocean or some other service; it is critical that the application functions correctly wherever you post it. - -The README for your second pull request doesn’t need to be a formal report, but it should contain: - -1. A brief description of what you created, and a link to the project itself (two paragraphs of text) -2. Any additional instructions that might be needed to fully use your project (login information etc.) -3. An outline of the technologies you used and how you used them. -4. What challenges you faced in completing the project. -5. What each group member was responsible for designing / developing. -6. A link to your project video. - -Think of 1,3, and 4 in particular in a similar vein to the design / tech achievements for A1—A4… make a case for why what you did was challenging and why your implementation deserves a grade of 100%. - -## FAQs - -- **Can I use XYZ framework?** You can use any web-based frameworks or tools available, but for your server programming you need to use Node.js. Your client-side scripting language should be either JavaScript or TypeScript. diff --git a/app.js b/app.js new file mode 100644 index 000000000..b0d049110 --- /dev/null +++ b/app.js @@ -0,0 +1,49 @@ +var createError = require('http-errors'); +var express = require('express'); +var path = require('path'); +var cookieParser = require('cookie-parser'); +var logger = require('morgan'); +const mongoose = require('mongoose'); +var env = process.env.NODE_ENV || 'development'; +var app = express(); + +if (env === 'development') { + var cors = require('cors'); + require('dotenv').config(); + app.use(cors({ + origin: "http://localhost:3000", + methods: "GET,HEAD,PUT,PATCH,POST,DELETE", + credentials: true, // allow session cookie from browser to pass through + })); + console.log('cors enabled'); +} + +// Mongodb connection string +const MONGODB = process.env.MONGODB; + +var indexRouter = require('./routes/index'); +const tournmentRouter = require('./routes/tournament'); + +app.use(logger('dev')); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'build'))); + +app.use('/', indexRouter); +app.use('/tournament', tournmentRouter); + +app.use((req, res, next) => { + res.sendFile(path.join(__dirname, "build", "index.html")); +}); + +// Connect to mongodb +mongoose.connect(MONGODB, { useNewUrlParser: true, useUnifiedTopology: true }) + .then(() => { + console.log('MongoDB Connected'); + }) + .catch((err) => { + console.error(err); + }); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100644 index 000000000..a86d44f9e --- /dev/null +++ b/bin/www @@ -0,0 +1,91 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('server:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3001'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +console.log(`Server listening on Port ${port}`); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/build/asset-manifest.json b/build/asset-manifest.json new file mode 100644 index 000000000..777e6e0a4 --- /dev/null +++ b/build/asset-manifest.json @@ -0,0 +1,182 @@ +{ + "files": { + "main.css": "/static/css/main.492f2166.chunk.css", + "main.js": "/static/js/main.7d82c1d6.chunk.js", + "main.js.map": "/static/js/main.7d82c1d6.chunk.js.map", + "runtime-main.js": "/static/js/runtime-main.fa748bf9.js", + "runtime-main.js.map": "/static/js/runtime-main.fa748bf9.js.map", + "static/js/2.3ee330e7.chunk.js": "/static/js/2.3ee330e7.chunk.js", + "static/js/2.3ee330e7.chunk.js.map": "/static/js/2.3ee330e7.chunk.js.map", + "static/js/3.6b59f857.chunk.js": "/static/js/3.6b59f857.chunk.js", + "static/js/3.6b59f857.chunk.js.map": "/static/js/3.6b59f857.chunk.js.map", + "index.html": "/index.html", + "static/css/main.492f2166.chunk.css.map": "/static/css/main.492f2166.chunk.css.map", + "static/js/2.3ee330e7.chunk.js.LICENSE.txt": "/static/js/2.3ee330e7.chunk.js.LICENSE.txt", + "static/media/aatrox.png": "/static/media/aatrox.f14aa705.png", + "static/media/ahri.png": "/static/media/ahri.c0f023dc.png", + "static/media/akali.png": "/static/media/akali.f64e9285.png", + "static/media/akshan.png": "/static/media/akshan.44378dad.png", + "static/media/alistar.png": "/static/media/alistar.bca000d7.png", + "static/media/amumu.png": "/static/media/amumu.a12d8578.png", + "static/media/anivia.png": "/static/media/anivia.4b7d00ab.png", + "static/media/annie.png": "/static/media/annie.a6840f5e.png", + "static/media/aphelios.png": "/static/media/aphelios.92a596b6.png", + "static/media/ashe.png": "/static/media/ashe.8221755b.png", + "static/media/aurelion_sol.png": "/static/media/aurelion_sol.d1b83716.png", + "static/media/azir.png": "/static/media/azir.d34190c0.png", + "static/media/bard.png": "/static/media/bard.968cd483.png", + "static/media/blitzcrank.png": "/static/media/blitzcrank.1af614b2.png", + "static/media/brand.png": "/static/media/brand.b70bb0e1.png", + "static/media/braum.png": "/static/media/braum.77086792.png", + "static/media/caitlyn.png": "/static/media/caitlyn.aa74be1e.png", + "static/media/camille.png": "/static/media/camille.8a796917.png", + "static/media/cassiopeia.png": "/static/media/cassiopeia.746e642c.png", + "static/media/cho.png": "/static/media/cho.9f306c78.png", + "static/media/chogath.png": "/static/media/chogath.3cf53c03.png", + "static/media/corki.png": "/static/media/corki.a810de09.png", + "static/media/darius.png": "/static/media/darius.d036ae97.png", + "static/media/diana.png": "/static/media/diana.68bfad88.png", + "static/media/dr._mundo.png": "/static/media/dr._mundo.56500195.png", + "static/media/draven.png": "/static/media/draven.e614357f.png", + "static/media/ekko.png": "/static/media/ekko.9976ca6c.png", + "static/media/elise.png": "/static/media/elise.c3ebb58d.png", + "static/media/evelynn.png": "/static/media/evelynn.d4013859.png", + "static/media/ezreal.png": "/static/media/ezreal.2321879c.png", + "static/media/fiddlesticks.png": "/static/media/fiddlesticks.aeb01d83.png", + "static/media/fiora.png": "/static/media/fiora.af59dcc4.png", + "static/media/fizz.png": "/static/media/fizz.84f4ed0d.png", + "static/media/galio.png": "/static/media/galio.d6d6b918.png", + "static/media/gangplank.png": "/static/media/gangplank.f1be6b65.png", + "static/media/garen.png": "/static/media/garen.7b5440a2.png", + "static/media/gnar.png": "/static/media/gnar.e151ba15.png", + "static/media/gragas.png": "/static/media/gragas.c446fb6a.png", + "static/media/graves.png": "/static/media/graves.ed3f85d2.png", + "static/media/gwen.png": "/static/media/gwen.d5573b54.png", + "static/media/hecarim.png": "/static/media/hecarim.818f8da7.png", + "static/media/heimerdinger.png": "/static/media/heimerdinger.85a4b359.png", + "static/media/illaoi.png": "/static/media/illaoi.52ffc5f5.png", + "static/media/irelia.png": "/static/media/irelia.79621ed2.png", + "static/media/ivern.png": "/static/media/ivern.7a0a7375.png", + "static/media/janna.png": "/static/media/janna.f2840a91.png", + "static/media/jarvan_iv.png": "/static/media/jarvan_iv.c069ad35.png", + "static/media/jax.png": "/static/media/jax.ba8d2850.png", + "static/media/jayce.png": "/static/media/jayce.a9be9399.png", + "static/media/jhin.png": "/static/media/jhin.51541805.png", + "static/media/jinx.png": "/static/media/jinx.a3f62a9e.png", + "static/media/kaisa.png": "/static/media/kaisa.a539b792.png", + "static/media/kalista.png": "/static/media/kalista.f1276540.png", + "static/media/karma.png": "/static/media/karma.c8c40ec3.png", + "static/media/karthus.png": "/static/media/karthus.6fe0e9ba.png", + "static/media/kassadin.png": "/static/media/kassadin.d2afba14.png", + "static/media/katarina.png": "/static/media/katarina.c3b8e3b8.png", + "static/media/kayle.png": "/static/media/kayle.adba682b.png", + "static/media/kayn.png": "/static/media/kayn.bb794fdf.png", + "static/media/kennen.png": "/static/media/kennen.2b716d6b.png", + "static/media/khazix.png": "/static/media/khazix.f87e5719.png", + "static/media/kindred.png": "/static/media/kindred.9a662d73.png", + "static/media/kled.png": "/static/media/kled.bbf8c848.png", + "static/media/kogmaw.png": "/static/media/kogmaw.b7a16915.png", + "static/media/leblanc.png": "/static/media/leblanc.a6186c73.png", + "static/media/lee_sin.png": "/static/media/lee_sin.f35f8dfd.png", + "static/media/leona.png": "/static/media/leona.cbdea8a7.png", + "static/media/lillia.png": "/static/media/lillia.b9117388.png", + "static/media/lissandra.png": "/static/media/lissandra.41ebae91.png", + "static/media/lucian.png": "/static/media/lucian.363ec6fa.png", + "static/media/lulu.png": "/static/media/lulu.f42663ac.png", + "static/media/lux.png": "/static/media/lux.e275416c.png", + "static/media/malphite.png": "/static/media/malphite.7ae5f9cb.png", + "static/media/malzahar.png": "/static/media/malzahar.e59aaef1.png", + "static/media/maokai.png": "/static/media/maokai.be2af994.png", + "static/media/master_yi.png": "/static/media/master_yi.ce4d3717.png", + "static/media/mega_gnar.png": "/static/media/mega_gnar.da5cdd4a.png", + "static/media/miss_fortune.png": "/static/media/miss_fortune.eedbe626.png", + "static/media/mordekaiser.png": "/static/media/mordekaiser.d28ff20d.png", + "static/media/morgana.png": "/static/media/morgana.cf61fea6.png", + "static/media/nami.png": "/static/media/nami.ee9a3599.png", + "static/media/nasus.png": "/static/media/nasus.efd88b34.png", + "static/media/nautilus.png": "/static/media/nautilus.e8ae11fe.png", + "static/media/neeko.png": "/static/media/neeko.e272494c.png", + "static/media/nidalee.png": "/static/media/nidalee.fe5960ec.png", + "static/media/nocturne.png": "/static/media/nocturne.dcada184.png", + "static/media/nunu_&_willump.png": "/static/media/nunu_&_willump.ec98f0ac.png", + "static/media/olaf.png": "/static/media/olaf.b963d701.png", + "static/media/orianna.png": "/static/media/orianna.d5c08271.png", + "static/media/ornn.png": "/static/media/ornn.e4209ba0.png", + "static/media/pantheon.png": "/static/media/pantheon.8181188c.png", + "static/media/poppy.png": "/static/media/poppy.a5f620b0.png", + "static/media/pyke.png": "/static/media/pyke.cfe46ced.png", + "static/media/qiyana.png": "/static/media/qiyana.fe2081d0.png", + "static/media/quinn.png": "/static/media/quinn.9eaadf11.png", + "static/media/rakan.png": "/static/media/rakan.fad62d42.png", + "static/media/rammus.png": "/static/media/rammus.80461da5.png", + "static/media/reksai.png": "/static/media/reksai.97ca143e.png", + "static/media/rell.png": "/static/media/rell.cf03caff.png", + "static/media/renekton.png": "/static/media/renekton.7f5c16a2.png", + "static/media/rengar.png": "/static/media/rengar.dab93287.png", + "static/media/rhaast.png": "/static/media/rhaast.fb0a71bc.png", + "static/media/riven.png": "/static/media/riven.38d61721.png", + "static/media/rumble.png": "/static/media/rumble.76ac5e78.png", + "static/media/ryze.png": "/static/media/ryze.72b5ad53.png", + "static/media/samira.png": "/static/media/samira.a1a3ef63.png", + "static/media/sejuani.png": "/static/media/sejuani.9e72f93f.png", + "static/media/senna.png": "/static/media/senna.6bae70d4.png", + "static/media/seraphine.png": "/static/media/seraphine.9326c047.png", + "static/media/sett.png": "/static/media/sett.cabb1d9c.png", + "static/media/shaco.png": "/static/media/shaco.ba5d510c.png", + "static/media/shadow_assassin.png": "/static/media/shadow_assassin.cf09cfe5.png", + "static/media/shen.png": "/static/media/shen.0bcab75b.png", + "static/media/shyvana.png": "/static/media/shyvana.ffca822b.png", + "static/media/singed.png": "/static/media/singed.66bb6c8b.png", + "static/media/sion.png": "/static/media/sion.b01540a4.png", + "static/media/sivir.png": "/static/media/sivir.5254a1fb.png", + "static/media/skarner.png": "/static/media/skarner.9373e788.png", + "static/media/sona.png": "/static/media/sona.e014459b.png", + "static/media/soraka.png": "/static/media/soraka.f90e453c.png", + "static/media/swain.png": "/static/media/swain.bece04f5.png", + "static/media/sylas.png": "/static/media/sylas.98f92285.png", + "static/media/syndra.png": "/static/media/syndra.d78e0393.png", + "static/media/tahm_kench.png": "/static/media/tahm_kench.dcc870f8.png", + "static/media/taliyah.png": "/static/media/taliyah.5e33da56.png", + "static/media/talon.png": "/static/media/talon.ed298a4c.png", + "static/media/taric.png": "/static/media/taric.ec96fb3a.png", + "static/media/teemo.png": "/static/media/teemo.c404e885.png", + "static/media/thresh.png": "/static/media/thresh.acb9be7a.png", + "static/media/tristana.png": "/static/media/tristana.df4f9162.png", + "static/media/trundle.png": "/static/media/trundle.f2b3b8de.png", + "static/media/tryndamere.png": "/static/media/tryndamere.7ab91966.png", + "static/media/twisted_fate.png": "/static/media/twisted_fate.458ef208.png", + "static/media/twitch.png": "/static/media/twitch.9c5cc246.png", + "static/media/udyr.png": "/static/media/udyr.80f3fe1c.png", + "static/media/urgot.png": "/static/media/urgot.dc7ba292.png", + "static/media/varus.png": "/static/media/varus.a9d18e6d.png", + "static/media/vayne.png": "/static/media/vayne.a5b723b2.png", + "static/media/veigar.png": "/static/media/veigar.a7aa4db4.png", + "static/media/velkoz.png": "/static/media/velkoz.f651b09b.png", + "static/media/vi.png": "/static/media/vi.edced1cc.png", + "static/media/viego.png": "/static/media/viego.8d3ce0a4.png", + "static/media/viktor.png": "/static/media/viktor.b08bbf08.png", + "static/media/vladimir.png": "/static/media/vladimir.57da59b5.png", + "static/media/volibear.png": "/static/media/volibear.495b9866.png", + "static/media/warwick.png": "/static/media/warwick.a23a8c47.png", + "static/media/wukong.png": "/static/media/wukong.64e04b74.png", + "static/media/xayah.png": "/static/media/xayah.b49e3bd7.png", + "static/media/xerath.png": "/static/media/xerath.f3665116.png", + "static/media/xin_zhao.png": "/static/media/xin_zhao.cb373419.png", + "static/media/yasuo.png": "/static/media/yasuo.a4c7be7b.png", + "static/media/yone.png": "/static/media/yone.cb49b21e.png", + "static/media/yorick.png": "/static/media/yorick.b8f37488.png", + "static/media/yuumi.png": "/static/media/yuumi.dff1c878.png", + "static/media/zac.png": "/static/media/zac.6aa0756c.png", + "static/media/zed.png": "/static/media/zed.ac4a8787.png", + "static/media/ziggs.png": "/static/media/ziggs.fbad0879.png", + "static/media/zilean.png": "/static/media/zilean.ac99fe07.png", + "static/media/zoe.png": "/static/media/zoe.fdc6f11b.png", + "static/media/zyra.png": "/static/media/zyra.8207dc63.png" + }, + "entrypoints": [ + "static/js/runtime-main.fa748bf9.js", + "static/js/2.3ee330e7.chunk.js", + "static/css/main.492f2166.chunk.css", + "static/js/main.7d82c1d6.chunk.js" + ] +} \ No newline at end of file diff --git a/build/favicon.ico b/build/favicon.ico new file mode 100644 index 000000000..b5ff95467 Binary files /dev/null and b/build/favicon.ico differ diff --git a/build/index.html b/build/index.html new file mode 100644 index 000000000..9f5eea2fd --- /dev/null +++ b/build/index.html @@ -0,0 +1 @@ +ARAM Generator
\ No newline at end of file diff --git a/build/logo192.png b/build/logo192.png new file mode 100644 index 000000000..fc44b0a37 Binary files /dev/null and b/build/logo192.png differ diff --git a/build/logo512.png b/build/logo512.png new file mode 100644 index 000000000..a4e47a654 Binary files /dev/null and b/build/logo512.png differ diff --git a/build/manifest.json b/build/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/build/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/build/robots.txt b/build/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/build/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/build/static/css/main.492f2166.chunk.css b/build/static/css/main.492f2166.chunk.css new file mode 100644 index 000000000..98ad5455e --- /dev/null +++ b/build/static/css/main.492f2166.chunk.css @@ -0,0 +1,2 @@ +body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#d3d3d3}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.champ-icon{height:100px;margin:-25px -65px}.btn.btn-primary.test{color:#ffa07a}.league-button-border{display:inline-flex;position:relative;background-color:#000a17;padding:5px;border:1px solid #c8a763}.league-button-border .main{shape-outside:polygon(0 0,calc(100% - 20px) 0,100% 50%,calc(100% - 20px) 100%,0 100%);-webkit-clip-path:polygon(0 0,calc(100% - 15px) 0,100% 50%,calc(100% - 15px) 100%,0 100%);clip-path:polygon(0 0,calc(100% - 15px) 0,100% 50%,calc(100% - 15px) 100%,0 100%);background:linear-gradient(#018699,#006284);height:32px;min-width:150px;cursor:pointer;border:0;font-family:"Beaufort";font-weight:700;font-size:16px;color:#a3c0c0;text-transform:uppercase;position:relative;padding:0 48px}.league-button-border .main:before{content:"";position:absolute;top:0;left:0;shape-outside:polygon(2px 2px,calc(100% - 22px) 2px,calc(100% - 4px) 50%,calc(100% - 22px) calc(100% - 2px),2px calc(100% - 2px));-webkit-clip-path:polygon(2px 2px,calc(100% - 16px) 2px,calc(100% - 3px) 50%,calc(100% - 16px) calc(100% - 2px),2px calc(100% - 2px));clip-path:polygon(2px 2px,calc(100% - 16px) 2px,calc(100% - 3px) 50%,calc(100% - 16px) calc(100% - 2px),2px calc(100% - 2px));background-color:#1e222c;height:32px;width:100%;z-index:-1}.league-button-border .main:hover{background:linear-gradient(#83d7ca,#1f8faf);color:#e2e2d8}.league-button-border .main:hover:after{background:linear-gradient(#000a17,#000a17) padding-box,linear-gradient(#83d7ca,#1f8faf) border-box}.blue-label,.red-label{font-family:"Beaufort";text-transform:uppercase;font-size:36px;color:#f0e6d2;padding:.75rem 2rem;border:3px solid transparent;text-align:center}.blue-container{background:#1e2328;position:relative;border:4px solid transparent;border-radius:16px;background-clip:padding-box;padding:10px}.blue-container:after{position:absolute;top:-4px;bottom:-4px;left:-4px;right:-4px;background:linear-gradient(#08abac,#01698b);content:"";z-index:-1;border-radius:16px}.red-container{background:#1e2328;position:relative;border:4px solid transparent;border-radius:16px;background-clip:padding-box;padding:10px}.red-container:after{position:absolute;top:-4px;bottom:-4px;left:-4px;right:-4px;background:linear-gradient(#d85353,#8b1515);content:"";z-index:-1;border-radius:16px} +/*# sourceMappingURL=main.492f2166.chunk.css.map */ \ No newline at end of file diff --git a/build/static/css/main.492f2166.chunk.css.map b/build/static/css/main.492f2166.chunk.css.map new file mode 100644 index 000000000..2562e703f --- /dev/null +++ b/build/static/css/main.492f2166.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://src/index.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAA8J,CAC9J,kCAAmC,CACnC,iCAAkC,CAClC,wBACF,CAEA,KACE,yEACF,CAEA,YACE,YAAa,CACb,kBACF,CAEA,sBACE,aACF,CAEA,sBACE,mBAAoB,CACpB,iBAAkB,CAClB,wBAAyB,CACzB,WAAY,CACZ,wBACF,CAEA,4BACE,qFAA2F,CAC3F,yFAAuF,CAAvF,iFAAuF,CACvF,2CAA6C,CAC7C,WAAY,CACZ,eAAgB,CAChB,cAAe,CACf,QAAS,CACT,sBAAuB,CACvB,eAAiB,CACjB,cAAe,CACf,aAAc,CACd,wBAAyB,CACzB,iBAAkB,CAClB,cACF,CAEA,mCACE,UAAW,CACX,iBAAkB,CAClB,KAAM,CACN,MAAO,CACP,iIAAsI,CACtI,qIAAkI,CAAlI,6HAAkI,CAClI,wBAAyB,CACzB,WAAY,CACZ,UAAW,CACX,UACF,CAEA,kCACE,2CAA6C,CAC7C,aACF,CAEA,wCACE,mGACF,CAYA,uBACE,sBAAuB,CACvB,wBAAyB,CACzB,cAAe,CACf,aAAc,CACd,mBAAoB,CACpB,4BAA6B,CAC7B,iBACF,CAEA,gBACE,kBAAmB,CACnB,iBAAkB,CAClB,4BAA6B,CAC7B,kBAAmB,CACnB,2BAA4B,CAC5B,YACF,CAEA,sBACE,iBAAkB,CAClB,QAAS,CACT,WAAY,CACZ,SAAU,CACV,UAAW,CACX,2CAA6C,CAC7C,UAAW,CACX,UAAW,CACX,kBACF,CAEA,eACE,kBAAmB,CACnB,iBAAkB,CAClB,4BAA6B,CAC7B,kBAAmB,CACnB,2BAA4B,CAC5B,YACF,CAEA,qBACE,iBAAkB,CAClB,QAAS,CACT,WAAY,CACZ,SAAU,CACV,UAAW,CACX,2CAA6C,CAC7C,UAAW,CACX,UAAW,CACX,kBACF","file":"main.492f2166.chunk.css","sourcesContent":["body {\r\n margin: 0;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n background-color: lightgray;\r\n}\r\n\r\ncode {\r\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;\r\n}\r\n\r\n.champ-icon {\r\n height: 100px;\r\n margin: -25px -65px -25px -65px;\r\n}\r\n\r\n.btn.btn-primary.test {\r\n color: lightsalmon\r\n}\r\n\r\n.league-button-border {\r\n display: inline-flex;\r\n position: relative;\r\n background-color: #000a17;\r\n padding: 5px;\r\n border: 1px solid #c8a763;\r\n}\r\n\r\n.league-button-border .main {\r\n shape-outside: polygon(0 0, calc(100% - 20px) 0, 100% 50%, calc(100% - 20px) 100%, 0% 100%);\r\n clip-path: polygon(0 0, calc(100% - 15px) 0, 100% 50%, calc(100% - 15px) 100%, 0% 100%);\r\n background: linear-gradient(#018699, #006284);\r\n height: 32px;\r\n min-width: 150px;\r\n cursor: pointer;\r\n border: 0;\r\n font-family: 'Beaufort';\r\n font-weight: bold;\r\n font-size: 16px;\r\n color: #a3c0c0;\r\n text-transform: uppercase;\r\n position: relative;\r\n padding: 0 48px\r\n}\r\n\r\n.league-button-border .main::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n shape-outside: polygon(2px 2px, calc(100% - 22px) 2px, calc(100% - 4px) 50%, calc(100% - 22px) calc(100% - 2px), 2px calc(100% - 2px));\r\n clip-path: polygon(2px 2px, calc(100% - 16px) 2px, calc(100% - 3px) 50%, calc(100% - 16px) calc(100% - 2px), 2px calc(100% - 2px));\r\n background-color: #1e222c;\r\n height: 32px;\r\n width: 100%;\r\n z-index: -1\r\n}\r\n\r\n.league-button-border .main:hover {\r\n background: linear-gradient(#83d7ca, #1f8faf);\r\n color: #e2e2d8\r\n}\r\n\r\n.league-button-border .main:hover::after {\r\n background: linear-gradient(#000a17, #000a17) padding-box, linear-gradient(#83d7ca, #1f8faf) border-box\r\n}\r\n\r\n.blue-label {\r\n font-family: 'Beaufort';\r\n text-transform: uppercase;\r\n font-size: 36px;\r\n color: #f0e6d2;\r\n padding: .75rem 2rem;\r\n border: 3px solid transparent;\r\n text-align: center;\r\n}\r\n\r\n.red-label {\r\n font-family: 'Beaufort';\r\n text-transform: uppercase;\r\n font-size: 36px;\r\n color: #f0e6d2;\r\n padding: .75rem 2rem;\r\n border: 3px solid transparent;\r\n text-align: center;\r\n}\r\n\r\n.blue-container {\r\n background: #1e2328;\r\n position: relative;\r\n border: 4px solid transparent;\r\n border-radius: 16px;\r\n background-clip: padding-box;\r\n padding: 10px;\r\n}\r\n\r\n.blue-container::after {\r\n position: absolute;\r\n top: -4px;\r\n bottom: -4px;\r\n left: -4px;\r\n right: -4px;\r\n background: linear-gradient(#08abac, #01698b);\r\n content: '';\r\n z-index: -1;\r\n border-radius: 16px;\r\n}\r\n\r\n.red-container {\r\n background: #1e2328;\r\n position: relative;\r\n border: 4px solid transparent;\r\n border-radius: 16px;\r\n background-clip: padding-box;\r\n padding: 10px;\r\n}\r\n\r\n.red-container::after{\r\n position: absolute;\r\n top: -4px;\r\n bottom: -4px;\r\n left: -4px;\r\n right: -4px;\r\n background: linear-gradient(#d85353, #8b1515);\r\n content: '';\r\n z-index: -1;\r\n border-radius: 16px;\r\n}"]} \ No newline at end of file diff --git a/build/static/js/2.3ee330e7.chunk.js b/build/static/js/2.3ee330e7.chunk.js new file mode 100644 index 000000000..cbd4cedce --- /dev/null +++ b/build/static/js/2.3ee330e7.chunk.js @@ -0,0 +1,3 @@ +/*! For license information please see 2.3ee330e7.chunk.js.LICENSE.txt */ +(this.webpackJsonpclient=this.webpackJsonpclient||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(31)},function(e,t,n){"use strict";e.exports=n(26)},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(14);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0;d--){var p=l[d];"."===p?a(l,d):".."===p?(a(l,d),f++):f&&(a(l,d),f--)}if(!c)for(;f--;f)l.unshift("..");!c||""===l[0]||l[0]&&o(l[0])||l.unshift("");var h=l.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function i(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"===typeof t||"object"===typeof n){var r=i(t),o=i(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},c=n(8);function s(e){return"/"===e.charAt(0)?e:"/"+e}function f(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function m(e,t,n,o){var a;"string"===typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(a=Object(r.a)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=l(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function v(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"===typeof e?e(t,n):e;"string"===typeof a?"function"===typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),f({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=m(e,t,d(),w.location);s.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,f({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}n.d(t,"a",(function(){return r}))},function(e,t,n){e.exports=n(32)()},function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var r=n(3),o=n(9),a=n(1),l=n.n(a),i=n(7),u=(n(17),n(5)),c=n(16),s=n(8),f=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o