├── _config.yml
├── .vscode
└── settings.json
├── README.md
├── .gitignore
├── .stylelintrc.json
├── package.json
├── .hintrc
├── .eslintrc.json
├── index.html
├── scripts
├── refactored.js
└── script.js
├── .github
└── workflows
│ └── linters.yml
└── css
└── style.css
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-time-machine
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "liveServer.settings.port": 5501
3 | }
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | 
4 |
5 | [live demo](https://oybekkayumov.github.io/Guess-My-Number/)
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | test.md
2 |
3 | node_modules/
4 |
5 | .vscode/*
6 | !.vscode/settings.json
7 | !.vscode/tasks.json
8 | !.vscode/launch.json
9 | !.vscode/extensions.json
10 | !.vscode/*.code-snippets
11 |
12 | # Local History for Visual Studio Code
13 | .history/
14 |
15 | # Built Visual Studio Code Extensions
16 | *.vsix
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"],
3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"],
4 | "rules": {
5 | "at-rule-no-unknown": null,
6 | "scss/at-rule-no-unknown": true,
7 | "csstree/validator": true
8 | },
9 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "**/*.js", "**/*.jsx"]
10 | }
11 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "babel-eslint": "^10.1.0",
4 | "eslint": "^7.32.0",
5 | "eslint-config-airbnb-base": "^14.2.1",
6 | "eslint-plugin-import": "^2.25.3",
7 | "hint": "^6.1.9",
8 | "stylelint": "^13.13.1",
9 | "stylelint-config-standard": "^21.0.0",
10 | "stylelint-csstree-validator": "^1.9.0",
11 | "stylelint-scss": "^3.21.0"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "connector": {
3 | "name": "local",
4 | "options": {
5 | "pattern": ["**", "!.git/**", "!node_modules/**"]
6 | }
7 | },
8 | "extends": ["development"],
9 | "formatters": ["stylish"],
10 | "hints": [
11 | "button-type",
12 | "disown-opener",
13 | "html-checker",
14 | "meta-charset-utf-8",
15 | "meta-viewport",
16 | "no-inline-styles:error"
17 | ]
18 | }
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true,
5 | "jest": true
6 | },
7 | "parser": "babel-eslint",
8 | "parserOptions": {
9 | "ecmaVersion": 2018,
10 | "sourceType": "module"
11 | },
12 | "extends": ["airbnb-base"],
13 | "rules": {
14 | "no-shadow": "off",
15 | "no-param-reassign": "off",
16 | "eol-last": "off",
17 | "import/extensions": [ 1, {
18 | "js": "always", "json": "always"
19 | }]
20 | },
21 | "ignorePatterns": [
22 | "dist/",
23 | "build/"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Guess My Number!
9 |
10 |
11 |
12 | Guess My Number!
13 | (Between 1 and 20)
14 |
15 | ?
16 |
17 |
18 |
19 |
23 |
24 | Start guessing...
25 | 💯 Score: 20
26 | 🚀 Highscore: 0
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/scripts/refactored.js:
--------------------------------------------------------------------------------
1 | let secretNumber = Math.trunc(Math.random() * 20) + 1;
2 | let score = 20;
3 | let highscore = 0;
4 |
5 | const displayMessage = function (message) {
6 | document.querySelector('.message').textContent = message;
7 | };
8 |
9 | document.querySelector('.check').addEventListener('click', () => {
10 | const guess = Number(document.querySelector('.guess').value);
11 |
12 | if (!guess) {
13 | // document.querySelector('.message').textContent = '⛔ No Number!';
14 | displayMessage('⛔ No Number!');
15 | } else if (guess === secretNumber) {
16 | // document.querySelector('.message').textContent = '🏆 Correct Number!';
17 | displayMessage('🏆 Correct Number!');
18 |
19 | document.querySelector('.number').textContent = secretNumber;
20 |
21 | document.querySelector('body').style.backgroundColor = '#60b347';
22 |
23 | document.querySelector('.number').style.width = '30rem';
24 |
25 | if (score > highscore) {
26 | highscore = score;
27 | document.querySelector('.highscore').textContent = highscore;
28 | }
29 | } else if (guess !== secretNumber) {
30 | if (score > 1) {
31 | displayMessage(guess > secretNumber ? '⬆ 👆 Too high!' : '⬇ 👇 Too low!');
32 | score -= 1;
33 | document.querySelector('.score').textContent = score;
34 | } else {
35 | displayMessage('💥 You lost the game!');
36 | document.querySelector('.score').textContent = 0;
37 | }
38 | }
39 | });
40 |
41 | document.querySelector('.again').addEventListener('click', () => {
42 | score = 20;
43 | secretNumber = Math.trunc(Math.random() * 20) + 1;
44 |
45 | // document.querySelector('.message').textContent = 'Start guessing...';
46 | displayMessage('Start guessing...');
47 | document.querySelector('.score').textContent = score;
48 | document.querySelector('.number').textContent = '?';
49 | document.querySelector('.guess').value = '';
50 |
51 | document.querySelector('body').style.backgroundColor = '#222';
52 |
53 | document.querySelector('.number').style.width = '15rem';
54 | });
55 |
--------------------------------------------------------------------------------
/scripts/script.js:
--------------------------------------------------------------------------------
1 | let secretNumber = Math.trunc(Math.random() * 20) + 1;
2 | let score = 20;
3 | let highscore = 0;
4 |
5 | document.querySelector('.check').addEventListener('click', () => {
6 | const guess = Number(document.querySelector('.guess').value);
7 |
8 | if (!guess) {
9 | document.querySelector('.message').textContent = '⛔ No Number!';
10 | } else if (guess === secretNumber) {
11 | document.querySelector('.message').textContent = '🏆 Correct Number!';
12 |
13 | document.querySelector('.number').textContent = secretNumber;
14 |
15 | document.querySelector('body').style.backgroundColor = '#60b347';
16 |
17 | document.querySelector('.number').style.width = '30rem';
18 |
19 | if (score > highscore) {
20 | highscore = score;
21 | document.querySelector('.highscore').textContent = highscore;
22 | }
23 | } else if (guess > secretNumber) {
24 | if (score > 1) {
25 | document.querySelector('.message').textContent = '⬆ 👆 Too high!';
26 | score -= 1;
27 | document.querySelector('.score').textContent = score;
28 | } else {
29 | document.querySelector('.message').textContent = '💥 You lost the game!';
30 | document.querySelector('.score').textContent = 0;
31 | }
32 | } else if (guess < secretNumber) {
33 | if (score > 1) {
34 | document.querySelector('.message').textContent = '⬇ 👇 Too low!';
35 | score -= 1;
36 | document.querySelector('.score').textContent = score;
37 | } else {
38 | document.querySelector('.message').textContent = '💥 You lost the game!';
39 | document.querySelector('.score').textContent = 0;
40 | }
41 | }
42 | });
43 |
44 | document.querySelector('.again').addEventListener('click', () => {
45 | score = 20;
46 | secretNumber = Math.trunc(Math.random() * 20) + 1;
47 |
48 | document.querySelector('.message').textContent = 'Start guessing...';
49 | document.querySelector('.score').textContent = score;
50 | document.querySelector('.number').textContent = '?';
51 | document.querySelector('.guess').value = '';
52 |
53 | document.querySelector('body').style.backgroundColor = '#222';
54 |
55 | document.querySelector('.number').style.width = '15rem';
56 | });
57 |
--------------------------------------------------------------------------------
/.github/workflows/linters.yml:
--------------------------------------------------------------------------------
1 | name: Linters
2 |
3 | on: pull_request
4 |
5 | env:
6 | FORCE_COLOR: 1
7 |
8 | jobs:
9 | lighthouse:
10 | name: Lighthouse
11 | runs-on: ubuntu-18.04
12 | steps:
13 | - uses: actions/checkout@v2
14 | - uses: actions/setup-node@v1
15 | with:
16 | node-version: "12.x"
17 | - name: Setup Lighthouse
18 | run: npm install -g @lhci/cli@0.7.x
19 | - name: Lighthouse Report
20 | run: lhci autorun --upload.target=temporary-public-storage --collect.staticDistDir=.
21 | webhint:
22 | name: Webhint
23 | runs-on: ubuntu-18.04
24 | steps:
25 | - uses: actions/checkout@v2
26 | - uses: actions/setup-node@v1
27 | with:
28 | node-version: "12.x"
29 | - name: Setup Webhint
30 | run: |
31 | npm install --save-dev hint@6.x
32 | [ -f .hintrc ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.hintrc
33 | - name: Webhint Report
34 | run: npx hint .
35 | stylelint:
36 | name: Stylelint
37 | runs-on: ubuntu-18.04
38 | steps:
39 | - uses: actions/checkout@v2
40 | - uses: actions/setup-node@v1
41 | with:
42 | node-version: "12.x"
43 | - name: Setup Stylelint
44 | run: |
45 | npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x
46 | [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.stylelintrc.json
47 | - name: Stylelint Report
48 | run: npx stylelint "**/*.{css,scss}"
49 | eslint:
50 | name: ESLint
51 | runs-on: ubuntu-18.04
52 | steps:
53 | - uses: actions/checkout@v2
54 | - uses: actions/setup-node@v1
55 | with:
56 | node-version: "12.x"
57 | - name: Setup ESLint
58 | run: |
59 | npm install --save-dev eslint@7.x eslint-config-airbnb-base@14.x eslint-plugin-import@2.x babel-eslint@10.x
60 | [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.eslintrc.json
61 | - name: ESLint Report
62 | run: npx eslint .
63 |
--------------------------------------------------------------------------------
/css/style.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap');
2 |
3 | * {
4 | padding: 0;
5 | margin: 0;
6 | box-sizing: inherit;
7 | }
8 |
9 | html {
10 | font-size: 62.5%;
11 | box-sizing: border-box;
12 | }
13 |
14 | body {
15 | font-family: 'Press Start 2P', sans-serif;
16 | color: #eee;
17 | background-color: #222;
18 |
19 | /* background-color: #60b347; */
20 | }
21 |
22 | /* layout */
23 | header {
24 | position: relative;
25 | height: 35vh;
26 | border-bottom: 7px solid #eee;
27 | }
28 |
29 | main {
30 | display: flex;
31 | align-items: center;
32 | justify-content: space-around;
33 | color: #eee;
34 | height: 65vh;
35 | }
36 |
37 | .left {
38 | display: flex;
39 | flex-direction: column;
40 | align-items: center;
41 | width: 52rem;
42 | }
43 |
44 | .right {
45 | font-size: 2rem;
46 | width: 52rem;
47 | }
48 |
49 | /* elements style */
50 | h1 {
51 | position: absolute;
52 | font-size: 4rem;
53 | text-align: center;
54 | width: 100%;
55 | top: 52%;
56 | left: 50%;
57 | transform: translate(-50%, -50%);
58 | }
59 |
60 | .number {
61 | position: absolute;
62 | font-size: 6rem;
63 | text-align: center;
64 | background: #eee;
65 | color: #333;
66 | bottom: 0%;
67 | left: 40%;
68 | width: 15rem;
69 | padding: 3rem 0;
70 |
71 | /* transform: translate(-50%, -50%); */
72 | }
73 |
74 | .between {
75 | position: absolute;
76 | font-size: 1.4rem;
77 | top: 2rem;
78 | right: 2rem;
79 | }
80 |
81 | .again {
82 | position: absolute;
83 | top: 2rem;
84 | left: 2rem;
85 | }
86 |
87 | .guess {
88 | display: block;
89 | font-family: inherit;
90 | font-size: 5rem;
91 | text-align: center;
92 | color: inherit;
93 | background: none;
94 | border: 4px solid #eee;
95 | width: 25rem;
96 | padding: 2.5rem;
97 | margin-bottom: 3rem;
98 | }
99 |
100 | .btn {
101 | font-size: 2rem;
102 | font-family: inherit;
103 | color: #222;
104 | background-color: #eee;
105 | cursor: pointer;
106 | border: none;
107 | padding: 2rem 3rem;
108 | }
109 |
110 | .btn:hover {
111 | background-color: #eee;
112 | }
113 |
114 | .message {
115 | margin-bottom: 8rem;
116 | height: 3rem;
117 | }
118 |
119 | .label-score {
120 | margin-bottom: 2rem;
121 | }
122 |
--------------------------------------------------------------------------------