├── .babelrc
├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .prettierignore
├── .prettierrc
├── .vercelignore
├── CODE_OF_CONDUCT.md
├── LICENSE.md
├── README.md
├── THEMES.md
├── api
├── index.ts
├── routes.ts
└── routes
│ ├── profile-route.ts
│ └── skills-route.ts
├── package.json
├── public
├── api
│ ├── index.js
│ ├── index.js.map
│ ├── routes.js
│ ├── routes.js.map
│ └── routes
│ │ ├── profile-route.js
│ │ ├── profile-route.js.map
│ │ ├── skills-route.js
│ │ └── skills-route.js.map
└── src
│ ├── components
│ ├── card.js
│ ├── card.js.map
│ ├── gradient-box.js
│ └── gradient-box.js.map
│ ├── data
│ ├── frameworks.js
│ ├── frameworks.js.map
│ ├── languages.js
│ ├── languages.js.map
│ ├── libraries.js
│ ├── libraries.js.map
│ ├── software-ides.js
│ ├── software-ides.js.map
│ ├── themes.js
│ ├── themes.js.map
│ ├── tools.js
│ └── tools.js.map
│ ├── fetchers
│ ├── user-stats-fetcher.js
│ └── user-stats-fetcher.js.map
│ ├── interfaces
│ ├── Contributions.js
│ ├── Contributions.js.map
│ ├── GithubUser.js
│ ├── GithubUser.js.map
│ ├── IconData.js
│ ├── IconData.js.map
│ ├── Repositories.js
│ ├── Repositories.js.map
│ ├── Theme.js
│ └── Theme.js.map
│ ├── utils.js
│ ├── utils.js.map
│ └── widgets
│ ├── error.js
│ ├── error.js.map
│ ├── profile.js
│ ├── profile.js.map
│ ├── skills.js
│ └── skills.js.map
├── src
├── components
│ ├── card.ts
│ └── gradient-box.ts
├── data
│ ├── frameworks.ts
│ ├── languages.ts
│ ├── libraries.ts
│ ├── software-ides.ts
│ ├── themes.ts
│ └── tools.ts
├── fetchers
│ └── user-stats-fetcher.ts
├── interfaces
│ ├── Contributions.ts
│ ├── GithubUser.ts
│ ├── IconData.ts
│ ├── Repositories.ts
│ └── Theme.ts
├── utils.ts
└── widgets
│ ├── error.ts
│ ├── profile.ts
│ └── skills.ts
├── tsconfig.json
└── vercel.json
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "test": {
4 | "presets": [
5 | [
6 | "@babel/preset-env",
7 | {
8 | "targets": {
9 | "node": "current"
10 | }
11 | }
12 | ]
13 | ]
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 4
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.md]
13 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | es2021: true,
4 | node: true,
5 | },
6 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
7 | parser: '@typescript-eslint/parser',
8 | parserOptions: {
9 | ecmaVersion: 12,
10 | sourceType: 'module',
11 | },
12 | plugins: ['@typescript-eslint'],
13 | rules: {
14 | 'no-console': 'off',
15 | '@typescript-eslint/no-var-requires': 0,
16 | '@typescript-eslint/ban-types': 'off',
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # IDEs
2 | .vscode/
3 | .idea/
4 |
5 | # Build & deploy
6 | .vercel
7 | vercel_token
8 |
9 | # Secrets
10 | .env
11 |
12 | # Node
13 | node_modules
14 | package-lock.json
15 |
16 | # Testing
17 | coverage
18 |
19 | # Others
20 | src/widgets/prototyping.svg
21 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.md
3 | coverage
4 | .vercel
5 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "tabWidth": 4
5 | }
6 |
--------------------------------------------------------------------------------
/.vercelignore:
--------------------------------------------------------------------------------
1 | .env
2 | package-lock.json
3 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | * Demonstrating empathy and kindness toward other people
21 | * Being respectful of differing opinions, viewpoints, and experiences
22 | * Giving and gracefully accepting constructive feedback
23 | * Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | * Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | * The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | * Trolling, insulting or derogatory comments, and personal or political attacks
33 | * Public or private harassment
34 | * Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | * Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | github@jurre.me.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Jurre de Ruiter
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 |
4 | [✨] Beautiful, dynamic widgets for GitHub Readme pages. (Statistics, Skills, etc.)
5 |
6 |
7 |
8 | ## Widgets
9 |
10 | ### Skills
11 |
12 | A clear way to give an overview of programming languages, tools, and software that you're familiar with.
13 |
14 | #### Languages
15 |
16 |
17 | Default | &includeNames=true
18 | :-------------------------:|:-------------------------:
19 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
20 |
21 | ```md
22 | [](https://github.com/Jurredr/github-widgetbox)
23 | ```
24 |
25 | #### Frameworks
26 |
27 | Default | &includeNames=true
28 | :-------------------------:|:-------------------------:
29 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
30 |
31 | ```md
32 | [](https://github.com/Jurredr/github-widgetbox)
33 | ```
34 |
35 | #### Libraries
36 |
37 | Default | &includeNames=true
38 | :-------------------------:|:-------------------------:
39 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
40 |
41 | ```md
42 | [](https://github.com/Jurredr/github-widgetbox)
43 | ```
44 |
45 | #### Tools
46 |
47 | Default | &includeNames=true
48 | :-------------------------:|:-------------------------:
49 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
50 |
51 | ```md
52 | [](https://github.com/Jurredr/github-widgetbox)
53 | ```
54 |
55 |
56 | #### Software & IDE's
57 |
58 | Default | &includeNames=true
59 | :-------------------------:|:-------------------------:
60 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
61 |
62 | ```md
63 | [](https://github.com/Jurredr/github-widgetbox)
64 | ```
65 |
66 |
67 | ### Profile
68 |
69 | Show off your profile with some interesting statistics. Perfect for profile READMEs.
70 |
71 |
72 | `&data=followers,repositories,stars,commits`
73 | [](https://github.com/Jurredr/github-widgetbox)
74 |
75 | ```md
76 | [](https://github.com/Jurredr/github-widgetbox)
77 | ```
78 |
79 | ### Themes
80 |
81 | GitHub WidgetBox supports a great variety of different themes for all widgets, like the ones below.
82 | You can check out more examples in [themes.md](https://github.com/Jurredr/github-widgetbox/blob/master/THEMES.md), or have a look at all themes in the [themes.ts](https://github.com/Jurredr/github-widgetbox/blob/9bd0e12a8a79b44b1e714f0c74aa3704091a0360/src/data/themes.ts) file. Feel free to create your own theme(s) and add them to that `themes.ts` file. Make sure to create a PR afterwards to share it with everyone else!
83 |
84 |
85 | `&theme=darkmode`
86 |
87 | darkmode | default
88 | :-------------------------:|:-------------------------:
89 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
90 |
91 |
92 | viridescent | carbon
93 | :-------------------------:|:-------------------------:
94 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
95 |
96 |
97 | nautilus | serika
98 | :-------------------------:|:-------------------------:
99 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
100 |
101 | ```md
102 | [](https://github.com/Jurredr/github-widgetbox)
103 | ```
104 |
105 |
106 | ## TO-DO
107 |
108 | * [x] Fix skills text being off-center
109 | * [x] Add themes (dark mode)
110 | * [x] Add Skills: Tools & Frameworks widget
111 | * [x] Add Skills: Software & IDEs widget
112 | * [ ] Make autobuilder instead of manual build and push
113 | * [ ] Count organization repositories (+ their stars)
114 | * [ ] Truncate name if too long on profile widget
115 | * [ ] Make all widgets a modular size
116 | * [ ] Add Profile Tag widget
117 | * [ ] Add Skill Tag widget
118 | * [ ] Add Commit Streak widget
119 | * [ ] Add Twitter widget
120 | * [ ] Add LinkedIn widget
121 | * [ ] Add Instagram widget
122 | * [ ] Add YouTube widget
123 | * [ ] Add Portfolio website widget
124 | * [ ] Add Project link widget
125 | * [ ] Add Profile banner widget
126 | * [ ] Add Stats widget
127 |
--------------------------------------------------------------------------------
/THEMES.md:
--------------------------------------------------------------------------------
1 |
2 | darkmode | default
3 | :-------------------------:|:-------------------------:
4 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
5 |
6 | viridescent | dark
7 | :-------------------------:|:-------------------------:
8 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
9 |
10 | muted | dark_magic_girl
11 | :-------------------------:|:-------------------------:
12 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
13 |
14 | 8008 | carbon
15 | :-------------------------:|:-------------------------:
16 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
17 |
18 | our_theme | cheesecake
19 | :-------------------------:|:-------------------------:
20 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
21 |
22 | nautilus | serika
23 | :-------------------------:|:-------------------------:
24 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
25 |
26 | serika_dark | bushido
27 | :-------------------------:|:-------------------------:
28 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
29 |
30 | red_samurai | rgb
31 | :-------------------------:|:-------------------------:
32 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
33 |
34 | oblivion | magic_girl
35 | :-------------------------:|:-------------------------:
36 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
37 |
38 | metropolis | mountain
39 | :-------------------------:|:-------------------------:
40 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
41 |
42 | laser | retro
43 | :-------------------------:|:-------------------------:
44 | [](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
45 |
--------------------------------------------------------------------------------
/api/index.ts:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 |
3 | import { Request, Response } from 'express'
4 | import errorWidget from '../src/widgets/error'
5 | import routes from './routes'
6 |
7 | // Setup express
8 | import express from 'express'
9 | const app = express()
10 |
11 | // Use routing on the /api prefix
12 | app.use('/api', routes)
13 |
14 | // Send error widget for incorrect request URL
15 | app.use('*', (req: Request, res: Response) => {
16 | res.setHeader('Content-Type', 'image/svg+xml')
17 | res.send(errorWidget('Unknown', '-28%', 'Invalid API URL!', '-19%'))
18 | })
19 |
20 | // Start listening on defined port
21 | app.listen(process.env.PORT, () => {
22 | console.log(
23 | `Github-WidgetBox listening at http://localhost:${process.env.PORT}`
24 | )
25 | })
26 |
--------------------------------------------------------------------------------
/api/routes.ts:
--------------------------------------------------------------------------------
1 | import express from 'express'
2 | const router = express.Router()
3 |
4 | import skillsRoute from './routes/skills-route'
5 | import profileRoute from './routes/profile-route'
6 |
7 | // Skills widget
8 | router.use('/skills', skillsRoute)
9 |
10 | // Profile widget
11 | router.use('/profile', profileRoute)
12 |
13 | export default router
14 |
--------------------------------------------------------------------------------
/api/routes/profile-route.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express'
2 |
3 | import express from 'express'
4 | const router = express.Router()
5 |
6 | import profileWidget from '../../src/widgets/profile'
7 | import errorWidget from '../../src/widgets/error'
8 | const githubUsernameRegex = require("github-username-regex")
9 |
10 | // Primary profile route
11 | router.get('/', function (req: Request, res: Response) {
12 | const { username, data, theme } = req.query
13 |
14 | // Set the header's type to svg/xml
15 | res.setHeader('Content-Type', 'image/svg+xml')
16 |
17 | // Check if username argument is not present
18 | if (username === undefined || username === null) {
19 | res.send(
20 | errorWidget('Profile', '-25%', 'Username is undefined!', '-26%')
21 | )
22 | return
23 | }
24 |
25 | // Check validity based on GitHub's username rules
26 | if (!githubUsernameRegex.test(username)) {
27 | res.send(
28 | errorWidget('Profile', '-25%', 'Username is invalid!', '-22%')
29 | )
30 | return
31 | }
32 |
33 | // Check if data argument is not present
34 | if (data === undefined || data === null) {
35 | res.send(
36 | errorWidget('Profile', '-25%', 'Data option is missing!', '-25%')
37 | )
38 | return
39 | }
40 |
41 | // Grab the Profile widget
42 | profileWidget(String(username), String(data), String(theme)).then((response) => {
43 | if (response === undefined || response === null) {
44 | res.send(
45 | errorWidget('Profile', '-25%', 'GitHub API-call error!', '-24%')
46 | )
47 | } else {
48 | res.send(response)
49 | }
50 | })
51 | })
52 |
53 | export default router
54 |
--------------------------------------------------------------------------------
/api/routes/skills-route.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express'
2 |
3 | import express from 'express'
4 | const router = express.Router()
5 |
6 | import skillsWidget from '../../src/widgets/skills'
7 | import { getBoolean, getTheme } from '../../src/utils'
8 | import errorWidget from '../../src/widgets/error'
9 | /**
10 | * Primary skill path.
11 | *
12 | * This path is for the primary skill screen. It has the following possible queries
13 | * @param languages the list of languages to show.
14 | * @param frameworks the list of frameworks to show.
15 | * @param libraries the list of libraries to show.
16 | * @param tools the list of tools to show.
17 | * @param software the list of software to show
18 | * @param includeNames the option if it has to include names.
19 | * @param theme the theme of the widget.
20 | * @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards.
21 | */
22 | router.get('/', function (req: Request, res: Response) {
23 | const { names, languages, frameworks, libraries, tools, software, includeNames, theme} = req.query
24 |
25 | // Set the header's type to svg/xml
26 | res.setHeader('Content-Type', 'image/svg+xml')
27 |
28 | // Check if languages argument is not present
29 | if (!languages && !frameworks && !libraries && !names && !tools && !software
30 | ) {
31 | res.send(
32 | errorWidget('Skills', '-24%', 'Languages are undefined!', '-28%')
33 | )
34 | return
35 | }
36 |
37 | if (names) {
38 | res.send(skillsWidget(String(names), undefined, undefined, undefined, undefined, getBoolean(String(includeNames)), String(theme)))
39 | } else {
40 | res.send(skillsWidget(String(languages), String(frameworks), String(libraries), String(tools), String(software), getBoolean(String(includeNames)), String(theme)))
41 | }
42 |
43 | // Grab the Skills widget
44 | })
45 |
46 | export default router
47 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "github-widgetbox",
3 | "version": "1.0.0",
4 | "description": "[✨] Beautiful, dynamic widgets for GitHub Readme pages. (Statistics, Languages, etc.)",
5 | "main": "public/api/index.js",
6 | "scripts": {
7 | "dev": "nodemon api/index.ts",
8 | "build": "rm -rf ./public && tsc",
9 | "start": "npm run build && node public/api/index.js"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/Jurredr/github-widgetbox/"
14 | },
15 | "keywords": [
16 | "GitHub",
17 | "Readme",
18 | "Widget",
19 | "Utility",
20 | "Skills",
21 | "Languages",
22 | "Statistics"
23 | ],
24 | "author": "Jurredr",
25 | "license": "MIT",
26 | "devDependencies": {
27 | "@babel/core": "^7.14.3",
28 | "@babel/eslint-parser": "^7.14.4",
29 | "@types/express": "^4.17.12",
30 | "@types/node": "^15.12.1",
31 | "@types/node-fetch": "^2.5.10",
32 | "@typescript-eslint/eslint-plugin": "^4.26.0",
33 | "@typescript-eslint/parser": "^4.26.0",
34 | "babel-jest": "^27.0.2",
35 | "eslint": "^7.28.0",
36 | "eslint-config-prettier": "^8.3.0",
37 | "eslint-plugin-prettier": "^3.4.0",
38 | "jest": "^27.0.4",
39 | "nodemon": "^2.0.7",
40 | "prettier": "^2.3.1",
41 | "sass": "^1.34.1",
42 | "sass-loader": "^12.0.0",
43 | "ts-jest": "^27.0.2",
44 | "ts-node": "^10.0.0",
45 | "typescript": "^4.3.2",
46 | "webpack": "^5.38.1"
47 | },
48 | "dependencies": {
49 | "axios": "^0.21.1",
50 | "dotenv": "^10.0.0",
51 | "express": "^4.17.1",
52 | "github-username-regex": "^1.0.0",
53 | "node-fetch": "^2.6.1"
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/public/api/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | require('dotenv').config();
7 | const error_1 = __importDefault(require("../src/widgets/error"));
8 | const routes_1 = __importDefault(require("./routes"));
9 | // Setup express
10 | const express_1 = __importDefault(require("express"));
11 | const app = express_1.default();
12 | // Use routing on the /api prefix
13 | app.use('/api', routes_1.default);
14 | // Send error widget for incorrect request URL
15 | app.use('*', (req, res) => {
16 | res.setHeader('Content-Type', 'image/svg+xml');
17 | res.send(error_1.default('Unknown', '-28%', 'Invalid API URL!', '-19%'));
18 | });
19 | // Start listening on defined port
20 | app.listen(process.env.PORT, () => {
21 | console.log(`Github-WidgetBox listening at http://localhost:${process.env.PORT}`);
22 | });
23 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/public/api/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../api/index.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;AAG1B,iEAA8C;AAC9C,sDAA6B;AAE7B,gBAAgB;AAChB,sDAA6B;AAC7B,MAAM,GAAG,GAAG,iBAAO,EAAE,CAAA;AAErB,iCAAiC;AACjC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAM,CAAC,CAAA;AAEvB,8CAA8C;AAC9C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACzC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAC9C,GAAG,CAAC,IAAI,CAAC,eAAW,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA;AAEF,kCAAkC;AAClC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;IAC9B,OAAO,CAAC,GAAG,CACP,kDAAkD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CACvE,CAAA;AACL,CAAC,CAAC,CAAA"}
--------------------------------------------------------------------------------
/public/api/routes.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const skills_route_1 = __importDefault(require("./routes/skills-route"));
9 | const profile_route_1 = __importDefault(require("./routes/profile-route"));
10 | // Skills widget
11 | router.use('/skills', skills_route_1.default);
12 | // Profile widget
13 | router.use('/profile', profile_route_1.default);
14 | exports.default = router;
15 | //# sourceMappingURL=routes.js.map
--------------------------------------------------------------------------------
/public/api/routes.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../api/routes.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,yEAA+C;AAC/C,2EAAiD;AAEjD,gBAAgB;AAChB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,sBAAW,CAAC,CAAA;AAElC,iBAAiB;AACjB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,uBAAY,CAAC,CAAA;AAEpC,kBAAe,MAAM,CAAA"}
--------------------------------------------------------------------------------
/public/api/routes/profile-route.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const profile_1 = __importDefault(require("../../src/widgets/profile"));
9 | const error_1 = __importDefault(require("../../src/widgets/error"));
10 | const githubUsernameRegex = require("github-username-regex");
11 | // Primary profile route
12 | router.get('/', function (req, res) {
13 | const { username, data, theme } = req.query;
14 | // Set the header's type to svg/xml
15 | res.setHeader('Content-Type', 'image/svg+xml');
16 | // Check if username argument is not present
17 | if (username === undefined || username === null) {
18 | res.send(error_1.default('Profile', '-25%', 'Username is undefined!', '-26%'));
19 | return;
20 | }
21 | // Check validity based on GitHub's username rules
22 | if (!githubUsernameRegex.test(username)) {
23 | res.send(error_1.default('Profile', '-25%', 'Username is invalid!', '-22%'));
24 | return;
25 | }
26 | // Check if data argument is not present
27 | if (data === undefined || data === null) {
28 | res.send(error_1.default('Profile', '-25%', 'Data option is missing!', '-25%'));
29 | return;
30 | }
31 | // Grab the Profile widget
32 | profile_1.default(String(username), String(data), String(theme)).then((response) => {
33 | if (response === undefined || response === null) {
34 | res.send(error_1.default('Profile', '-25%', 'GitHub API-call error!', '-24%'));
35 | }
36 | else {
37 | res.send(response);
38 | }
39 | });
40 | });
41 | exports.default = router;
42 | //# sourceMappingURL=profile-route.js.map
--------------------------------------------------------------------------------
/public/api/routes/profile-route.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"profile-route.js","sourceRoot":"","sources":["../../../api/routes/profile-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,wEAAqD;AACrD,oEAAiD;AACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAE5D,wBAAwB;AACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAA;IAE3C,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,4CAA4C;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;QAC7C,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,CAAC,CACnE,CAAA;QACD,OAAM;KACT;IAED,kDAAkD;IAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACrC,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC,CACjE,CAAA;QACD,OAAM;KACT;IAED,wCAAwC;IACxC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;QACrC,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,SAAS,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,0BAA0B;IAC1B,iBAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3E,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;YAC7C,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,CAAC,CACnE,CAAA;SACJ;aAAM;YACH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SACrB;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"}
--------------------------------------------------------------------------------
/public/api/routes/skills-route.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const skills_1 = __importDefault(require("../../src/widgets/skills"));
9 | const utils_1 = require("../../src/utils");
10 | const error_1 = __importDefault(require("../../src/widgets/error"));
11 | /**
12 | * Primary skill path.
13 | *
14 | * This path is for the primary skill screen. It has the following possible queries
15 | * @param languages the list of languages to show.
16 | * @param frameworks the list of frameworks to show.
17 | * @param libraries the list of libraries to show.
18 | * @param tools the list of tools to show.
19 | * @param software the list of software to show
20 | * @param includeNames the option if it has to include names.
21 | * @param theme the theme of the widget.
22 | * @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards.
23 | */
24 | router.get('/', function (req, res) {
25 | const { names, languages, frameworks, libraries, tools, software, includeNames, theme } = req.query;
26 | // Set the header's type to svg/xml
27 | res.setHeader('Content-Type', 'image/svg+xml');
28 | // Check if languages argument is not present
29 | if (!languages && !frameworks && !libraries && !names && !tools && !software) {
30 | res.send(error_1.default('Skills', '-24%', 'Languages are undefined!', '-28%'));
31 | return;
32 | }
33 | if (names) {
34 | res.send(skills_1.default(String(names), undefined, undefined, undefined, undefined, utils_1.getBoolean(String(includeNames)), String(theme)));
35 | }
36 | else {
37 | res.send(skills_1.default(String(languages), String(frameworks), String(libraries), String(tools), String(software), utils_1.getBoolean(String(includeNames)), String(theme)));
38 | }
39 | // Grab the Skills widget
40 | });
41 | exports.default = router;
42 | //# sourceMappingURL=skills-route.js.map
--------------------------------------------------------------------------------
/public/api/routes/skills-route.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"skills-route.js","sourceRoot":"","sources":["../../../api/routes/skills-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,sEAAmD;AACnD,2CAAsD;AACtD,oEAAiD;AACjD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAElG,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAC1E;QACE,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,IAAI,KAAK,EAAE;QACP,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrI;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrK;IAED,yBAAyB;AAC7B,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"}
--------------------------------------------------------------------------------
/public/src/components/card.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | function buildCard(width, height, bg) {
4 | return `
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | `;
16 | }
17 | exports.default = buildCard;
18 | //# sourceMappingURL=card.js.map
--------------------------------------------------------------------------------
/public/src/components/card.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../src/components/card.ts"],"names":[],"mappings":";;AAAA,SAAwB,SAAS,CAC7B,KAAa,EACb,MAAc,EACd,EAAU;IAEV,OAAO;uDAC4C,KAAK,aAAa,MAAM;;;;;;;;;0DASrB,KAAK,GAAC,EAAE,aAAa,MAAM,GAAC,EAAE,gDAAgD,EAAE;iBACzH,CAAA;AACjB,CAAC;AAjBD,4BAiBC"}
--------------------------------------------------------------------------------
/public/src/components/gradient-box.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | /**
4 | * Creates a gradient box.
5 | *
6 | * This method creates a box that has a gradient colour. The box contains the
7 | * logo of the framework, language, library, tool or IDE.
8 | *
9 | * It is important that the ID is not shared in the SVG between other gradient boxes
10 | * because if they share an ID they will use the same colour.
11 | *
12 | * @param id The id of the gradient box
13 | * @param fromColor The starting color in hexcode
14 | * @param toColor The final color of the gradient in hexcode
15 | * @param transX The x coordinate of the box
16 | * @param transY The y coordinate of the box
17 | * @returns A gradient box
18 | */
19 | function buildGradientBox(id, fromColor, toColor, transX, transY) {
20 | return `
21 |
22 |
23 |
24 |
25 |
26 |
27 | `;
28 | }
29 | exports.default = buildGradientBox;
30 | //# sourceMappingURL=gradient-box.js.map
--------------------------------------------------------------------------------
/public/src/components/gradient-box.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"gradient-box.js","sourceRoot":"","sources":["../../../src/components/gradient-box.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;GAeG;AACH,SAAwB,gBAAgB,CACpC,EAAU,EACV,SAAiB,EACjB,OAAe,EACf,MAAc,EACd,MAAc;IAEd,OAAO;qDAC0C,EAAE;mDACJ,SAAS;mDACT,OAAO;;;oCAGtB,EAAE,0BAA0B,MAAM,IAAI,MAAM,6BAA6B,EAAE,8DAA8D,EAAE;CAC9K,CAAA;AACD,CAAC;AAfD,mCAeC"}
--------------------------------------------------------------------------------
/public/src/data/frameworks.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../../src/data/frameworks.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/public/src/data/languages.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../src/data/languages.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/public/src/data/libraries.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const libraries = [
4 | {
5 | name: ['Babel', 'BabelJS'],
6 | colorFrom: '#FFF1AB',
7 | colorTo: '#FFD100',
8 | icon: `
9 |
10 |
11 | `,
12 | width: 45.287,
13 | height: 17.427,
14 | xOffset: 0,
15 | },
16 | {
17 | name: ['P5', 'P5js'],
18 | colorFrom: '#FFC7D6',
19 | colorTo: '#EE1F5E',
20 | icon: `
21 |
22 |
23 | `,
24 | width: 36,
25 | height: 16.64,
26 | xOffset: 0,
27 | },
28 | {
29 | name: ['Tensorflow'],
30 | colorFrom: '#FFCA57',
31 | colorTo: '#F06335',
32 | icon: `
33 |
34 |
35 | `,
36 | width: 36,
37 | height: 40.287,
38 | xOffset: 0,
39 | },
40 | {
41 | name: ['jQuery'],
42 | colorFrom: '#91DDEB',
43 | colorTo: '#0A67AC',
44 | icon: `
45 |
46 |
47 | `,
48 | width: 35.955,
49 | height: 34.631,
50 | xOffset: 0,
51 | },
52 | ];
53 | exports.default = libraries;
54 | //# sourceMappingURL=libraries.js.map
--------------------------------------------------------------------------------
/public/src/data/libraries.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/data/libraries.ts"],"names":[],"mappings":";;AAEA,MAAM,SAAS,GAAe;IAC1B;QACI,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;QAC1B,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,YAAY,CAAC;QACpB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,CAAC;KACb;CACJ,CAAA;AAED,kBAAe,SAAS,CAAA"}
--------------------------------------------------------------------------------
/public/src/data/software-ides.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const softwareIDEs = [
4 | {
5 | name: ['Linux', 'Tux'],
6 | colorFrom: '#FFF1AB',
7 | colorTo: '#FFD100',
8 | icon: `
9 |
10 |
11 | `,
12 | width: 30.857,
13 | height: 36,
14 | xOffset: 0,
15 | },
16 | {
17 | name: ['Windows'],
18 | colorFrom: '#0067b8',
19 | colorTo: '#006cac',
20 | icon: `
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | `,
30 | width: 30.857,
31 | height: 36,
32 | xOffset: -2,
33 | },
34 | {
35 | name: ['VSCode'],
36 | colorFrom: '#1F9CF0',
37 | colorTo: '#0065A9',
38 | icon: `
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | `,
96 | width: 35.995,
97 | height: 25.89,
98 | xOffset: 0,
99 | },
100 | ];
101 | exports.default = softwareIDEs;
102 | //# sourceMappingURL=software-ides.js.map
--------------------------------------------------------------------------------
/public/src/data/software-ides.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"software-ides.js","sourceRoot":"","sources":["../../../src/data/software-ides.ts"],"names":[],"mappings":";;AAEA,MAAM,YAAY,GAAe;IAC7B;QACI,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;;;;;;;SASL;QACD,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,CAAC;KACd;IAED;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAyDL;QACD,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,CAAC;KACb;CACJ,CAAA;AAED,kBAAe,YAAY,CAAA"}
--------------------------------------------------------------------------------
/public/src/data/themes.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../../src/data/themes.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/public/src/data/tools.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/data/tools.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/public/src/fetchers/user-stats-fetcher.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const node_fetch_1 = __importDefault(require("node-fetch"));
7 | async function getGithubUserStats(token, username) {
8 | const headers = {
9 | Authorization: `bearer ${token}`,
10 | };
11 | const body = {
12 | query: `
13 | query {
14 | user(login: "${username}") {
15 | name
16 | login
17 | contributionsCollection {
18 | totalCommitContributions
19 | restrictedContributionsCount
20 | contributionCalendar {
21 | totalContributions
22 | }
23 | }
24 | repositoriesContributedTo(first: 1, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) {
25 | totalCount
26 | }
27 | followers {
28 | totalCount
29 | }
30 | repositories(first: 100, ownerAffiliations: OWNER, orderBy: {direction: DESC, field: STARGAZERS}) {
31 | totalCount
32 | nodes {
33 | stargazers {
34 | totalCount
35 | }
36 | }
37 | }
38 | }
39 | }
40 | `,
41 | };
42 | const response = await node_fetch_1.default('https://api.github.com/graphql', {
43 | method: 'POST',
44 | body: JSON.stringify(body),
45 | headers: headers,
46 | });
47 | return await response.json();
48 | }
49 | exports.default = getGithubUserStats;
50 | //# sourceMappingURL=user-stats-fetcher.js.map
--------------------------------------------------------------------------------
/public/src/fetchers/user-stats-fetcher.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"user-stats-fetcher.js","sourceRoot":"","sources":["../../../src/fetchers/user-stats-fetcher.ts"],"names":[],"mappings":";;;;;AAAA,4DAA8B;AAGf,KAAK,UAAU,kBAAkB,CAC5C,KAAyB,EACzB,QAAgB;IAGhB,MAAM,OAAO,GAAG;QACZ,aAAa,EAAE,UAAU,KAAK,EAAE;KACnC,CAAA;IAED,MAAM,IAAI,GAAG;QACT,KAAK,EAAE;;2BAEY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;WA0BxB;KACN,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAK,CAAC,gCAAgC,EAAE;QAC3D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,OAAO;KACnB,CAAC,CAAA;IAEF,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;AAChC,CAAC;AAhDD,qCAgDC"}
--------------------------------------------------------------------------------
/public/src/interfaces/Contributions.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Contributions.js.map
--------------------------------------------------------------------------------
/public/src/interfaces/Contributions.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Contributions.js","sourceRoot":"","sources":["../../../src/interfaces/Contributions.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/public/src/interfaces/GithubUser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=GithubUser.js.map
--------------------------------------------------------------------------------
/public/src/interfaces/GithubUser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GithubUser.js","sourceRoot":"","sources":["../../../src/interfaces/GithubUser.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/public/src/interfaces/IconData.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=IconData.js.map
--------------------------------------------------------------------------------
/public/src/interfaces/IconData.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"IconData.js","sourceRoot":"","sources":["../../../src/interfaces/IconData.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/public/src/interfaces/Repositories.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Repositories.js.map
--------------------------------------------------------------------------------
/public/src/interfaces/Repositories.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Repositories.js","sourceRoot":"","sources":["../../../src/interfaces/Repositories.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/public/src/interfaces/Theme.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Theme.js.map
--------------------------------------------------------------------------------
/public/src/interfaces/Theme.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Theme.js","sourceRoot":"","sources":["../../../src/interfaces/Theme.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/public/src/utils.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | exports.getTheme = exports.findData = exports.requestInBase64 = exports.getBoolean = exports.isValidHexColor = void 0;
7 | const axios_1 = __importDefault(require("axios"));
8 | function isValidHexColor(hexColor) {
9 | return new RegExp(/^([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4})$/).test(hexColor);
10 | }
11 | exports.isValidHexColor = isValidHexColor;
12 | function getBoolean(str) {
13 | return str.toLowerCase() === 'true';
14 | }
15 | exports.getBoolean = getBoolean;
16 | async function requestInBase64(url) {
17 | const response = await axios_1.default.get(url, {
18 | responseType: 'arraybuffer',
19 | });
20 | return Buffer.from(response.data, 'binary').toString('base64');
21 | }
22 | exports.requestInBase64 = requestInBase64;
23 | function findData(data, name) {
24 | return data.filter(function (data) {
25 | return data.name
26 | .map((data) => data.toUpperCase())
27 | .includes(name.toUpperCase());
28 | })[0];
29 | }
30 | exports.findData = findData;
31 | function getTheme(themes, themeName) {
32 | return themes.filter(function (themes) {
33 | return themes.name
34 | .map((theme) => theme.toUpperCase())
35 | .includes(themeName.toUpperCase());
36 | })[0];
37 | }
38 | exports.getTheme = getTheme;
39 | //# sourceMappingURL=utils.js.map
--------------------------------------------------------------------------------
/public/src/utils.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAIzB,SAAgB,eAAe,CAAC,QAAgB;IAC5C,OAAO,IAAI,MAAM,CACb,iEAAiE,CACpE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACpB,CAAC;AAJD,0CAIC;AAED,SAAgB,UAAU,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;AACvC,CAAC;AAFD,gCAEC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAW;IAC7C,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;QAClC,YAAY,EAAE,aAAa;KAC9B,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAClE,CAAC;AALD,0CAKC;AAED,SAAgB,QAAQ,CAAC,IAAgB,EAAE,IAAY;IACnD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;QAC7B,OAAO,IAAI,CAAC,IAAI;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACT,CAAC;AAND,4BAMC;AAED,SAAgB,QAAQ,CAAC,MAAe,EAAE,SAAiB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,MAAM;QACjC,OAAO,MAAM,CAAC,IAAI;aACb,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACnC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACT,CAAC;AAND,4BAMC"}
--------------------------------------------------------------------------------
/public/src/widgets/error.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | function errorWidget(widgetName, nameX, reason, reasonX) {
4 | return `
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | Error… Oops!
31 |
32 |
34 | There was an error trying to
35 | load the
36 | ${widgetName}
37 | widget.
38 |
39 |
40 | ${reason}
41 |
42 |
43 |
44 | `;
45 | }
46 | exports.default = errorWidget;
47 | //# sourceMappingURL=error.js.map
--------------------------------------------------------------------------------
/public/src/widgets/error.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/widgets/error.ts"],"names":[],"mappings":";;AAAA,SAAwB,WAAW,CAC/B,UAAkB,EAClB,KAAa,EACb,MAAc,EACd,OAAe;IAEf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA+Ba,KAAK;4FAC+D,UAAU;;;;wBAI9E,OAAO,WAAW,MAAM;;;;WAIrC,CAAA;AACX,CAAC;AA/CD,8BA+CC"}
--------------------------------------------------------------------------------
/public/src/widgets/profile.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | require('dotenv').config();
7 | const axios_1 = __importDefault(require("axios"));
8 | const utils_1 = require("../utils");
9 | const error_1 = __importDefault(require("./error"));
10 | const card_1 = __importDefault(require("../components/card"));
11 | const user_stats_fetcher_1 = __importDefault(require("../fetchers/user-stats-fetcher"));
12 | const themes_1 = __importDefault(require("../data/themes"));
13 | async function profileWidget(username, data, themeString) {
14 | // Set the theme
15 | let theme = utils_1.getTheme(themes_1.default, 'default');
16 | if (themeString) {
17 | theme = utils_1.getTheme(themes_1.default, themeString);
18 | }
19 | if (!theme) {
20 | theme = utils_1.getTheme(themes_1.default, 'default');
21 | }
22 | const dataOptions = data.split(',');
23 | // Return error if dataOptions argument is undefined
24 | if (dataOptions === undefined) {
25 | return new Promise((res) => {
26 | res(error_1.default('Profile', '-25%', 'Data option is missing!', '-25%'));
27 | });
28 | }
29 | // Return error if more than 4 dataOptions were supplied
30 | if (dataOptions.length > 4) {
31 | return new Promise((res) => {
32 | res(error_1.default('Profile', '-25%', `Can't have more than 4 data-options!`, '-40%'));
33 | });
34 | }
35 | const width = 842;
36 | const height = 165;
37 | async function getDataOptions() {
38 | let dataBoxes = '';
39 | const profile = await user_stats_fetcher_1.default(process.env.GITHUB_TOKEN, username);
40 | const stargazers = [];
41 | profile.data.user.repositories.nodes.forEach((repo, index) => {
42 | stargazers[index] = repo.stargazers.totalCount;
43 | });
44 | for (let i = 0; i < dataOptions.length; i++) {
45 | switch (dataOptions[i].toLowerCase()) {
46 | case 'followers':
47 | addDataBox('followers', i, profile.data.user.followers.totalCount, '#CAF0FF', '#00C6FF', 'M3.625,9.5A2.417,2.417,0,1,0,1.208,7.084,2.419,2.419,0,0,0,3.625,9.5Zm16.919,0a2.417,2.417,0,1,0-2.417-2.417A2.419,2.419,0,0,0,20.544,9.5Zm1.208,1.208H19.336a2.41,2.41,0,0,0-1.7.7,5.524,5.524,0,0,1,2.836,4.132h2.493a1.207,1.207,0,0,0,1.208-1.208V13.126A2.419,2.419,0,0,0,21.753,10.709Zm-9.668,0a4.23,4.23,0,1,0-4.23-4.23A4.228,4.228,0,0,0,12.085,10.709Zm2.9,1.208h-.313a5.84,5.84,0,0,1-5.174,0H9.185a4.352,4.352,0,0,0-4.351,4.351v1.088a1.813,1.813,0,0,0,1.813,1.813H17.523a1.813,1.813,0,0,0,1.813-1.813V16.269A4.352,4.352,0,0,0,14.985,11.918Zm-8.448-.506a2.41,2.41,0,0,0-1.7-.7H2.417A2.419,2.419,0,0,0,0,13.126v1.208a1.207,1.207,0,0,0,1.208,1.208H3.7A5.538,5.538,0,0,1,6.537,11.412Z');
48 | break;
49 | case 'repositories':
50 | addDataBox('repositories', i, profile.data.user.repositories.totalCount, '#FFCEE4', '#FF0774', 'M7.106,3A2.106,2.106,0,0,0,5,5.106V17.74a.7.7,0,0,0,.207.5,2.026,2.026,0,0,0,1.9,1.608h.7v-1.4h-.7a.7.7,0,0,1,0-1.4H17.634a1.4,1.4,0,0,0,1.4-1.4V4.4a1.4,1.4,0,0,0-1.4-1.4Zm.7,2.106h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,5.106Zm0,3.51h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,8.615Zm0,3.51h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,12.125Zm1.4,6.317v3.51l2.106-1.4,2.106,1.4v-3.51Zm5.615,0v1.4h3.51a.7.7,0,0,0,0-1.4Z');
51 | break;
52 | case 'stars':
53 | addDataBox('stars', i, stargazers.reduce((a, b) => a + b, 0), '#FFEFCD', '#FFA100', 'M9.6.608,7.369,5.131l-4.992.728a1.094,1.094,0,0,0-.6,1.865l3.611,3.519L4.53,16.215a1.093,1.093,0,0,0,1.585,1.151l4.465-2.347,4.465,2.347a1.094,1.094,0,0,0,1.585-1.151l-.854-4.971,3.611-3.519a1.094,1.094,0,0,0-.6-1.865l-4.992-.728L11.561.608A1.094,1.094,0,0,0,9.6.608Z');
54 | break;
55 | case 'contributions':
56 | case 'commits':
57 | addDataBox('contributions', i, profile.data.user.contributionsCollection
58 | .contributionCalendar.totalContributions, '#C5FFD9', '#00F14F', `
59 |
60 |
61 | `);
62 | break;
63 | // Incorrect data item found
64 | default:
65 | return new Promise((res) => {
66 | res(error_1.default('Profile', '-25%', `Invalid data item found!`, '-26%'));
67 | });
68 | }
69 | }
70 | // Add a box with a data counter
71 | function addDataBox(name, index, count, color1, color2, svg) {
72 | dataBoxes += `
73 |
74 |
75 | ${count}
76 |
77 | ${name !== 'commits' && name !== 'contributions'
78 | ? ` `
79 | : svg}
80 | `;
81 | }
82 | return dataBoxes;
83 | }
84 | try {
85 | const dataBoxes = await getDataOptions();
86 | // If we receive a Promise, we return that
87 | if (typeof dataBoxes != 'string') {
88 | return dataBoxes;
89 | }
90 | // Create the request
91 | const response = await axios_1.default.get(`https://api.github.com/users/${username}`);
92 | // Grab the avatar
93 | const avatar = await utils_1.requestInBase64(response.data.avatar_url);
94 | return `
95 |
96 |
97 |
98 |
99 |
100 | ${card_1.default(width, height, theme.background)}
101 |
102 |
103 | ${response.data.name === null
104 | ? response.data.login
105 | : response.data.name}
106 | GitHub.com/${response.data.login}
107 |
108 | ${dataBoxes}
109 |
110 |
111 | `;
112 | }
113 | catch (error) {
114 | return new Promise((res) => {
115 | res(error_1.default('Profile', '-25%', 'GitHub API-call error!', '-24%'));
116 | });
117 | }
118 | }
119 | exports.default = profileWidget;
120 | //# sourceMappingURL=profile.js.map
--------------------------------------------------------------------------------
/public/src/widgets/profile.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/widgets/profile.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/public/src/widgets/skills.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const card_1 = __importDefault(require("../components/card"));
7 | const gradient_box_1 = __importDefault(require("../components/gradient-box"));
8 | const utils_1 = require("../utils");
9 | const languages_1 = __importDefault(require("../data/languages"));
10 | const frameworks_1 = __importDefault(require("../data/frameworks"));
11 | const libraries_1 = __importDefault(require("../data/libraries"));
12 | const tools_1 = __importDefault(require("../data/tools"));
13 | const software_ides_1 = __importDefault(require("../data/software-ides"));
14 | const themes_1 = __importDefault(require("../data/themes"));
15 | /**
16 | * Builds the skill widget page
17 | *
18 | * This method builds a SVG file that contains all the languages, frameworks,
19 | * libraries, tools and other software that can be found in the data folder and
20 | * are passed by the calling method.
21 | *
22 | * @param languagesString The string with all the languages
23 | * @param frameworksString The string with all the frameworks
24 | * @param librariesString The string with all the libraries
25 | * @param toolsString The string with all the tools
26 | * @param softwareString The string with all the software
27 | * @param includeNames The boolean that determines whether or not to include names
28 | * @returns The SVG with all the skills that were passed.
29 | */
30 | function skillsWidget(languagesString, frameworksString, librariesString, toolsString, softwareString, includeNames, themeString) {
31 | const BASE_HEIGHT = 125;
32 | const BASE_WIDTH = 812;
33 | const FIRST_ROW = 90;
34 | const ROW = 114;
35 | const PAD = 60;
36 | if (!languagesString) {
37 | languagesString = 'undefined';
38 | }
39 | if (!frameworksString) {
40 | frameworksString = 'undefined';
41 | }
42 | if (!librariesString) {
43 | librariesString = 'undefined';
44 | }
45 | if (!toolsString) {
46 | toolsString = 'undefined';
47 | }
48 | if (!softwareString) {
49 | softwareString = 'undefined';
50 | }
51 | // Set the theme
52 | let theme = utils_1.getTheme(themes_1.default, 'default');
53 | if (themeString) {
54 | theme = utils_1.getTheme(themes_1.default, themeString);
55 | }
56 | if (!theme) {
57 | theme = utils_1.getTheme(themes_1.default, 'default');
58 | }
59 | const languageList = languagesString.split(',');
60 | const frameworkList = frameworksString.split(',');
61 | const libraryList = librariesString.split(',');
62 | const toolsList = toolsString.split(',');
63 | const softwareList = softwareString.split(',');
64 | const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1;
65 | const languagesTitleHeight = FIRST_ROW;
66 | const rowHeightFrameworks = Math.round((frameworkList.length - 0.1) / 7) > 1 ? Math.round((frameworkList.length - 0.1) / 7) : 1;
67 | const frameworkTitleHeight = languagesTitleHeight
68 | + ((languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) * PAD)
69 | + ((languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) * ROW)
70 | + (includeNames && (languageList.length > 1 || languageList[0] !== 'undefined') ? (rowHeightFrameworks) * 25 : 0);
71 | const rowHeightLibraries = Math.round((libraryList.length - 0.1) / 7) > 1 ? Math.round((libraryList.length - 0.1) / 7) : 1;
72 | const libraryTitleHeight = frameworkTitleHeight
73 | + ((frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) * PAD)
74 | + ((frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) * ROW)
75 | + (includeNames && (frameworkList.length > 1 || frameworkList[0] !== 'undefined') ? (rowHeightLibraries) * 25 : 0);
76 | const rowHeightTools = Math.round((toolsList.length - 0.1) / 7) > 1 ? Math.round((toolsList.length - 0.1) / 7) : 1;
77 | const toolsTitleHeight = libraryTitleHeight
78 | + ((libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) * PAD)
79 | + ((libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) * ROW)
80 | + (includeNames && (libraryList.length > 1 || libraryList[0] !== 'undefined') ? (rowHeightTools) * 25 : 0);
81 | const rowHeightSoftware = Math.round((softwareList.length - 0.1) / 7) > 1 ? Math.round((softwareList.length - 0.1) / 7) : 1;
82 | const softwareTitleHeight = toolsTitleHeight
83 | + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD)
84 | + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW)
85 | + (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0);
86 | // Set the size of the main SVG container
87 | const width = BASE_WIDTH;
88 | const height = BASE_HEIGHT +
89 | (ROW * ((languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) +
90 | (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) +
91 | (libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) +
92 | (toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) +
93 | (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0)))
94 | + (PAD * (1 +
95 | (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) +
96 | (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) +
97 | (libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) +
98 | (toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) +
99 | (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0)))
100 | // Add space for the names if true.
101 | + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length + softwareList.length) - 0.1) / 7) + 1) * 25 : 0);
102 | /**
103 | * Builds the gradient boxes and sets the names.
104 | * @param listToBuild The list of items to build the boxes with
105 | * @param type Indicates which type of list it is (languages, frameworks, libraries, tools, etc.). It is important that the type is not used twice.
106 | * @returns The gradient boxes with the icons
107 | */
108 | function getBoxes(listToBuild, type) {
109 | let boxes = '';
110 | for (let i = 0; i < listToBuild.length; i++) {
111 | // Check the data and add the first result that isn't defined.
112 | // It checks the languages first, then the frameworks, and then the libraries.
113 | let foundData = utils_1.findData(languages_1.default, listToBuild[i]) || utils_1.findData(frameworks_1.default, listToBuild[i]) || utils_1.findData(libraries_1.default, listToBuild[i]) || utils_1.findData(tools_1.default, listToBuild[i]) || utils_1.findData(software_ides_1.default, listToBuild[i]);
114 | if (foundData === undefined) {
115 | foundData = {
116 | name: [''],
117 | colorFrom: '#FFFFFF',
118 | colorTo: '#808080',
119 | icon: 'undefined',
120 | width: -1,
121 | height: -1,
122 | xOffset: 0,
123 | };
124 | }
125 | const row = Math.floor(i / 7);
126 | const transX = 102 * (i - row * 7);
127 | const transY = ROW * row + (includeNames && row > 0 ? 25 * row : 0);
128 | boxes += gradient_box_1.default(
129 | // Combine the index and the type number.
130 | (i * Math.pow(10, Math.floor(Math.log10(type)) + 1) + type), foundData.colorFrom, foundData.colorTo, transX, transY);
131 | boxes +=
132 | foundData.icon != 'Undefined'
133 | ? `` +
134 | foundData.icon +
135 | ' '
136 | : '';
137 | if (includeNames) {
138 | boxes += ``;
145 | }
146 | }
147 | return boxes;
148 | }
149 | return `
150 |
152 | ${card_1.default(width, height, theme.background)}
153 |
173 |
174 | ${getBoxes(languageList, 1)}
175 |
176 |
177 | ${getBoxes(frameworkList, 2)}
178 |
179 |
180 | ${getBoxes(libraryList, 3)}
181 |
182 |
183 | ${getBoxes(toolsList, 4)}
184 |
185 |
186 | ${getBoxes(softwareList, 5)}
187 |
188 |
189 |
190 | `;
191 | }
192 | exports.default = skillsWidget;
193 | //# sourceMappingURL=skills.js.map
--------------------------------------------------------------------------------
/public/src/widgets/skills.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/widgets/skills.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/src/components/card.ts:
--------------------------------------------------------------------------------
1 | export default function buildCard(
2 | width: number,
3 | height: number,
4 | bg: string
5 | ): string {
6 | return `
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | `
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/gradient-box.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Creates a gradient box.
3 | *
4 | * This method creates a box that has a gradient colour. The box contains the
5 | * logo of the framework, language, library, tool or IDE.
6 | *
7 | * It is important that the ID is not shared in the SVG between other gradient boxes
8 | * because if they share an ID they will use the same colour.
9 | *
10 | * @param id The id of the gradient box
11 | * @param fromColor The starting color in hexcode
12 | * @param toColor The final color of the gradient in hexcode
13 | * @param transX The x coordinate of the box
14 | * @param transY The y coordinate of the box
15 | * @returns A gradient box
16 | */
17 | export default function buildGradientBox(
18 | id: number,
19 | fromColor: string,
20 | toColor: string,
21 | transX: number,
22 | transY: number
23 | ): string {
24 | return `
25 |
26 |
27 |
28 |
29 |
30 |
31 | `
32 | }
33 |
--------------------------------------------------------------------------------
/src/data/libraries.ts:
--------------------------------------------------------------------------------
1 | import { IconData } from '../interfaces/IconData'
2 |
3 | const libraries: IconData[] = [
4 | {
5 | name: ['Babel', 'BabelJS'],
6 | colorFrom: '#FFF1AB',
7 | colorTo: '#FFD100',
8 | icon: `
9 |
10 |
11 | `,
12 | width: 45.287,
13 | height: 17.427,
14 | xOffset: 0,
15 | },
16 | {
17 | name: ['P5', 'P5js'],
18 | colorFrom: '#FFC7D6',
19 | colorTo: '#EE1F5E',
20 | icon: `
21 |
22 |
23 | `,
24 | width: 36,
25 | height: 16.64,
26 | xOffset: 0,
27 | },
28 | {
29 | name: ['Tensorflow'],
30 | colorFrom: '#FFCA57',
31 | colorTo: '#F06335',
32 | icon: `
33 |
34 |
35 | `,
36 | width: 36,
37 | height: 40.287,
38 | xOffset: 0,
39 | },
40 | {
41 | name: ['jQuery'],
42 | colorFrom: '#91DDEB',
43 | colorTo: '#0A67AC',
44 | icon: `
45 |
46 |
47 | `,
48 | width: 35.955,
49 | height: 34.631,
50 | xOffset: 0,
51 | },
52 | ]
53 |
54 | export default libraries
55 |
--------------------------------------------------------------------------------
/src/data/software-ides.ts:
--------------------------------------------------------------------------------
1 | import { IconData } from '../interfaces/IconData'
2 |
3 | const softwareIDEs: IconData[] = [
4 | {
5 | name: ['Linux', 'Tux'],
6 | colorFrom: '#FFF1AB',
7 | colorTo: '#FFD100',
8 | icon: `
9 |
10 |
11 | `,
12 | width: 30.857,
13 | height: 36,
14 | xOffset: 0,
15 | },
16 | {
17 | name: ['Windows'],
18 | colorFrom: '#0067b8',
19 | colorTo: '#006cac',
20 | icon: `
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | `,
30 | width: 30.857,
31 | height: 36,
32 | xOffset: -2,
33 | },
34 |
35 | {
36 | name: ['VSCode'],
37 | colorFrom: '#1F9CF0',
38 | colorTo: '#0065A9',
39 | icon: `
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 | `,
97 | width: 35.995,
98 | height: 25.89,
99 | xOffset: 0,
100 | },
101 | ]
102 |
103 | export default softwareIDEs
104 |
--------------------------------------------------------------------------------
/src/fetchers/user-stats-fetcher.ts:
--------------------------------------------------------------------------------
1 | import fetch from 'node-fetch'
2 | import GithubUserRequest from '../interfaces/GithubUser'
3 |
4 | export default async function getGithubUserStats(
5 | token: string | undefined,
6 | username: string
7 | ): Promise {
8 |
9 | const headers = {
10 | Authorization: `bearer ${token}`,
11 | }
12 |
13 | const body = {
14 | query: `
15 | query {
16 | user(login: "${username}") {
17 | name
18 | login
19 | contributionsCollection {
20 | totalCommitContributions
21 | restrictedContributionsCount
22 | contributionCalendar {
23 | totalContributions
24 | }
25 | }
26 | repositoriesContributedTo(first: 1, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) {
27 | totalCount
28 | }
29 | followers {
30 | totalCount
31 | }
32 | repositories(first: 100, ownerAffiliations: OWNER, orderBy: {direction: DESC, field: STARGAZERS}) {
33 | totalCount
34 | nodes {
35 | stargazers {
36 | totalCount
37 | }
38 | }
39 | }
40 | }
41 | }
42 | `,
43 | }
44 |
45 | const response = await fetch('https://api.github.com/graphql', {
46 | method: 'POST',
47 | body: JSON.stringify(body),
48 | headers: headers,
49 | })
50 |
51 | return await response.json()
52 | }
53 |
--------------------------------------------------------------------------------
/src/interfaces/Contributions.ts:
--------------------------------------------------------------------------------
1 | export interface ContributionsCollection {
2 | totalCommitContributions: number
3 | restrictedContributionsCount: number
4 | contributionCalendar: ContributionCalendar
5 | }
6 |
7 | export interface ContributionCalendar {
8 | totalContributions: number
9 | }
10 |
11 | export interface ContributedRepositories {
12 | repositoriesContributedTo: number
13 | }
14 |
--------------------------------------------------------------------------------
/src/interfaces/GithubUser.ts:
--------------------------------------------------------------------------------
1 | import { ContributionsCollection, ContributedRepositories } from './Contributions'
2 | import { Repositories } from './Repositories'
3 |
4 | export default interface GithubUserRequest {
5 | data: GithubUserData
6 | }
7 |
8 | export interface GithubUserData {
9 | user: GithubUser
10 | }
11 |
12 | export interface GithubUser {
13 | name: string
14 | login: string
15 | contributionsCollection: ContributionsCollection
16 | repositoriesContributedTo: ContributedRepositories
17 | followers: Followers
18 | repositories: Repositories
19 | }
20 |
21 | export interface Followers {
22 | totalCount: number
23 | }
24 |
--------------------------------------------------------------------------------
/src/interfaces/IconData.ts:
--------------------------------------------------------------------------------
1 | export interface IconData {
2 | name: Array
3 | colorFrom: string
4 | colorTo: string
5 | icon: string
6 | width: number
7 | height: number
8 | xOffset: number
9 | }
10 |
--------------------------------------------------------------------------------
/src/interfaces/Repositories.ts:
--------------------------------------------------------------------------------
1 | export interface Repositories {
2 | totalCount: number
3 | nodes: Repository[]
4 | }
5 |
6 | export interface Repository {
7 | stargazers: Stargazers
8 | }
9 |
10 | export interface Stargazers {
11 | totalCount: number
12 | }
13 |
--------------------------------------------------------------------------------
/src/interfaces/Theme.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * The theme interface.
3 | *
4 | * The interface for defining the themes. Currently it only holds the name of the theme and
5 | * the background color of the SVG. Later this will be expanded to support the title text
6 | * colors as well.
7 | */
8 | export interface Theme {
9 | name: Array
10 | background: string
11 | title: string,
12 | subtitle: string
13 | }
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import { IconData } from './interfaces/IconData'
3 | import { Theme } from './interfaces/Theme'
4 |
5 | export function isValidHexColor(hexColor: string): boolean {
6 | return new RegExp(
7 | /^([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4})$/
8 | ).test(hexColor)
9 | }
10 |
11 | export function getBoolean(str: string): boolean {
12 | return str.toLowerCase() === 'true'
13 | }
14 |
15 | export async function requestInBase64(url: string): Promise {
16 | const response = await axios.get(url, {
17 | responseType: 'arraybuffer',
18 | })
19 | return Buffer.from(response.data, 'binary').toString('base64')
20 | }
21 |
22 | export function findData(data: IconData[], name: string): IconData {
23 | return data.filter(function (data) {
24 | return data.name
25 | .map((data) => data.toUpperCase())
26 | .includes(name.toUpperCase())
27 | })[0]
28 | }
29 |
30 | export function getTheme(themes: Theme[], themeName: string): Theme {
31 | return themes.filter(function (themes) {
32 | return themes.name
33 | .map((theme) => theme.toUpperCase())
34 | .includes(themeName.toUpperCase())
35 | })[0]
36 | }
--------------------------------------------------------------------------------
/src/widgets/error.ts:
--------------------------------------------------------------------------------
1 | export default function errorWidget(
2 | widgetName: string,
3 | nameX: string,
4 | reason: string,
5 | reasonX: string
6 | ): string {
7 | return `
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | Error… Oops!
34 |
35 |
37 | There was an error trying to
38 | load the
39 | ${widgetName}
40 | widget.
41 |
42 |
43 | ${reason}
44 |
45 |
46 |
47 | `
48 | }
49 |
--------------------------------------------------------------------------------
/src/widgets/profile.ts:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 |
3 | import axios from 'axios'
4 | import { getTheme, requestInBase64 } from '../utils'
5 | import errorWidget from './error'
6 | import buildCard from '../components/card'
7 | import GithubUserRequest from '../interfaces/GithubUser'
8 | import getGithubUserStats from '../fetchers/user-stats-fetcher'
9 | import { Repository } from '../interfaces/Repositories'
10 | import { Theme } from "../interfaces/Theme";
11 | import themes from '../data/themes'
12 |
13 | export default async function profileWidget(
14 | username: string,
15 | data: string,
16 | themeString?: string
17 | ): Promise {
18 |
19 |
20 | // Set the theme
21 | let theme: Theme = getTheme(themes, 'default')
22 | if (themeString) {
23 | theme = getTheme(themes, themeString)
24 | }
25 | if (!theme) {
26 | theme = getTheme(themes, 'default')
27 | }
28 |
29 | const dataOptions: Array = data.split(',')
30 |
31 | // Return error if dataOptions argument is undefined
32 | if (dataOptions === undefined) {
33 | return new Promise((res) => {
34 | res(
35 | errorWidget(
36 | 'Profile',
37 | '-25%',
38 | 'Data option is missing!',
39 | '-25%'
40 | )
41 | )
42 | })
43 | }
44 |
45 | // Return error if more than 4 dataOptions were supplied
46 | if (dataOptions.length > 4) {
47 | return new Promise((res) => {
48 | res(
49 | errorWidget(
50 | 'Profile',
51 | '-25%',
52 | `Can't have more than 4 data-options!`,
53 | '-40%'
54 | )
55 | )
56 | })
57 | }
58 |
59 | const width = 842
60 | const height = 165
61 |
62 | async function getDataOptions(): Promise {
63 | let dataBoxes = ''
64 |
65 | const profile: GithubUserRequest = await getGithubUserStats(
66 | process.env.GITHUB_TOKEN,
67 | username
68 | )
69 |
70 | const stargazers: number[] = []
71 | profile.data.user.repositories.nodes.forEach(
72 | (repo: Repository, index) => {
73 | stargazers[index] = repo.stargazers.totalCount
74 | }
75 | )
76 |
77 | for (let i = 0; i < dataOptions.length; i++) {
78 | switch (dataOptions[i].toLowerCase()) {
79 | case 'followers':
80 | addDataBox(
81 | 'followers',
82 | i,
83 | profile.data.user.followers.totalCount,
84 | '#CAF0FF',
85 | '#00C6FF',
86 | 'M3.625,9.5A2.417,2.417,0,1,0,1.208,7.084,2.419,2.419,0,0,0,3.625,9.5Zm16.919,0a2.417,2.417,0,1,0-2.417-2.417A2.419,2.419,0,0,0,20.544,9.5Zm1.208,1.208H19.336a2.41,2.41,0,0,0-1.7.7,5.524,5.524,0,0,1,2.836,4.132h2.493a1.207,1.207,0,0,0,1.208-1.208V13.126A2.419,2.419,0,0,0,21.753,10.709Zm-9.668,0a4.23,4.23,0,1,0-4.23-4.23A4.228,4.228,0,0,0,12.085,10.709Zm2.9,1.208h-.313a5.84,5.84,0,0,1-5.174,0H9.185a4.352,4.352,0,0,0-4.351,4.351v1.088a1.813,1.813,0,0,0,1.813,1.813H17.523a1.813,1.813,0,0,0,1.813-1.813V16.269A4.352,4.352,0,0,0,14.985,11.918Zm-8.448-.506a2.41,2.41,0,0,0-1.7-.7H2.417A2.419,2.419,0,0,0,0,13.126v1.208a1.207,1.207,0,0,0,1.208,1.208H3.7A5.538,5.538,0,0,1,6.537,11.412Z'
87 | )
88 | break
89 | case 'repositories':
90 | addDataBox(
91 | 'repositories',
92 | i,
93 | profile.data.user.repositories.totalCount,
94 | '#FFCEE4',
95 | '#FF0774',
96 | 'M7.106,3A2.106,2.106,0,0,0,5,5.106V17.74a.7.7,0,0,0,.207.5,2.026,2.026,0,0,0,1.9,1.608h.7v-1.4h-.7a.7.7,0,0,1,0-1.4H17.634a1.4,1.4,0,0,0,1.4-1.4V4.4a1.4,1.4,0,0,0-1.4-1.4Zm.7,2.106h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,5.106Zm0,3.51h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,8.615Zm0,3.51h.7a.7.7,0,0,1,.7.7v.7a.7.7,0,0,1-.7.7h-.7a.7.7,0,0,1-.7-.7v-.7A.7.7,0,0,1,7.808,12.125Zm1.4,6.317v3.51l2.106-1.4,2.106,1.4v-3.51Zm5.615,0v1.4h3.51a.7.7,0,0,0,0-1.4Z'
97 | )
98 | break
99 | case 'stars':
100 | addDataBox(
101 | 'stars',
102 | i,
103 | stargazers.reduce((a, b) => a + b, 0),
104 | '#FFEFCD',
105 | '#FFA100',
106 | 'M9.6.608,7.369,5.131l-4.992.728a1.094,1.094,0,0,0-.6,1.865l3.611,3.519L4.53,16.215a1.093,1.093,0,0,0,1.585,1.151l4.465-2.347,4.465,2.347a1.094,1.094,0,0,0,1.585-1.151l-.854-4.971,3.611-3.519a1.094,1.094,0,0,0-.6-1.865l-4.992-.728L11.561.608A1.094,1.094,0,0,0,9.6.608Z'
107 | )
108 | break
109 | case 'contributions':
110 | case 'commits':
111 | addDataBox(
112 | 'contributions',
113 | i,
114 | profile.data.user.contributionsCollection
115 | .contributionCalendar.totalContributions,
116 | '#C5FFD9',
117 | '#00F14F',
118 | `
119 |
120 |
121 | `
122 | )
123 | break
124 |
125 | // Incorrect data item found
126 | default:
127 | return new Promise((res) => {
128 | res(
129 | errorWidget(
130 | 'Profile',
131 | '-25%',
132 | `Invalid data item found!`,
133 | '-26%'
134 | )
135 | )
136 | })
137 | }
138 | }
139 |
140 | // Add a box with a data counter
141 | function addDataBox(
142 | name: string,
143 | index: number,
144 | count: number,
145 | color1: string,
146 | color2: string,
147 | svg: string
148 | ) {
149 | dataBoxes += `
151 |
152 |
154 | ${count}
155 |
156 | ${name !== 'commits' && name !== 'contributions'
157 | ? ` `
159 | : svg
160 | }
161 | `
162 | }
163 | return dataBoxes
164 | }
165 |
166 | try {
167 | const dataBoxes = await getDataOptions()
168 |
169 | // If we receive a Promise, we return that
170 | if (typeof dataBoxes != 'string') {
171 | return dataBoxes
172 | }
173 |
174 | // Create the request
175 | const response = await axios.get(
176 | `https://api.github.com/users/${username}`
177 | )
178 |
179 | // Grab the avatar
180 | const avatar = await requestInBase64(response.data.avatar_url)
181 | return `
182 |
183 |
184 |
185 |
186 |
187 | ${buildCard(width, height, theme.background)}
188 |
189 |
190 | ${response.data.name === null
191 | ? response.data.login
192 | : response.data.name
193 | }
194 | GitHub.com/${response.data.login
195 | }
196 |
198 | ${dataBoxes}
199 |
200 |
201 | `
202 | } catch (error) {
203 | return new Promise((res) => {
204 | res(
205 | errorWidget('Profile', '-25%', 'GitHub API-call error!', '-24%')
206 | )
207 | })
208 | }
209 | }
210 |
--------------------------------------------------------------------------------
/src/widgets/skills.ts:
--------------------------------------------------------------------------------
1 | import buildCard from '../components/card'
2 | import buildGradientBox from '../components/gradient-box'
3 | import { findData, getTheme } from '../utils'
4 | import languageData from '../data/languages'
5 | import frameworks from '../data/frameworks'
6 | import libraries from '../data/libraries'
7 | import tools from '../data/tools'
8 | import softwareIDEs from '../data/software-ides'
9 | import { Theme } from "../interfaces/Theme";
10 | import themes from '../data/themes'
11 | /**
12 | * Builds the skill widget page
13 | *
14 | * This method builds a SVG file that contains all the languages, frameworks,
15 | * libraries, tools and other software that can be found in the data folder and
16 | * are passed by the calling method.
17 | *
18 | * @param languagesString The string with all the languages
19 | * @param frameworksString The string with all the frameworks
20 | * @param librariesString The string with all the libraries
21 | * @param toolsString The string with all the tools
22 | * @param softwareString The string with all the software
23 | * @param includeNames The boolean that determines whether or not to include names
24 | * @returns The SVG with all the skills that were passed.
25 | */
26 | export default function skillsWidget(
27 | languagesString?: string,
28 | frameworksString?: string,
29 | librariesString?: string,
30 | toolsString?: string,
31 | softwareString?: string,
32 | includeNames?: boolean,
33 | themeString?: string
34 |
35 | ): string {
36 |
37 | const BASE_HEIGHT = 125
38 | const BASE_WIDTH = 812
39 | const FIRST_ROW = 90
40 | const ROW = 114
41 | const PAD = 60
42 |
43 | if (!languagesString) {
44 | languagesString = 'undefined'
45 | }
46 | if (!frameworksString) {
47 | frameworksString = 'undefined'
48 | }
49 | if (!librariesString) {
50 | librariesString = 'undefined'
51 | }
52 | if (!toolsString) {
53 | toolsString = 'undefined'
54 | }
55 | if (!softwareString) {
56 | softwareString = 'undefined'
57 | }
58 |
59 | // Set the theme
60 | let theme : Theme = getTheme(themes, 'default')
61 | if (themeString) {
62 | theme = getTheme(themes, themeString)
63 | }
64 | if (!theme) {
65 | theme = getTheme(themes, 'default')
66 | }
67 |
68 | const languageList: string[] = languagesString.split(',')
69 | const frameworkList: string[] = frameworksString.split(',')
70 | const libraryList: string[] = librariesString.split(',')
71 | const toolsList: string[] = toolsString.split(',')
72 | const softwareList: string[] = softwareString.split(',')
73 |
74 | const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1
75 | const languagesTitleHeight = FIRST_ROW
76 |
77 | const rowHeightFrameworks = Math.round((frameworkList.length - 0.1) / 7) > 1 ? Math.round((frameworkList.length - 0.1) / 7) : 1
78 | const frameworkTitleHeight = languagesTitleHeight
79 | + ((languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) * PAD)
80 | + ((languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) * ROW)
81 | + (includeNames && (languageList.length > 1 || languageList[0] !== 'undefined') ? (rowHeightFrameworks) * 25 : 0)
82 |
83 | const rowHeightLibraries = Math.round((libraryList.length - 0.1) / 7) > 1 ? Math.round((libraryList.length - 0.1) / 7) : 1
84 | const libraryTitleHeight = frameworkTitleHeight
85 | + ((frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) * PAD)
86 | + ((frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) * ROW)
87 | + (includeNames && (frameworkList.length > 1 || frameworkList[0] !== 'undefined') ? (rowHeightLibraries) * 25 : 0)
88 |
89 | const rowHeightTools = Math.round((toolsList.length - 0.1) / 7) > 1 ? Math.round((toolsList.length - 0.1) / 7) : 1
90 | const toolsTitleHeight = libraryTitleHeight
91 | + ((libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) * PAD)
92 | + ((libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) * ROW)
93 | + (includeNames && (libraryList.length > 1 || libraryList[0] !== 'undefined') ? (rowHeightTools) * 25 : 0)
94 |
95 | const rowHeightSoftware = Math.round((softwareList.length - 0.1) / 7) > 1 ? Math.round((softwareList.length - 0.1) / 7) : 1
96 | const softwareTitleHeight = toolsTitleHeight
97 | + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD)
98 | + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW)
99 | + (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0)
100 |
101 | // Set the size of the main SVG container
102 | const width = BASE_WIDTH
103 | const height =
104 | BASE_HEIGHT +
105 | (ROW * (
106 | (languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) +
107 | (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) +
108 | (libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) +
109 | (toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) +
110 | (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0)
111 | ))
112 | + (PAD * ( 1 +
113 | (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) +
114 | (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) +
115 | (libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) +
116 | (toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) +
117 | (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0)
118 | ))
119 | // Add space for the names if true.
120 | + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length+ softwareList.length) - 0.1) / 7) + 1) * 25 : 0)
121 |
122 | /**
123 | * Builds the gradient boxes and sets the names.
124 | * @param listToBuild The list of items to build the boxes with
125 | * @param type Indicates which type of list it is (languages, frameworks, libraries, tools, etc.). It is important that the type is not used twice.
126 | * @returns The gradient boxes with the icons
127 | */
128 | function getBoxes(listToBuild:Array, type:number) {
129 | let boxes = ''
130 | for (let i = 0; i < listToBuild.length; i++) {
131 | // Check the data and add the first result that isn't defined.
132 | // It checks the languages first, then the frameworks, and then the libraries.
133 | let foundData = findData(languageData, listToBuild[i]) || findData(frameworks, listToBuild[i]) || findData(libraries, listToBuild[i]) || findData(tools, listToBuild[i]) || findData(softwareIDEs, listToBuild[i])
134 | if (foundData === undefined) {
135 | foundData = {
136 | name: [''],
137 | colorFrom: '#FFFFFF',
138 | colorTo: '#808080',
139 | icon: 'undefined',
140 | width: -1,
141 | height: -1,
142 | xOffset: 0,
143 | }
144 | }
145 |
146 | const row = Math.floor(i / 7)
147 | const transX = 102 * (i - row * 7)
148 | const transY = ROW * row + (includeNames && row > 0 ? 25 * row : 0)
149 |
150 | boxes += buildGradientBox(
151 | // Combine the index and the type number.
152 | (i * Math.pow(10, Math.floor(Math.log10(type)) + 1) + type),
153 | foundData.colorFrom,
154 | foundData.colorTo,
155 | transX,
156 | transY
157 | )
158 |
159 | boxes +=
160 | foundData.icon != 'Undefined'
161 | ? `` +
164 | foundData.icon +
165 | ' '
166 | : ''
167 |
168 | if (includeNames) {
169 | boxes += ``
180 | }
181 | }
182 | return boxes
183 | }
184 |
185 | return `
186 |
188 | ${buildCard(width, height, theme.background)}
189 |
209 |
210 | ${getBoxes(languageList, 1)}
211 |
212 |
213 | ${getBoxes(frameworkList, 2)}
214 |
215 |
216 | ${getBoxes(libraryList, 3)}
217 |
218 |
219 | ${getBoxes(toolsList, 4)}
220 |
221 |
222 | ${getBoxes(softwareList, 5)}
223 |
224 |
225 |
226 | `
227 | }
228 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2018",
4 | "module": "None",
5 | "moduleResolution": "Node",
6 | "lib": ["ESNext", "ESNext.AsyncIterable", "DOM"],
7 | "esModuleInterop": true,
8 | "allowJs": true,
9 | "outDir": "public",
10 | "sourceMap": true,
11 | "strict": true,
12 | "experimentalDecorators": true,
13 | "baseUrl": ".",
14 | "paths": {
15 | "~/*": ["./*"],
16 | "@/*": ["./*"]
17 | },
18 | "types": ["dotenv", "express", "node"]
19 | },
20 | "exclude": ["node_modules", "./public/**/*"],
21 | "include": ["api/**/*", "public/**/*"]
22 | }
23 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "builds": [
4 | {
5 | "src": "public/api/index.js",
6 | "use": "@vercel/node"
7 | }
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "/api/(.*)",
12 | "destination": "public/api/index.js"
13 | },
14 | {
15 | "source": "/(.+)",
16 | "destination": "public/api/index.js"
17 | }
18 | ],
19 | "redirects": [
20 | {
21 | "source": "/",
22 | "destination": "https://github.com/Jurredr/github-widgetbox"
23 | }
24 | ],
25 | "cleanUrls": true
26 | }
27 |
--------------------------------------------------------------------------------