From 4f2bf4b5df9bcd0deeb57f3195f904534257e566 Mon Sep 17 00:00:00 2001 From: NikolayLevchenko Date: Sat, 25 Aug 2018 13:27:29 +0200 Subject: [PATCH 1/5] modified chapter1 --- chapter1/package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/chapter1/package-lock.json b/chapter1/package-lock.json index 876b35a..59b1304 100644 --- a/chapter1/package-lock.json +++ b/chapter1/package-lock.json @@ -16,7 +16,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -71,12 +71,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "growl": { @@ -103,8 +103,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -119,7 +119,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -168,7 +168,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "path-is-absolute": { @@ -183,7 +183,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "wrappy": { From a45bb93c740fe267635107cf7318871d4766313c Mon Sep 17 00:00:00 2001 From: NikolayLevchenko Date: Sun, 26 Aug 2018 20:22:12 +0200 Subject: [PATCH 2/5] Fixed tests --- chapter1/index.js | 94 +++++++++++++++++++++++++++++-------- chapter1/package.json | 2 +- chapter1/test/index.test.js | 80 ++++++++++++++++++------------- 3 files changed, 122 insertions(+), 54 deletions(-) diff --git a/chapter1/index.js b/chapter1/index.js index 09d2b85..f0ad318 100644 --- a/chapter1/index.js +++ b/chapter1/index.js @@ -1,33 +1,87 @@ -(function(){ +let Formulas = {}; - console.log('Hello world'); +Formulas.add = function(a, b){ + return a + b; +} - let add = function(a, b){ - return a + b; +Formulas.divideMultiply = function(a, b){ + if(b==0){ + return undefined; } + return a * a / b; +} - let o = { - key: { key: { key: 42 }} - }; +Formulas.roundNumbers = function(a){ + return Math.round(a); +} - let arr = [1,2,3,4,5]; - - console.log(arr[4]) +Formulas.sinTimesCos = function(a){ + return Math.sin(a)*Math.cos(a); +} +Formulas.parseNumberFromString = function(a){ + return parseFloat(a); +} +Formulas.findObjectByKey = function(obj, key){ + var i; + var j; + var p; + for(i = 0; i < Object.keys(obj).length; i++){ + if(Object.keys(obj)[i] === key){ + return Object.values(obj)[i]; + } + if(typeof Object.values(obj)[i] === "object" && (Object.values(obj)[i] !== null)){ + var newObject = Object.values(obj)[i]; + for(j = 0; j < Object.keys(newObject).length; j++){ + if(Object.keys(newObject)[j] === key){ + return Object.values(newObject)[j]; + } + if(typeof Object.values(newObject)[j] === "object" && (Object.values(newObject)[j] !== null)){ + var newObject2 = Object.values(newObject)[j]; + for(p = 0; p < Object.keys(newObject2).length; p++){ + if(Object.keys(newObject2)[p] === key){ + return Object.values(newObject2)[p]; + } + } + } + } + } + } +} + +Formulas.parseJSON = function(a){ + return JSON.parse(a); +} +Formulas.pushToArray = function(a,b){ + return a.push(b); +} - let blablaFunction = function(phrase) { - return function(){ - console.log('Phrase ' + phrase); - } +Formulas.squareArrayValues = function(a){ + var newArr = a; + for (var i = 0; i < newArr.length; i++){ + newArr[i] = newArr[i]*newArr[i]; } + return a; +} + +Formulas.sortArray = function(a){ + return a.sort(Formulas.sortNumbers) +} - let composedBlablaFunction = function(blaFunction) { - console.log('Get some air in your lungs!'); - blaFunction(); - console.log('Now you can rest!') +Formulas.sortNumbers = function(a,b){ + return a-b; +} + +Formulas.reverseString = function(a){ + var newString = ""; + for (var i = a.length - 1; i >= 0; i--) { + newString += a[i]; } + return newString; +} + +module.exports = Formulas; + - composedBlablaFunction(blablaFunction('Hello world')) -}()); diff --git a/chapter1/package.json b/chapter1/package.json index dae84d1..dfb046b 100644 --- a/chapter1/package.json +++ b/chapter1/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "test": "./node_modules/mocha/bin/mocha" + "test": "mocha" }, "author": "", "license": "MIT", diff --git a/chapter1/test/index.test.js b/chapter1/test/index.test.js index 58f4adb..f2eaa43 100644 --- a/chapter1/test/index.test.js +++ b/chapter1/test/index.test.js @@ -1,85 +1,99 @@ var assert = require('assert'); +var Formulas = require('../index.js'); describe('JS Basics', function() { describe('Numbers', function() { - it('should be able to add number', function() { - var a = 42.9902822; - var b = 43.2929112; - assert.equal(a + b, 99); + it('should be able to add numbers', function() { + var a = 45; + var b = 54; + assert.equal(Formulas.add(a,b), 99); }); it('should be able to divide and multiply number', function() { - var a = 42.94; - var b = 0; + var a = 4; + var b = 2; + assert.equal(Formulas.divideMultiply(a,b), 8); + }); - assert.equal(a * a / b, 42); + it('should return undefined if divided by 0', function() { + var a = 4; + var b = 0; + assert.equal(Formulas.divideMultiply(a,b), undefined); }); it('should be able to round numbers', function() { var a = 42.94; - assert.equal(a, 42); + assert.equal(Formulas.roundNumbers(a), 43); }); - it('should be able to find sin(x) * cos(x)', function() { - var a = 42; - assert.equal(a, 1); + it('should be able to find sin(x)*cos(x)', function() { + var a = 0; + assert.equal(Formulas.sinTimesCos(a), 0); }); it('should be able to parse number form string', function() { var price = "9.99 $" - assert.equal(price, 9.99); + assert.equal(Formulas.parseNumberFromString(price), 9.99); }); }); describe('Objects', function() { - it('should be find object value by key', function() { - var obj = { a: {b: { d: "foo" }}, c: 42 } - assert.equal(obj, "foo"); + it('should be able to find object value by key', function() { + var obj = { a: {b: { d: "foo" }}, c: 42 }; + assert.equal(Formulas.findObjectByKey(obj,'d'), "foo"); }); - it('should be find object value by dynamic key', function() { - var obj = { a: {b: { d: "foo" }}, c: 42 } - assert.equal(obj["hm"], 42); - }); + it('should be able to find object value by dynamic key', function() { + var obj = {a: {b: { d: "foo" }}, c: 42 } + assert.equal(Formulas.findObjectByKey(obj,'c'), 42);; + }); - it('should be parse object from json', function() { + it('should be able to parse object from json', function() { var json = '{"ok":true,"user_lessons":[{"user_lesson_id":408097171313,"state":"completed","skip":false,"lesson_id":1,"date_start":1533108640,"tasks":[{"user_task_id":407936828624,"state":"skipped","current_step":"","task_id":1},{"user_task_id":408791535509,"state":"skipped","current_step":"","task_id":2},{"user_task_id":409970847238,"state":"skipped","current_step":"","task_id":3}]}]}' - var dateStart = 42; + var parsedJSON = Formulas.parseJSON(json); + var dateStart = parsedJSON.user_lessons[0].date_start; assert.equal(dateStart, 1533108640); }); - it('should be set objet key', function() { + it('should be able to set object key', function() { var obj = { a: {b: { d: "foo" }}, c: 42 } + obj.a.b = "Js Rocks!"; assert.equal(obj.a.b, "Js Rocks!") }); }); describe('Arrays', function() { - it('should be access array by index', function() { - var arrray = [1,2,3,4,5,6,7,8,9] - assert.equal(arrray, 5); + it('should be able to access array by index', function() { + var arrray = [1,2,3,4,5,6,7,8,9]; + assert.equal(arrray[4], 5); }); it('should to push and pop from array', function() { - var arrray = [1,2,3,4,5,6,7,8,9] - assert.equal(arrray.length, 10); + var array = [1,2,3,4,5,6,7,8,9]; + Formulas.pushToArray(array, 10); + assert.equal(array.length, 10); }); it('should be able to output square of array values', function() { - assert.equal() + var arr = [1,2,3,4,5]; + var expectedArr = [1,4,9,16,25]; + var newArr = Formulas.squareArrayValues(arr); + assert.deepEqual(newArr, expectedArr); }); it('should be able to sort array', function() { - var arr = [23,23,4,5,123,7,32,13,13,9] - assert.equal(arr, []); + var arr = [23,23,4,5,123,7,32,13,13,9]; + var expectedArr = [4,5,7,9,13,13,23,23,32,123]; + var sortedArr = Formulas.sortArray(arr); + assert.deepEqual(sortedArr, expectedArr); }); it('should be able to reverse string', function() { - - var string = "I love corgies!" - assert.equal(string, "!seigroc evol I") + var string = "I love corgies!"; + var newString = Formulas.reverseString(string); + assert.equal(newString, "!seigroc evol I"); }); }); }); \ No newline at end of file From 811f3b4f69ae9cef915797ad118d295a753452b7 Mon Sep 17 00:00:00 2001 From: NikolayLevchenko Date: Sat, 1 Sep 2018 20:33:11 +0200 Subject: [PATCH 3/5] added some changes to initial tests and created bank-account file --- chapter1/bank-account.js | 21 ++++++++ chapter1/index.js | 69 +++++++++++++------------- chapter1/test/bank-account.test.js | 8 +++ chapter1/test/index.test.js | 78 +++++++++++++++--------------- 4 files changed, 103 insertions(+), 73 deletions(-) create mode 100644 chapter1/bank-account.js create mode 100644 chapter1/test/bank-account.test.js diff --git a/chapter1/bank-account.js b/chapter1/bank-account.js new file mode 100644 index 0000000..a712ddc --- /dev/null +++ b/chapter1/bank-account.js @@ -0,0 +1,21 @@ +var BankSecurity = { + foo: 42 +} + +var BankAccount = { + balance: 0, + + deposit: function (money) { + this.balance = this.balance + money; + }, + + widthraw: function (cash) { + this.balance = this.balance - cash; + return this.balance; + } +} + +module.exports = { + BankAccount: BankAccount, + BankSecurity: BankSecurity +} diff --git a/chapter1/index.js b/chapter1/index.js index f0ad318..5026932 100644 --- a/chapter1/index.js +++ b/chapter1/index.js @@ -1,80 +1,81 @@ let Formulas = {}; -Formulas.add = function(a, b){ +Formulas.add = function (a, b) { return a + b; } -Formulas.divideMultiply = function(a, b){ - if(b==0){ +Formulas.divideMultiply = function (a, b) { + if (b == 0) { return undefined; } return a * a / b; } -Formulas.roundNumbers = function(a){ +Formulas.roundNumbers = function (a) { return Math.round(a); } -Formulas.sinTimesCos = function(a){ - return Math.sin(a)*Math.cos(a); +Formulas.sinTimesCos = function (a) { + return Math.sin(a) * Math.cos(a); } -Formulas.parseNumberFromString = function(a){ +Formulas.parseNumberFromString = function (a) { return parseFloat(a); } -Formulas.findObjectByKey = function(obj, key){ - var i; - var j; - var p; - for(i = 0; i < Object.keys(obj).length; i++){ - if(Object.keys(obj)[i] === key){ +Formulas.findObjectValueByKey = function (obj, key) { + let i; + let j; + let p; + + for (i = 0; i < Object.keys(obj).length; i++) { + if (Object.keys(obj)[i] === key) { return Object.values(obj)[i]; } - if(typeof Object.values(obj)[i] === "object" && (Object.values(obj)[i] !== null)){ + if (typeof Object.values(obj)[i] === "object" && (Object.values(obj)[i] !== null)) { var newObject = Object.values(obj)[i]; - for(j = 0; j < Object.keys(newObject).length; j++){ - if(Object.keys(newObject)[j] === key){ - return Object.values(newObject)[j]; - } - if(typeof Object.values(newObject)[j] === "object" && (Object.values(newObject)[j] !== null)){ - var newObject2 = Object.values(newObject)[j]; - for(p = 0; p < Object.keys(newObject2).length; p++){ - if(Object.keys(newObject2)[p] === key){ - return Object.values(newObject2)[p]; - } + for (j = 0; j < Object.keys(newObject).length; j++) { + if (Object.keys(newObject)[j] === key) { + return Object.values(newObject)[j]; + } + if (typeof Object.values(newObject)[j] === "object" && (Object.values(newObject)[j] !== null)) { + var newObject2 = Object.values(newObject)[j]; + for (p = 0; p < Object.keys(newObject2).length; p++) { + if (Object.keys(newObject2)[p] === key) { + return Object.values(newObject2)[p]; } } - } + } + } } } } -Formulas.parseJSON = function(a){ +Formulas.parseJSON = function (a) { return JSON.parse(a); } -Formulas.pushToArray = function(a,b){ +Formulas.pushToArray = function (a, b) { return a.push(b); } -Formulas.squareArrayValues = function(a){ +Formulas.squareArrayValues = function (a) { var newArr = a; - for (var i = 0; i < newArr.length; i++){ - newArr[i] = newArr[i]*newArr[i]; + for (var i = 0; i < newArr.length; i++) { + newArr[i] = newArr[i] * newArr[i]; } return a; } -Formulas.sortArray = function(a){ +Formulas.sortArray = function (a) { return a.sort(Formulas.sortNumbers) } -Formulas.sortNumbers = function(a,b){ - return a-b; +Formulas.sortNumbers = function (a, b) { + return a - b; } -Formulas.reverseString = function(a){ +Formulas.reverseString = function (a) { var newString = ""; for (var i = a.length - 1; i >= 0; i--) { newString += a[i]; diff --git a/chapter1/test/bank-account.test.js b/chapter1/test/bank-account.test.js new file mode 100644 index 0000000..851ba36 --- /dev/null +++ b/chapter1/test/bank-account.test.js @@ -0,0 +1,8 @@ +var assert = require('assert'); +var BankAccount = require('../bank-account').BankAccount; + +describe('Bank account', () => { + it('should have no money on deposit in the beginning', () => { + assert.equal(BankAccount.balance, 0); + }); +}) \ No newline at end of file diff --git a/chapter1/test/index.test.js b/chapter1/test/index.test.js index f2eaa43..880955a 100644 --- a/chapter1/test/index.test.js +++ b/chapter1/test/index.test.js @@ -1,97 +1,97 @@ var assert = require('assert'); var Formulas = require('../index.js'); -describe('JS Basics', function() { - describe('Numbers', function() { - it('should be able to add numbers', function() { - var a = 45; +describe('JS Basics', function () { + describe('Numbers', function () { + it('should be able to add numbers', function () { + var a = 45; var b = 54; - assert.equal(Formulas.add(a,b), 99); + assert.equal(Formulas.add(a, b), 99); }); - it('should be able to divide and multiply number', function() { - var a = 4; + it('should be able to divide and multiply number', function () { + var a = 4; var b = 2; - assert.equal(Formulas.divideMultiply(a,b), 8); + assert.equal(Formulas.divideMultiply(a, b), 8); }); - it('should return undefined if divided by 0', function() { - var a = 4; + it('should return undefined if divided by 0', function () { + var a = 4; var b = 0; - assert.equal(Formulas.divideMultiply(a,b), undefined); + assert.equal(Formulas.divideMultiply(a, b), undefined); }); - it('should be able to round numbers', function() { - var a = 42.94; + it('should be able to round numbers', function () { + var a = 42.94; assert.equal(Formulas.roundNumbers(a), 43); }); - it('should be able to find sin(x)*cos(x)', function() { + it('should be able to find sin(x)*cos(x)', function () { var a = 0; assert.equal(Formulas.sinTimesCos(a), 0); }); - it('should be able to parse number form string', function() { + it('should be able to parse number form string', function () { var price = "9.99 $" assert.equal(Formulas.parseNumberFromString(price), 9.99); }); }); - describe('Objects', function() { - it('should be able to find object value by key', function() { - var obj = { a: {b: { d: "foo" }}, c: 42 }; - assert.equal(Formulas.findObjectByKey(obj,'d'), "foo"); + describe('Objects', function () { + it('should be able to find object value by key', function () { + var obj = { a: { b: { d: "foo" } }, c: 42 }; + assert.equal(Formulas.findObjectValueByKey(obj, 'd'), "foo"); }); - it('should be able to find object value by dynamic key', function() { - var obj = {a: {b: { d: "foo" }}, c: 42 } - assert.equal(Formulas.findObjectByKey(obj,'c'), 42);; - }); + it('should be able to find object value by dynamic key', function () { + var obj = { a: { b: { d: "foo" } }, c: 42 } + assert.equal(Formulas.findObjectValueByKey(obj, 'c'), 42);; + }); - it('should be able to parse object from json', function() { + it('should be able to parse object from json', function () { var json = '{"ok":true,"user_lessons":[{"user_lesson_id":408097171313,"state":"completed","skip":false,"lesson_id":1,"date_start":1533108640,"tasks":[{"user_task_id":407936828624,"state":"skipped","current_step":"","task_id":1},{"user_task_id":408791535509,"state":"skipped","current_step":"","task_id":2},{"user_task_id":409970847238,"state":"skipped","current_step":"","task_id":3}]}]}' var parsedJSON = Formulas.parseJSON(json); var dateStart = parsedJSON.user_lessons[0].date_start; assert.equal(dateStart, 1533108640); }); - it('should be able to set object key', function() { - var obj = { a: {b: { d: "foo" }}, c: 42 } + it('should be able to set object key', function () { + var obj = { a: { b: { d: "foo" } }, c: 42 } obj.a.b = "Js Rocks!"; assert.equal(obj.a.b, "Js Rocks!") }); }); - describe('Arrays', function() { - it('should be able to access array by index', function() { - var arrray = [1,2,3,4,5,6,7,8,9]; + describe('Arrays', function () { + it('should be able to access array by index', function () { + var arrray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; assert.equal(arrray[4], 5); }); - it('should to push and pop from array', function() { - var array = [1,2,3,4,5,6,7,8,9]; + it('should to push and pop from array', function () { + var array = [1, 2, 3, 4, 5, 6, 7, 8, 9]; Formulas.pushToArray(array, 10); assert.equal(array.length, 10); }); - it('should be able to output square of array values', function() { - var arr = [1,2,3,4,5]; - var expectedArr = [1,4,9,16,25]; + it('should be able to output square of array values', function () { + var arr = [1, 2, 3, 4, 5]; + var expectedArr = [1, 4, 9, 16, 25]; var newArr = Formulas.squareArrayValues(arr); assert.deepEqual(newArr, expectedArr); }); - it('should be able to sort array', function() { - var arr = [23,23,4,5,123,7,32,13,13,9]; - var expectedArr = [4,5,7,9,13,13,23,23,32,123]; + it('should be able to sort array', function () { + var arr = [23, 23, 4, 5, 123, 7, 32, 13, 13, 9]; + var expectedArr = [4, 5, 7, 9, 13, 13, 23, 23, 32, 123]; var sortedArr = Formulas.sortArray(arr); assert.deepEqual(sortedArr, expectedArr); }); - it('should be able to reverse string', function() { - var string = "I love corgies!"; + it('should be able to reverse string', function () { + var string = "I love corgies!"; var newString = Formulas.reverseString(string); assert.equal(newString, "!seigroc evol I"); }); From afc44add706e66f541106499b11fb89bbf46bbc5 Mon Sep 17 00:00:00 2001 From: NikolayLevchenko Date: Mon, 8 Oct 2018 22:33:03 +0200 Subject: [PATCH 4/5] last commit --- .vscode/settings.json | 2 + chapter1/bank-account.js | 1 + chapter1/test/bank-account.test.js | 8 + chapter2/package-lock.json | 551 +++++++++++++++++++++++++++++ chapter2/package.json | 10 +- chapter2/scripts.js | 11 + 6 files changed, 581 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 chapter2/package-lock.json create mode 100644 chapter2/scripts.js diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/chapter1/bank-account.js b/chapter1/bank-account.js index a712ddc..cae0ff6 100644 --- a/chapter1/bank-account.js +++ b/chapter1/bank-account.js @@ -7,6 +7,7 @@ var BankAccount = { deposit: function (money) { this.balance = this.balance + money; + return this.balance; }, widthraw: function (cash) { diff --git a/chapter1/test/bank-account.test.js b/chapter1/test/bank-account.test.js index 851ba36..7dfed24 100644 --- a/chapter1/test/bank-account.test.js +++ b/chapter1/test/bank-account.test.js @@ -5,4 +5,12 @@ describe('Bank account', () => { it('should have no money on deposit in the beginning', () => { assert.equal(BankAccount.balance, 0); }); + + it('should be able to withdraw money', () => { + assert.equal(BankAccount.widthraw(20), -20); + }); + + it('should be able to deposit money', () => { + assert.equal(BankAccount.deposit(30), 10); + }); }) \ No newline at end of file diff --git a/chapter2/package-lock.json b/chapter2/package-lock.json new file mode 100644 index 0000000..302582d --- /dev/null +++ b/chapter2/package-lock.json @@ -0,0 +1,551 @@ +{ + "name": "chapter2", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.20", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "requires": { + "mime-db": "1.36.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.20" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/chapter2/package.json b/chapter2/package.json index cc9bede..b95b542 100644 --- a/chapter2/package.json +++ b/chapter2/package.json @@ -1,11 +1,17 @@ { "name": "chapter2", "version": "1.0.0", - "description": "", + "description": "simple node js app", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "express": "^4.16.3" + }, + "devDependencies": { + "mocha": "^5.2.0" + } } diff --git a/chapter2/scripts.js b/chapter2/scripts.js new file mode 100644 index 0000000..31aa746 --- /dev/null +++ b/chapter2/scripts.js @@ -0,0 +1,11 @@ +const express = require('express'); + +const app = express(); + +app.get('/', function (req, res) { + res.send("Hello world") +}) + +app.listen(8000, function () { + console.log("It's live"); +}) \ No newline at end of file From cb0524236952393b8319ffa6cefb59fd3e337266 Mon Sep 17 00:00:00 2001 From: NikolayLevchenko Date: Tue, 9 Oct 2018 00:10:40 +0200 Subject: [PATCH 5/5] Added button login and card --- chapter4-homework/app.js | 2 +- chapter4-homework/package-lock.json | 88 ++++++++++++------------ chapter4-homework/public/MIB.jpg | Bin 0 -> 53735 bytes chapter4-homework/public/index.html | 43 ++++++++++-- chapter4-homework/public/scripts/app.js | 7 +- 5 files changed, 87 insertions(+), 53 deletions(-) create mode 100644 chapter4-homework/public/MIB.jpg diff --git a/chapter4-homework/app.js b/chapter4-homework/app.js index 81e3f67..1126a5b 100644 --- a/chapter4-homework/app.js +++ b/chapter4-homework/app.js @@ -1,6 +1,6 @@ var express = require('express'); var app = express(); -app.use(express.static('public')) +app.use(express.static('public')); app.listen(3000); \ No newline at end of file diff --git a/chapter4-homework/package-lock.json b/chapter4-homework/package-lock.json index 99ea8e8..fd1d272 100644 --- a/chapter4-homework/package-lock.json +++ b/chapter4-homework/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.20", "negotiator": "0.6.1" } }, @@ -24,15 +24,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "~1.6.15" + "type-is": "1.6.16" }, "dependencies": { "debug": { @@ -105,36 +105,36 @@ "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", + "proxy-addr": "2.0.4", "qs": "6.5.1", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "debug": { @@ -153,12 +153,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -186,10 +186,10 @@ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.4.0" } }, "iconv-lite": { @@ -237,7 +237,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "requires": { - "mime-db": "~1.36.0" + "mime-db": "1.36.0" } }, "ms": { @@ -273,7 +273,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -311,7 +311,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "statuses": "1.4.0" } }, "setprototypeof": { @@ -332,18 +332,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "debug": { @@ -361,9 +361,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -383,7 +383,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.20" } }, "unpipe": { diff --git a/chapter4-homework/public/MIB.jpg b/chapter4-homework/public/MIB.jpg new file mode 100644 index 0000000000000000000000000000000000000000..653a7d37b3d185717684036dbc54d1d3e9ee6536 GIT binary patch literal 53735 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�>9 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%0AU zTZY_72N@?l1}o1$h*wwfN^?JoZW|=zl5^XhE0oBtSGl_#SG2~{cOSPKka9LOL~v_A zBhsx|%L2>$_;(@bRPu+^deRvEQs;Dzfq@QwVxt^(ALCUX7J(LPd5I)`@D7Ak%Zoyh z`N-<%=ZRD9x3hX0rTfU_+N*}nN+06)6cRm+wa}7TPmwTP!~w@00HP$4*&~p)(&Ob* z+*GJwzPm?Qys;9NnD;)_73A%6IdCwz+Jn$l0T3r6KQ}q%tnQN9?m0$fh%jI=$o8lY z%BtALDbY&o#g{7MsT}SfO3FyMv)VMxd*Md9mSb1Zp4MeS9Fj$q4cL=jou~XU_-(6b zLOnhdx{QscQby&^PJOHAZwFtct=uy{ly7abiQ)^N#8;wfem&DPmh&`oai^deFz4lN zI#-)gGv>5e?@*N~Lh?xFJbU2yejRwK%HqcKPp8iKW!;j7yzE3Tbuk)rp5qz+0C};R z(eY=AuRKYr8K=pK4npRu_-+$6s*0!QMJ~SNSEWVGMJb*xA;MK3CdXUxFH;t69+Rg? ziv)3qx3At{20Hc`u0vi+J7}!!ZGLGM5hcXG-gfQu0;AR^Ym3({xv{{{ttF%)_Ubi$ zORtys_N}EZW@J+t0CU!z{3j&T_m(#nO!3Z`D0=#etW8Tq+(+q2OMywyWEwy!0`dev zSe^jxYrE0@8TiLk&>reNHaH-Rd7J0BR2cQaJ!^tiD*Kd>!;snNYQx{&v}QAVa?!Wm zLm}GVtu)tA3+qX&?xeT5+vXw1%D{v9R2`|H0T9ktYSc%*bT>cqs^#~sCdqo&AXyhk0HzL~t%brkR}lY6D!&2NikIf=2)Lz<{N z4eJxf_5Dv)vz)`M=`qWO>d_Q$%vM~wuAQkv_G#zTt&pFUJi{Unpf%`MpA?+hLvP|; zCf8s2$dF4Ije_O&kfv8Pn5GR_}RUfb6v2PGP0Gb?r`Rf7Gf>31^Q?F=SSykqdK-Dkmij(}P0bsG&*(n4D*L+9(< z8qd@GNv>%P<)h!(mFwh6Suy_WaaTGD+gM7gzK-WD5uOPaMuZZFC0%Rl57<*twbXn; z;zu@?*4N2r3b=(f?oI83`PYX--G5?vG+DfF;%Riv zCVe_nr^CHWo8u$QY;84-NOIG5cQk~Yrmn1cew*;i!n%iuwTsZ&# z#Sal)M%MN+C7K=rK)5;j(ArzO4J*4?-W~_lu2t^*ZQ}^E=z!eF)0rf1qV%d#YX1NX zd@&#zR-JRN-KX*0j7OhbdRHT9q4<}?7YjAd+9co3=}E`sT2~$qy3_S2H2Y05O=A93 z&dB*x`hijJ>eOxK!SdeC{lvaD_>Hc3qe@E!w6@Z8$j;*hoO=QE$rZzG4ImM#NX_fX zHSStR!Hss~Ph0;08*27m9Mbr2Cm~#qrEXd3zYIJMKF{GD1O5^%KyWW^eq;^n{{ZT& zy^N|$a@6Ald5?j<4*2iI(nf9c#xX*L)F5gfq)->;hzYDwr8r^uqTK?M9BO8sh zI4Pe@59?eXj6N}VpH#hTbE!xdI|aS5@}W;--n`da)pZNW-|e?0g0=`o$UoyxmYqK~ zJIZ?>L2G{-;kQwxcq2@-(;*)!{hl$n4|C9d6x}aU)GqYP%~w&Gu5MZ^{Lh;C{{Tdu zMx9a+BLMP8TK4@iH;ce`b2uajf`<1sldh!fjU!Ilv%tJra`#&0%*;95Ml) zVyp@`H9Yq+T*QdTfTu#Mf@rnIjSVYQy0nn}jLK)6Y}ljkA3!QyYr_67iZ8X^Xt(gj z{Dydm{X16w0Kk;C{{V%XrO9^)mMDYBQyJth2EB8~{xb`6G=6lF?%_yp(29iwwKR1k z)tk`az7PB?(lxyjYtIx*b8KdCwt_d>;CEsVYSZ!0!h25vTPCw(u1R?u%F(1VLKa2i zJx5WB(C{|1Z>V0lyuN#Fs9HalJDhY{)%fRqbw7nHE-t3t`yE1_{9snG?q>BqY?-%6 zH?xTvJBu`S4Fsc%XCzjX-k~pq^Dhwi zf5LtsxNq!>!((~Q=qC9-Z%%sG52|=e#M&k7awIZHsM(FsVvrA9jtyu*aiHpo7f#kN>_6k*P)?slt2Q1l&^3|d>JhE8w`qpt&!F@b zS61*|nRf}e)7->K$Y|SiXZniik2Sr=%#5AB(y@`^Eehh^)unwU+>@Qr9q31>BE7f% z3HVq36TcOx5=KUu22r{X-nDq0ou`ZRJAf=+dziz5QWLxp^sl4;0Ao#h(^>eD;-$CI zn@(u7+kE+h5+B|+LHu%SlM>U5ZCRZ(H(gIW@t4Gn55oGsq`n>S?TEY=vx7a`d9oJs z8zc^coY$S}-aGNni(IY6{nJ9n{aPJ}2hdiIui;xOPZ4Vu+MIzEwHubp9Fv)wwN$(D zW|5^Kk4?2%9Y!~ipVGRe4KGpIekVGXwt~AVX+8|Txgz5Je=ReXEODRCyA2P+x>cHk zWoU0D?nv67nXf!=7-|<9np|DJVpasl?ewi}U*a~YI*2s563#L(SdGkno|Q1KLLUyS zZkx+^K-X+h`do+^#Ky!TUq8Z?dQ1#{HI%1+4|Q==H_+0tu%IM+4X*)Fwv*>xFM zZBsKHianR5XX)2^w3>_)*vTZ9JF^l*y$`b2b@1chzlc0lD3;_48zmc>S$0EI$R-cH57UYeYbf&L2W8nhC4i^g|f*!o{G z%+e67|%*I(aUFg=H*bn$8b02977YD;yhTs5AM zt(DviP@?)O{{R(Uxzqdy@T9T5nKhkNS1FD_KT6Rq`x4!X9|?XFUg{C9sjaeU+IoD( zNe&4gO7FfZ>e@b;@b+yNK!sY^I+-q+erX8w^cCfE{7BY3OQ|0=KPg>+NRhCJzPJ^q z@kaHnJ|EjAa?{FpAE3=)IaAsuv5elV@N1?oaOWfMXZ5BYv^O#zb4i|Sl+-ClN<)+0 zlbQf>o@v?Rr!>H6K{Nn2JknFMo-s@(6acEgIO3;@E%E@p{VKm)8oQ?z^H*`kC^9{?C&G>6?Ecfw@XD7W&@uOI2#E~2b z?bpbKbJX`WweY^z?D4(Rh6@^&?}DBjgT&tqUd|0dD|`O{HN2>$;bh~n>}%xka7Wg@nfMA$t>I_VppdMp z>9vDnX>R`jom3UrH=)FMx5GXz(5|&9XSOj%rx5cA8*T=03i|#PCx!kqc&kr=H2ANQ z>eQ|t()o9z=ZpqDE7bg5t!iE!GH72Cvonr;hu8U6Hr#d_ClInwuaIi3F~ft^h0&Lht!YotX*rt zzBTY-uA!z#`i7i3+*>yI%KMMut^#kj>9e)1w*|1Q0G-s`S7yCH)r$_Ne zh;@62G>a=uRV^d?MDVWGkvE(MA6(agX_sFOJbbE}i%a0|6XT1RzDs#u*N!XLzh#dL zc$dRII`Irz%UfSr$*05iO-2wud_2bBk=NF)yws^X?kX^Gnz8ZEj`dsX-xh02J=Cs? zsa+^s-~c9ZSfDGcNgQN82t57cUDVzN)b(E#>sK=sv$Z;%(eorYPXu^F_i#eqAk@@y zf8~-N>r1ED_~YUw>RVewEOx}z7e$TGlru zjk(-O_dTnR@yEvh01$YFG2!n6*c}&6e~}j0f22+Lj+K|A{4Bb+QLOm)Q5s#F4=~2k z13aD1bI7N6C+;BSx5Q84kBELf_@90>j}O|(VW$1mw6ghBFa0!X?K~0io5Ow=w_R7o z*GZ^fE*WhX?q{zj+t!xX#hw-LuZGOJJP=t~k+mNgmHoi}BVIq_pNM*3kC$vfZhT4&40B{VT2b z?9y838Xb#*griG?+#V~l_-EkjJqJ!6An|DO5dxcCFdRuM9-F<5aQ^_c2Dc`y;%zv* zQNoegfgDIM5lQ=_)}nN|cV$L*Jb8f!ITV;ZaxqKIA?C9vQ^3KbqL-Qg1t;M`=QO$Y zGypH&G>$vb&T~pmMF2A#RIsxL1aXRt6O4M(m#qMO1Mt4`@jez^#IvwQos@x&R~5}^ zw!U|XCfb{}z~9Qc&xN+-ei4~VeA3+zGCit?hOI+*mg9clq6f(zO1R&d4o`DWPnu0X z;qCOSNJ!!#20OPMYv8!d%winh0=Z=!*9Q7o$>(cR0{e2Ml8ghq~|n; z&_mQvdeSy}^`z#ck=XYX-{BOer6A-`P##4xwtOey-BZOn<+hKb+ZpdCCu-+_2U1NZ zi#$E3cxPL<(e+4zT);qWyn+v<1eq(+koBYjgVUM-Tx3!aKPvJc{=3*{@J= zbz2zZ+aZBn7$3SpuM$v6uTA}(?-~yr3t)0CAao-h)k|@s=nF53T0P`#;g5(AB=*np zM|M{wM^Bs5xqlOUHq>-0gW~UoI=eIj=EO~vVdzD2o-?wxkHm5R0B8)`hYZQx#(Nrt zzACqbJZV4tBG%U_;rH4e!sovqHrnl@KX&ptsz&nnO*ioeg*pZym|0%Qg|D6_KsWkme(ILGW%B3ijvgMGI3{(!+A6rhT#OUjyAt)`k(d))~@e7 zMdCd$>K8KEL17HB+f2oTY-C_c`(n9CbT5YA7HyvELb{JZ@ev!E)$pk!dJ66T0AmjY zYrYHko8r4oX4Rrs(;)Js9HWmlxdypv#!3#_qk3*GU76vYC;tG1v&B9x)pY2VPb2$E z;Y3gjE(ELwNUuilcfs8s!`gal-aXW<^y^5*?UI}q`VOYEZvHEHf5306S$J`J4A~4`I+(M5-mEb!IV(-dZEp{B7~> z(@M9KMfho?$EMru*w^wPGPk;p)#Wkix~9E!+Ruo!2ZlMDbKTuBF8TiG?rI&{ABST0dk#qO*AnWVdMsd%jr;agr8jr6>bg&fHJ=)InROjjec)kZKrpeW=qro( z^>iok+_0$|ZJW<-3Q^X*1K=lwpz&|Sy*9%2bEm@p0BF3= zLmKw{YTxY*;3)hP6B;(4T6-a!gcU9t|xfd8Kd@rxf_{o_bRc zdUAd5#*iOMd=_`T_$_e*5wgbcs*Swmx$E3iz7w$@+qV*J$uU0_pZhr7ML)ycXG~*< z`+RIM>9)H~4$*DzZl+K|q-=M4Ro_${&lULfsu{I-^vK^aSwyJ#?&M_GmDfw-`|q~v zx3?Jw&bVg$0mXA?8OWr^&_FUM=qM!miU(Se1`RkbYC?FeuLkJSYr6HOo{B(s{o{63 z>P-N9Z|vixj}GZ`c&_3sO>zuYM!-H3EcH(lgvGaKtY*HR; zM_$up(zScNK5ky#Lm57xbTyvCjb~RD{cF}Wr)^Wfntkhn#KIMc_Ts#lYBu&$TwCfEhW6T3Du`PiTYq>O+LcXhBPz7* zc8c;vsc18Fe5*O zeC^>69{7jCj{0=_<+Kg9OIv~WeMdb$mGs~2eJ_ReKNfg{T+oqVx}L%$x`B8Ke8xG) zYR;v(8&2Lu)4wuD%bNa&Yh~hHX8T{b5klIX(xs~K;8*@mpe zR(>J;K=Aj%JrMX)!HEs$h*>sEI&!w>r$6m`SIs)`)$T7_P}fZI-QDIxB;8v*&1~9= z<%tPvc2@BYuc_-=AQK7OOxK1PNn_G zopy&Uy{`K^PnqM4yv)5913O33zGKzpGwQc<6Q447Z2mR$7M&T;ya%e!D<8HSCwF7j zK^W)rubjyw{Ku2ca@CV^yEUegLJ@;SDF%#lSr!95Dd188gHzeU_ZLw^A1xyVABmt3 zeEpp*d#^Hun({#$YrSdTjY{&CI0~3af{_k+*BJKItn|wUdKev2eVPg0Zd4fs*0Nh?r=U$!hQ(E64hAbuj5o*mgrb|h*d4mVjp0()$;vH7fJF87jEkff@RSzs_w{j8b?Or|N zo4r2gQE4>DCW73m;U#^|xDS};>so&fHPfSON?88@qs~0Jl=>c(wHYM&WwSDxZCx8b z8MNeS?6vE4%y((!%tv_#f6Bbv@@w4nD+A&W3F>-kMf=#nnk;rJ&PU;18vGKN!Ojn{ ztekmUMW=Ofy(sTUawzAaqyxKVofB#;F`-bTh6k~)QTQ=(Fa8$XTA?j9t;=rp85tGF_@ph}*-1jJ>}TaIz?6C#-ZAD@ z6-hMij!(k+8*5)^hTiHZ?xGu`ibMXh=~gc#mqpbrXVM|N({AmM2?=w!$PXlYQ=`zY zrxR*=8ov88y5be$NDrv>70_w=y@!i!*H70PJ6&EevJ1>$N&d@w*HkIS)_OkYG^Fo! zsy6MlUk?0CiaQSwh;)Aw?b~mtqJ@g(y(Arvy?WQ|N#U(y!v6piJYA>i_KypHWHiut2n(k}G7@fFG#XG4^6(TAw7sXt+_8EX3Oude8NtC_yRV++G0a@$L= z+n-J=D$%qWdzw;rmWRv!Dw!hjZnWXVvi|^S-3`a?r|+MPS4ZK02sOr^{{RUOiZ0HP zp##jV{<`G)BKNJ`M?uiMBjT+__ghugwacwS;q?6`CKyc0#adrarFrj+yhp5fhgNB| znGX1gNbS^Zj@%A5s*VL*rr@MR=!8&~2Md(BnH}g-`D${{U(I&!uxQ zM$W-DmSgv09ckWbswyci{qx$sh5euY6WQKrOXAIa#5N&(#+q-G5IYR^_o$40qq}+( z-zP&G;E%!E?-1R`s%sGivW$md{3rvSYo_?q@sCf?AfLg14kL;eBg(qIg>XRw?x(5u zte=hF80OS$8^Zqp5ACJ1(2=}}ucJad^W9XA)#n-}k!9h#B-XXn5?#MG_Ko+L`nUP! zwTxW-*sVL6x67+1@WzvArNG`M@m~9hWIOHcowD<>?tQ5>9V1!sPQ3*8Lv+_92(6G{ zA`Y4K6*ZWi_U!9A(-)PG`aCD1FVeJpMdND?1HW~W!7el$9s6A{ZQ_UT(5<#hL|JOFM*!=<-gHkZdjB2 zZT%}7Nwi2|{@>O&JY~s(H$OGQ`k!jYr|JGgZGtF1>uEC%^bt&AfK$Uh(k;d(A`PW~Zp$9n#AzWsl>)9@XH- z*0^OZX)~oOAl=%RJt;5`dN4;?k&YgK^Ihk`ogO_$#BZovA!~aC^NvRax&isu1%d`i z;=R+s)?>rp455=?7g~;HaypQH==`ZSWHeY8==!zxv3CCe=(=oeE)PbN_(gNR3BQ)- zP&e0azH5n$fywkee=~}Q;w{5iXnKE#VgCS+%g6gg)(<@W)j!UY;kB5)*OJNt8DI?V zN#Rm4l7ACjaE6H(Icsu<$DK4&-~clfV&~d{v~zx${NzJ8|4^74{eHd#eu) zd>@(!&e`>Qg|&|zc7eISO8Eofjpdz(#6J(-U;hBdv|5BlLG8GITKA9J>t0Kpd&7DJ zPn3e)?%V^%&%&R|ns!6ze7;5x0MmzBO!lIXg+7!Ix@kDiw|bH!X=F&_UCzWP9;DC* zto#zvjh2n5c%Ep!`8Kc<*a4QTe;dcCTt^+ywUMH_kgP1Lo#b{H=QZgKX&#H-TEQQ5IJ_AxZwCsWpMWwg`n9(#z9 zq+qWjvC7b52ld zH$qaptj}loW2u=SOQ&7PxPs%3p!7B7e-iYAqIk;s&;TQ6^J2&MTaj8m2-M!f{0H2q z=WMB;>Ds!VjaCtAUKZ25M*z&WtSx6f${)H`sk-f7UKo~aP?CbdKINEpL( ze0i?4cal#a)b0tNJm<}C$BvbVf#sD#qcgK$VC1nir>|PvUwGqMwY7!jnoU~hDj>-} zzIylXhkp+IJ@DJZ$>VQ`ZyC4%J*|-G^_bWPDcmm*O9Y+Q7Ap zG#YZa7Pe7mYW4(y)YkTiq-fs@G<4RyM-*4yB)X4%mY#lL3GDKEdVyUrihk-bl=ZtE zp=j1W54Dr#C@8VrnBHn9(3Lm<@fDdZW@a~tY z_`h0z68N53X5Rk*A|9>isyhnN@wwHtg}>4~GZb^SlWb+uYTd(&NN>nps;9BF+`S#|s({;y(4sIm)cmrSeAcj9|G}&6;`%gIm@cR@Tpv zqu4It67(Q+K~pxZbK;*8$00(N=zP0)6Yiq+81*%iuUw_v@o2hA{{W&v@{E7WSMJB! zyN`$ZMZS!KRk$Ka2-|L_sXg29sHmka7TtfysI;B_<7eXgrjPKYbi#8j%;>H49OLk> z0X~)L{{SDak4j(|G~w2e7Igb}yuY`# zjY)Z=Q~-ONSJB$Fygz8PvvL;GPk~IQwh?*!&3MPb-8=h3$My?@<=bw#e2&UE{cF>H zDQaKY-W`@TIJwjb-;Sa&RRwo<&`(5pM~L-Fbx#o9>e)XupS%A6XR!S%rtr1F(R>4{ zYna(R{HtMXM_s*SKaFuLjv6@8OGz4}Ku1}E*4?)-UplILtgLwY{YDTvE%W$~Ib$-?4mpT>9-X^@# zN%HPv-c=jEIj+xE)P(4+9F7WSKgOpkPw{+LHu}bei0wz^o>U>H1i;=K=M zr3B7ScBIcYwvtaMu_t^-b~DeR6(hUHBzF;UBupey25@tlzv8sKavB*J`IM?%b)zZY#X_ZK+=P zXT%X5Lf%Lww{Npw+rLt$gOT*C9TypDY^o--JPJtKCTQJCx|}fdAk%pDHQoGj@ZxxH z;w|(x!!|dVy0dP@AD__I3&(yd0??V`tu8Vs!1bk2XaY-FrM0?>>INw+QV9`-mr_P8U?zdc3LA3M( zkk%Ia!usn;56=Xnr&XCf4QK0GZN1H^>iSa?Xy+`w;cnpjS7+h~Ad+eHjZ5T(oA)yw zu)ksSHN@JTN5i_but@{U4@pz1x_Z}i8fx7i;LcesZnyl)Iu^CWHW%~AJiK``gNA{# z!Bgp9QU1nvBJ0M!BbMd>FaH3upbv2$`nl80Y&JVLt$f9Kp;+9iUfRvF-f#7C4t$pW z>w8zfe!$Y+N8@i5X}4tN9X=LZ^O5E^Ao^C7+@ndxUwJfAbrVC=Mev`&bkw|0;vX*i z#5b3>6585-7tJd&pJ9S4!TfLHzY+XL@kgI<(p*a;V&2_35wD_(cZ#I(7mmIpYUo;f z+n?{omTAE16knij%Xu+>*xA zOZZEs3!A9n)cj>Md*QZh6|!7#@9N%*T<(dY-|Lt1_@Bh`Pjf8tf{?c_JDz}je?eC~ zJEAzaeS5@aOUvt-G8Fvm?t20JP5i3ojXY31FK%N)6Kn2-C|*-fL)Z@Qj{U2nl|nqs z#_n#&PaF8Z{t-(i)2$_jU20hH!awzPQU3sU-TiCJ{53WEUri)4$gxU#>Y4qE_=DI^Wb)gwmVNU({VONphNu0h;yFsW@?$#` zb_y%D_+k@4_$t?BK%Y^XM@$Y%^cCe=)9;o>2Q4$;A3!?QrKP)xvd4g};<@oeH+Nv0 zYc*@hk8CLUMRPj7p(drQU1}4vG`ABopTzJ#D(aQSlkoQL>ls(5L zTycUB)z!^IqIui&&Hb{BgHZ52tRdy0?G*W93R%S zbt%T4+D4LxA7-}=AoOSC=kTp>jP^$7z&aMFtCod|IUn6_pRGjV(`j@?Md@?L@@YZM zFrH`zvMhTZdeP}cA?ZL1#UVK2lcgPc@jwraS=muR%N?WZUj46Ij}CYzPSOX+(c39} zcV-zi73zN&Z%mf)$iFUfxE+A#Dw4WkdmeoR^BYT- z4}@7(Kndjfky_e<9ZTW0#kd)pNxa^K9!ziTS^9ge&xOI-h2Xj|vBx_k9DcQ-;3-76 z(`nM7M}EV`|t-R=>} z!Z#rFZpOECD@iV`^}i03XJ$h@Y6nJMwaLO5M#JthoUf{|tlDszm-V4*-it@7_-V4^;aqPTlrTxYpv>y<7>&a`-YnCc}iTnjAe%a;4DmS#F>P-h{W^^AKU^=gW z^tIi0c477D84F%-hNJJwICEFx6*Ix@#>$ z-tsb4p_OC=dV(pZXK+4?__yKaYj@PFm&|ns&P;Gca6S~)V0)PCuf%dN`EBKwxbGYP z07G8Ud3z1rg_P1V`FED~PBY1FV_v2E97}!kz0K8P|6MEO7P1$ot=5o|p z^0Q0CnmYJ(zqYi6Y4kgzw(`{d>t^l`vFvNzKVn$y$BFg%tpSxJ)8Z>RY@NPiVLuA- zZwPDNat%K4$8cniYM13NWAr|bE8Kr$odD?mI`J*Vgyvl)>raWI4b~|<*2)p=D{Mpk z%eKtUlKtvDzs4HQmGJ8CRMPxAvhT#Vcee&siVT04WjB-5$?X2V%8EfkM^pUhpZunAMK4mVg$~_KgQMG_yniOB#$zz5VrfD?17-jy?Z9&vV#@&o5+9-fH{7rdlokmkT zpDStyf_TPZapJvJUe9*;{P9@_uR~JYNYdQPGn|)^n?AWFqt7+WwKN6mN)?=iPrSzi z>S-6HZ1^U?>YgvsY`XckOP`?U`cMb7_^%pggLJ(icox=ZfDiAHl7CwA4O#b0+YSoi zH2RwLABs0YZl&6Igl$}O&ua4%4Zqn%+g>M`6okFL32b!_pRH*Rd67L44~w-?dTgv? zK#*8MA__a6q}6W=S^ofNYxZ`>m1zNN`VLK3wv8r=>gscyqyGRNHMQVl9iY^;MpK(> za;Q&D&BbVwl|kRInk^cY+s0V*a<2M|7Qg-*H2akGAde8!3((~&<>rX}QM@j(o4}cnT zH2TiCR|#ouBSZevfAy(+ZF%;+D(mJ1#Xd$)O6xuv*|v-D>L_ISX4F;ZBh^pcuQs~4 z`$5!g^OEV152!V@HL~w=ChVC9gP+ffRIvw{AoCP|w7k`u3z2E5t^8RYOwrB8V24bwmfB$-n{y*RQf6b2RDCN~ z#uhWn;R{(VhTGd0Hj|(r?PclDdc*N6e`xq`O4bx+SijMyBzknMs;j4N*E6TOH*|eA zeGJ;!O?z!JYIfrG)I%U+8UE{f8oS|mtdm#2@Xo7m_NyzvZmr`78ITO%9>%=t((UbT zE$)<(VPG+yp!$1PZLhqB*3(ZbahG6D27pt0kh%9G~LB+>cTF{tzm zPeN%AQW#T5UI7&%jpQpFZa579ya4T3JXZGg={nT%pTg@XPDR@~U?2aj9Ee z>DrZy%pzT^T?i5RKKCgQ@+MA-kVWnD4fpD43W} zuN}pGG5ZwiHy1uB@g0@?azlL$ga$>y2_P=mkPlPdxosQ7+HZ<{Ej+dti>Hw0IN|ex zv?>qYKU(!a*`n&y_@7a*^OpYh4KhDE`vWXI*1}|U$E|Nta+N7rXk|_|noo1)PZDaD zejC+wYv0{Vs!OO`i%3T)0P|lieOT9;JeRt*qQtY!aWfVqoRjKLwO#Q-+~4@$TMDf! zolfWsb{=!oml8*z*uAVQ8u~$rq#wXPx<9QGsOtOANTEg?n{H>{tQNR}GrC0KkE?g9 zejL)8{#LlS%G*WEjCvnxt)Xd?YS*GQQU-ow>0OLkZPvG}L*X4A3Z!HUnFnF+Y0;*n z`P$KbAyREFRl6+sOGX|n)(qEA_FoTa!+h>W1_xp4O>TIm_xp1036Va_q}vUac87oz zcR%lSKb1+ZU+J2DpBIO;*%B=p&A_>kb-J8&=li0$FBa=d6lOT&+RhH#4uciwLe%2t zBa&B>QHg`&4O7m!Yj|WQvk}uCg1P01{J?=vn8X0M=bB+9xepTd7PZ3h*dPfaKk9KafO=D4)2@$iC z%LAe=2m-w8UUadxv(XWU+hzUr{DA%9dIMgKqgb;h2_v4dQR?_!ZK~sNe zpFNI1Ii(oM$;JgDjt8$wFf-P;nYiloFM&FL+B{z_p#K1N!r7$H`$vIZd7rI&Kfy~i zwD4A=sycx8b9sBe*ik^yL*gC7wdh7x0ka{`85O|H8cTULx+}^He9e!QdskWGeQNJo znlzo05igYx3xE?n>yDNYd#gukpX$>K_;;=09WIPp*HS4@m8QiW2r`}RTT_p)_y!~g z5?@^IKD!pNFVCH*`7vaGL`hp7JdtC#veP0sOG{-^KiWK+(R->-%EZ5UrQCPJwb`lM zUZ1;bZts)p(!E~8R+`Vjnni=i*me_;eMzq^@Va>(7t|+DzjY*b%lY$NSBmcirS*lF zIPxP4*Nz2k70W@g8@)r9_`_nBo->l-CB%2Iq~q#F59%w8&$W85#Y-mCd=sYYNCQ2a z`BO0d>va8V%6;q3PUm2tnqJ>{(g11SDBw3V5(hrH6??pfXQo1>p5|3d5ANsY zKb27m3FUyVU;UW06uj|t`o+qIj?N}X$sBo(r;$x+2SMXKLJcl!2qKeg7SV`+AKe2L z5MSL&a=wLIrAMM&{{Uv|>KGFor(^q$ z)twnA%_rzw)0}RO&%$1H#-FHoed1ZJbjd#1Y_bf83)OyvR_=u_{3PBS)%2+#jvuuv zv~Zxpqjd^BFlxBcwXGuV%g2@$&vT~QpDO-H#|npx5%e`A(T@-K*LAahqF&v|>d@$wSeqH00)w;>{pFhxjAn%{J!tJ3TwWwwhwxsg15-lOc-q zQV-`{-lwWs&mpzBv+|>5s6cfCvo`a}0ads4zggS?e^ji&D=S`2mQKi&tnZ9I9sXcN!*RuY~7g~0s z;yq^n084>jfY`?yL>na-NZAIyUesL+IS)0`*?bf5 zEuNnxgckaMf=G-k4dWBE_2!Bw=6dQJsN=uklD-fB0MDkk{{VwGqy8By;P?Fb>wow& zdMK>R5BOxSgZ}{Y>8<|&;LYo%vG@n@_RGVuXg1dRnpwxVfG?kM&s>@)phh_Tm%bGF zh0U(ASb{m!Q*@s_!r38=Nd*_YvNv32&F+ihUWv@TOob?MTIDxBqOTohw{i1k0&f8kc5 zVQZ^xX_^!WtTibC!1b#0e#)N-C1qx{*7q(jMyDrgD5!FG+-fN;j+Q@xz6p!M*IpWm zZE-Z)p^2kiMe@VzRW3hguZK4pb(M_J>dzgJ#0+%@-lNk!#S~Rea(l947_NjKApM)Z z80)sy@M<=iqy3zpE!O?R0D6r2RxkWAPr>i`^w$3X@MiQ;SQ?=J0ES8UJ^uhcn&18m z-jDcXpM&4?=dJ$$;LYfwfDia&uY>$z(_7=G{7l}vYoCKY3AwY5)_8RXjUo{OZyO~* zz{&4L6fMD{owNO!{uo*6X{g%6t;KMMAg-q-57c+Aui>Y{ZwGul)^$Bs!!TY$KBlU- Y3oXk?pD83@9-Na!6@1T>Nh{p{**vk3?*IS* literal 0 HcmV?d00001 diff --git a/chapter4-homework/public/index.html b/chapter4-homework/public/index.html index 7a81da6..cf4648c 100644 --- a/chapter4-homework/public/index.html +++ b/chapter4-homework/public/index.html @@ -1,21 +1,54 @@ + Chapter 4 homework! - + +

Create page with JS! - +

-
+
+ +
-
+
+
+
+ + + We'll never share your email with anyone else. +
+
+ + +
+
+ + +
+ +
+
-
+
+
+ Card image cap +
+
MIB
+

Men in Black.

+ Watch movie +
+
+
+ \ No newline at end of file diff --git a/chapter4-homework/public/scripts/app.js b/chapter4-homework/public/scripts/app.js index 4ab7f5f..d8f9866 100644 --- a/chapter4-homework/public/scripts/app.js +++ b/chapter4-homework/public/scripts/app.js @@ -1,5 +1,5 @@ (function(){ - alert('remove me!') + alert('remove me!'); // add here following boostrap elements @@ -7,7 +7,8 @@ // http://getbootstrap.com/docs/4.1/components/buttons/ // login form - // http://getbootstrap.com/docs/4.1/components/forms/ + // http://getbootstrap.com/docs/4.1/components/forms/А // card -})(); \ No newline at end of file + +}()); \ No newline at end of file