├── Workshops ├── README.md ├── Workshops-2015 │ ├── forum-live │ │ ├── public │ │ │ ├── doncho.minkov │ │ │ ├── templates │ │ │ │ ├── message-add.handlebars │ │ │ │ ├── thread-details.handlebars │ │ │ │ ├── thread-add.handlebars │ │ │ │ ├── threads.handlebars │ │ │ │ └── login.handlebars │ │ │ └── js │ │ │ │ └── templates.js │ │ ├── .bowerrc │ │ ├── package.json │ │ ├── bower.json │ │ └── utils │ │ │ └── user-authentication.js │ ├── shop-app │ │ ├── app │ │ │ ├── templates │ │ │ │ ├── home.handlebars │ │ │ │ ├── login-logout.handlebars │ │ │ │ ├── login-old.handlebars │ │ │ │ ├── login.handlebars │ │ │ │ └── shops.handlebars │ │ │ └── scripts │ │ │ │ ├── converter.js │ │ │ │ ├── notifier.js │ │ │ │ └── templates.js │ │ ├── favicon.ico │ │ ├── package.json │ │ └── bower.json │ └── forum-workshop-template │ │ ├── .bowerrc │ │ ├── public │ │ └── index.html │ │ ├── package.json │ │ ├── bower.json │ │ └── utils │ │ └── user-authentication.js ├── Workshops-2017 │ ├── LiveDemo_2-May-2017_Self_Manager │ │ ├── .jshintrc │ │ ├── public │ │ │ ├── templates │ │ │ │ ├── users.handlebars │ │ │ │ ├── home.handlebars │ │ │ │ ├── todo-add.handlebars │ │ │ │ ├── todos.handlebars │ │ │ │ ├── register.handlebars │ │ │ │ └── events.handlebars │ │ │ ├── controllers │ │ │ │ ├── homeController.js │ │ │ │ ├── notificationsController.js │ │ │ │ └── helpers │ │ │ │ │ └── controller-helpers.js │ │ │ ├── css │ │ │ │ └── main.css │ │ │ └── app │ │ │ │ ├── templates.js │ │ │ │ └── json-requester.js │ │ ├── utils │ │ │ ├── id-generator.js │ │ │ ├── authorized-user.js │ │ │ └── auth-key-generator.js │ │ ├── polyfills │ │ │ └── array.js │ │ ├── package.json │ │ ├── app.js │ │ ├── LICENSE │ │ └── routers │ │ │ └── categoriesRouter.js │ ├── Workshop_25-April-2017_Self_Manager │ │ ├── .jshintrc │ │ ├── .bowerrc │ │ ├── utils │ │ │ ├── id-generator.js │ │ │ ├── authorized-user.js │ │ │ └── auth-key-generator.js │ │ ├── package.json │ │ ├── polyfills │ │ │ └── array.js │ │ ├── app.js │ │ ├── LICENSE │ │ └── routers │ │ │ └── categoriesRouter.js │ └── LiveDemo_20-April-2017_Fortune_Cookies │ │ ├── .jshintrc │ │ ├── public │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── myCookie.js │ │ │ │ └── home.js │ │ │ ├── templates.js │ │ │ ├── data.js │ │ │ ├── requester.js │ │ │ ├── app.js │ │ │ └── system-config.js │ │ ├── templates │ │ │ ├── auth.handlebars │ │ │ └── home.handlebars │ │ ├── css │ │ │ └── main.css │ │ └── index.html │ │ ├── utils │ │ └── authorize-user.js │ │ ├── controllers │ │ ├── categories-controller.js │ │ └── my-cookies-controller.js │ │ └── package.json └── Workshops-2016 │ ├── 03. Unit-testing │ ├── .bowerrc │ ├── public │ │ ├── js │ │ │ └── templates.js │ │ ├── templates │ │ │ ├── cookie-add.html │ │ │ ├── login.html │ │ │ └── home.html │ │ └── css │ │ │ └── main.css │ ├── utils │ │ └── authorize-user.js │ ├── controllers │ │ ├── categories-controller.js │ │ └── my-cookies-controller.js │ ├── bower.json │ └── package.json │ ├── 02. Creating-SPA-apps │ ├── .bowerrc │ ├── public │ │ ├── js │ │ │ └── templates.js │ │ ├── templates │ │ │ ├── cookie-add.html │ │ │ ├── login.html │ │ │ └── home.html │ │ └── css │ │ │ └── main.css │ ├── utils │ │ └── authorize-user.js │ ├── controllers │ │ ├── categories-controller.js │ │ └── my-cookies-controller.js │ ├── bower.json │ └── package.json │ └── 01. HTTP & AJAX Workshop - Forum │ ├── .bowerrc │ ├── bower.json │ ├── package.json │ └── utils │ └── user-authentication.js ├── Sample Exams ├── README.md ├── self manager │ ├── .jshintrc │ ├── .bowerrc │ ├── public │ │ ├── templates │ │ │ ├── users.handlebars │ │ │ ├── home.handlebars │ │ │ ├── todo-add.handlebars │ │ │ ├── todos.handlebars │ │ │ ├── register.handlebars │ │ │ ├── events.handlebars │ │ │ └── event-add.handlebars │ │ ├── controllers │ │ │ ├── homeController.js │ │ │ ├── notificationsController.js │ │ │ ├── helpers │ │ │ │ └── controller-helpers.js │ │ │ └── usersController.js │ │ ├── css │ │ │ └── main.css │ │ └── app │ │ │ ├── templates.js │ │ │ └── json-requester.js │ ├── utils │ │ ├── id-generator.js │ │ ├── authorized-user.js │ │ └── auth-key-generator.js │ ├── package.json │ ├── polyfills │ │ └── array.js │ ├── bower.json │ ├── app.js │ ├── LICENSE │ └── routers │ │ └── categoriesRouter.js ├── Exam 2015 - Fortune Cookies │ ├── .jshintrc │ ├── solution-doncho │ │ ├── categories │ │ ├── .bowerrc │ │ ├── utils │ │ │ └── authorize-user.js │ │ ├── public │ │ │ ├── templates │ │ │ │ ├── home.handlebars │ │ │ │ ├── register.handlebars │ │ │ │ ├── cookie-add.handlebars │ │ │ │ └── my-cookie.handlebars │ │ │ ├── js │ │ │ │ ├── app │ │ │ │ │ ├── polyfills │ │ │ │ │ │ └── array.js │ │ │ │ │ ├── templates.js │ │ │ │ │ ├── json-requester.js │ │ │ │ │ └── validator.js │ │ │ │ └── controllers │ │ │ │ │ ├── users.js │ │ │ │ │ └── helpers │ │ │ │ │ └── controller-helpers.js │ │ │ └── css │ │ │ │ └── main.css │ │ ├── controllers │ │ │ ├── categories-controller.js │ │ │ └── my-cookies-controller.js │ │ ├── package.json │ │ └── bower.json │ └── template │ │ ├── utils │ │ └── authorize-user.js │ │ ├── bower.json │ │ ├── controllers │ │ ├── categories-controller.js │ │ └── my-cookies-controller.js │ │ └── package.json └── Exam 2014 - Crowd Share │ ├── crowd-share-rest-api │ ├── public │ │ ├── css │ │ │ └── site.css │ │ ├── js │ │ │ ├── notifier.js │ │ │ ├── validator.js │ │ │ ├── templates.js │ │ │ ├── templates │ │ │ │ ├── login.handlebars │ │ │ │ ├── register.handlebars │ │ │ │ └── posts.handlebars │ │ │ ├── app.js │ │ │ └── cookie.js │ │ ├── package.json │ │ └── bower.json │ ├── start-server.txt │ ├── .npmignore │ ├── package.json │ ├── app.js │ ├── config │ │ ├── routes.js │ │ └── config.js │ └── app │ │ └── data │ │ └── data.js │ ├── Crowd-Share-Services.docx │ ├── Crowd-Share-Services.md │ └── Crowd-Share-Description.docx ├── Additional-Resources └── README.md ├── Topics ├── 07. Web Storages │ ├── homework │ │ └── README.md │ ├── imgs │ │ └── cookie-monster.png │ └── demos │ │ ├── scripts │ │ └── web-storage-objects.js │ │ ├── 4. web-storages-save-objects.html │ │ ├── 1. cookies.html │ │ └── 3. session-storage.html ├── 06. Handlebars │ ├── demos │ │ └── simple-SPA │ │ │ ├── .bowerrc │ │ │ ├── public │ │ │ ├── templates │ │ │ │ ├── alert.handlebars │ │ │ │ ├── gallery.handlebars │ │ │ │ └── threads.handlebars │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── system-config.js │ │ │ │ └── template-loader.js │ │ │ ├── bower.json │ │ │ ├── package.json │ │ │ └── utils │ │ │ └── user-authentication.js │ └── homework │ │ └── README.md ├── 04. Module loaders │ ├── demos │ │ ├── live-demo │ │ │ ├── app │ │ │ │ └── main.js │ │ │ ├── package.json │ │ │ └── index.html │ │ ├── 2. loopgifs-demo │ │ │ ├── lib │ │ │ │ ├── display-gifs.js │ │ │ │ ├── main.js │ │ │ │ ├── extract-gifs.js │ │ │ │ └── reddit-api.js │ │ │ ├── package.json │ │ │ └── index.html │ │ ├── 1. markdown-component │ │ │ ├── app │ │ │ │ └── app.js │ │ │ ├── package.json │ │ │ └── index.html │ │ ├── 4. persons │ │ │ ├── app-modules │ │ │ │ ├── seed-data.js │ │ │ │ ├── utils.js │ │ │ │ ├── data.js │ │ │ │ ├── person-component.js │ │ │ │ └── main.js │ │ │ ├── package.json │ │ │ ├── bower.json │ │ │ └── index.html │ │ ├── 3. live-demo │ │ │ ├── config.js │ │ │ ├── app │ │ │ │ ├── storage.js │ │ │ │ └── db.js │ │ │ ├── package.json │ │ │ ├── index.html │ │ │ ├── bower.json │ │ │ └── README.md │ │ └── cheat-sheet.txt │ └── imgs │ │ └── AMD.png ├── 08. Unit Testing Basics │ ├── demos │ │ ├── live-demo-28-september │ │ │ ├── demo.js │ │ │ ├── package.json │ │ │ ├── index.html │ │ │ └── cart.js │ │ ├── html-reporter │ │ │ ├── sum.js │ │ │ ├── bower.json │ │ │ ├── index.html │ │ │ └── package.json │ │ ├── live-demo │ │ │ ├── app │ │ │ │ └── app.js │ │ │ ├── package.json │ │ │ ├── bower.json │ │ │ └── index.html │ │ └── other-reporters │ │ │ ├── app │ │ │ └── app.js │ │ │ ├── package.json │ │ │ ├── tests │ │ │ └── tests-sum.js │ │ │ └── results.html │ ├── open.js │ └── package.json ├── 03. Consuming Web Services │ └── demos │ │ ├── data.json │ │ ├── partials │ │ └── details.html │ │ ├── server │ │ ├── package.json │ │ ├── tools │ │ │ ├── id-generator.js │ │ │ └── validator.js │ │ └── app.js │ │ ├── 1. using-xhr-object.html │ │ ├── bower.json │ │ ├── 5. http-requst-method.html │ │ ├── 2. using-xhr-ready-states.html │ │ ├── 8. jquery-load.html │ │ ├── README.md │ │ ├── package.json │ │ ├── 3. http-status-codes.html │ │ ├── 4. http-response.html │ │ └── 6. jquery-ajax.html ├── 02. HTTP and AJAX │ ├── imgs │ │ ├── rss.png │ │ ├── xml.png │ │ ├── json.png │ │ ├── client.png │ │ ├── server.png │ │ ├── arrow-left.png │ │ ├── arrow-right.png │ │ └── origin-policy.png │ └── slides │ │ ├── demo.rar │ │ ├── imgs │ │ ├── rss.png │ │ ├── xml.png │ │ ├── client.png │ │ ├── json.png │ │ ├── server.png │ │ ├── arrow-left.png │ │ ├── arrow-right.png │ │ └── origin-policy.png │ │ ├── lib │ │ ├── font │ │ │ ├── league-gothic │ │ │ │ ├── LICENSE │ │ │ │ ├── league-gothic.eot │ │ │ │ ├── league-gothic.ttf │ │ │ │ ├── league-gothic.woff │ │ │ │ └── league-gothic.css │ │ │ └── source-sans-pro │ │ │ │ ├── source-sans-pro-italic.eot │ │ │ │ ├── source-sans-pro-italic.ttf │ │ │ │ ├── source-sans-pro-italic.woff │ │ │ │ ├── source-sans-pro-regular.eot │ │ │ │ ├── source-sans-pro-regular.ttf │ │ │ │ ├── source-sans-pro-regular.woff │ │ │ │ ├── source-sans-pro-semibold.eot │ │ │ │ ├── source-sans-pro-semibold.ttf │ │ │ │ ├── source-sans-pro-semibold.woff │ │ │ │ ├── source-sans-pro-semibolditalic.eot │ │ │ │ ├── source-sans-pro-semibolditalic.ttf │ │ │ │ └── source-sans-pro-semibolditalic.woff │ │ └── js │ │ │ └── html5shiv.js │ │ ├── css │ │ └── imgs │ │ │ ├── logo.png │ │ │ └── dark-bg.png │ │ ├── plugin │ │ ├── markdown │ │ │ └── example.md │ │ └── multiplex │ │ │ └── client.js │ │ └── demo │ │ ├── word │ │ ├── webSettings.xml │ │ ├── _rels │ │ │ └── document.xml.rels │ │ └── fontTable.xml │ │ ├── _rels │ │ └── .rels │ │ ├── docProps │ │ ├── app.xml │ │ └── core.xml │ │ └── [Content_Types].xml ├── 00. Course Introduction │ └── imgs │ │ ├── pic24.png │ │ ├── pic25.png │ │ ├── pic35.png │ │ ├── pic36.png │ │ ├── pic37.png │ │ ├── pic38.png │ │ ├── pic39.png │ │ ├── pic40.png │ │ ├── pic41.png │ │ └── pic42.png ├── 01. Promises and asynchronous programming │ ├── imgs │ │ ├── pyr-1.png │ │ ├── why-so-asynchronous.jpg │ │ ├── i_eat_ajax_for_breakfast.jpg │ │ └── javascript-promises-2-638.jpg │ ├── demos │ │ ├── 3. function-generators │ │ │ ├── 3.1. function-generators.js │ │ │ └── 3.2. advanced-function-generators.js │ │ ├── 2. promises │ │ │ ├── 2.7. geolocation-promises.html │ │ │ ├── 2.6. primes-promises.html │ │ │ ├── 2.1. promise-creation.js │ │ │ ├── 2.3. promise-composition.js │ │ │ ├── 2.4. promise-all.js │ │ │ ├── 2.5. promise-race.js │ │ │ └── 2.2. promise-chaining.js │ │ ├── 1. callbacks │ │ │ ├── 1.4. geolocation-heavy-callbacks.html │ │ │ ├── 1.3. primes-callbacks.html │ │ │ └── 1.1. simple-callback.html │ │ └── 4. async operations │ │ │ └── 4.1. async-operations.js │ └── homework │ │ └── README.md ├── 09. Unit testing - Spies and Mocks with Sinon │ └── demos │ │ ├── spies │ │ ├── package.json │ │ └── test.js │ │ └── live-demo │ │ ├── package.json │ │ ├── mocks.js │ │ ├── spies.js │ │ └── stubs.js └── 05. Routing │ └── demos │ ├── sample-routes │ ├── js │ │ ├── system-config.js │ │ └── main.js │ ├── package.json │ └── index.html │ └── getting-query-params │ ├── js │ ├── system-config.js │ └── main.js │ ├── package.json │ └── index.html └── LICENSE /Workshops/README.md: -------------------------------------------------------------------------------- 1 | # Workshops -------------------------------------------------------------------------------- /Sample Exams/README.md: -------------------------------------------------------------------------------- 1 | # Sample Exams -------------------------------------------------------------------------------- /Additional-Resources/README.md: -------------------------------------------------------------------------------- 1 | # Additional Resources 2 | -------------------------------------------------------------------------------- /Sample Exams/self manager/.jshintrc: -------------------------------------------------------------------------------- 1 | {"esnext":true} 2 | -------------------------------------------------------------------------------- /Workshops/Workshops-2015/forum-live/public/doncho.minkov: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sample Exams/Exam 2015 - Fortune Cookies/.jshintrc: -------------------------------------------------------------------------------- 1 | {"esnext": true} 2 | -------------------------------------------------------------------------------- /Sample Exams/Exam 2015 - Fortune Cookies/solution-doncho/categories: -------------------------------------------------------------------------------- 1 | [null] -------------------------------------------------------------------------------- /Topics/07. Web Storages/homework/README.md: -------------------------------------------------------------------------------- 1 | # Web Storages homework 2 | -------------------------------------------------------------------------------- /Sample Exams/Exam 2014 - Crowd Share/crowd-share-rest-api/public/css/site.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Sample Exams/self manager/.bowerrc: -------------------------------------------------------------------------------- 1 | {"directory": "public/bower_components"} 2 | -------------------------------------------------------------------------------- /Workshops/Workshops-2015/shop-app/app/templates/home.handlebars: -------------------------------------------------------------------------------- 1 |
{{text}}
5 | by {{user.username}} 6 | {{/messages}} 7 | -------------------------------------------------------------------------------- /Topics/02. HTTP and AJAX/slides/lib/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | document.createElement('header'); 2 | document.createElement('nav'); 3 | document.createElement('section'); 4 | document.createElement('article'); 5 | document.createElement('aside'); 6 | document.createElement('footer'); 7 | document.createElement('hgroup'); -------------------------------------------------------------------------------- /Topics/04. Module loaders/demos/3. live-demo/config.js: -------------------------------------------------------------------------------- 1 | System.config({ 2 | transpiler: "babel", 3 | babelOptions: { 4 | optional: [ 5 | "runtime" 6 | ] 7 | }, 8 | map: { 9 | babel: 'node_modules/babel-core/browser.js', 10 | jquery: 'bower_components/jquery/dist/jquery.js' 11 | } 12 | }); -------------------------------------------------------------------------------- /Workshops/Workshops-2017/LiveDemo_2-May-2017_Self_Manager/utils/id-generator.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | var diviser = 1000003; 3 | return (function() { 4 | return { 5 | next: function() { 6 | return (new Date()) % diviser; 7 | } 8 | }; 9 | }()); 10 | }; 11 | -------------------------------------------------------------------------------- /Topics/08. Unit Testing Basics/demos/live-demo/app/app.js: -------------------------------------------------------------------------------- 1 | function sum(numArr) { 2 | if (!numArr) { 3 | throw Error(); 4 | } 5 | 6 | var result = 0; 7 | result = numArr.reduce(function(sum, num) { 8 | return sum + num; 9 | }, 0); 10 | 11 | return result; 12 | } 13 | -------------------------------------------------------------------------------- /Workshops/Workshops-2017/Workshop_25-April-2017_Self_Manager/utils/id-generator.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | var diviser = 1000003; 3 | return (function() { 4 | return { 5 | next: function() { 6 | return (new Date()) % diviser; 7 | } 8 | }; 9 | }()); 10 | }; 11 | -------------------------------------------------------------------------------- /Topics/08. Unit Testing Basics/demos/other-reporters/app/app.js: -------------------------------------------------------------------------------- 1 | function sum(numbers) { 2 | // if (!(Array.isArray(numbers))) { 3 | // numbers = [].slice.call(arguments, 0); 4 | // } 5 | return numbers.reduce(function(s, n) { 6 | return s + n; 7 | }, 0); 8 | } 9 | 10 | module.exports = sum; 11 | -------------------------------------------------------------------------------- /Topics/03. Consuming Web Services/demos/partials/details.html: -------------------------------------------------------------------------------- 1 |This is yet another web app for time management
5 |This is yet another web app for time management
5 |This is yet another web app for time management
5 || 7 | 8 | 9 | | 10 ||
| {{name}} | 17 |18 | Info 19 | {{#if iAmOwner}} 20 | 21 | {{/if}} 22 | | 23 |
17 | Category: {{category}} Date: 18 |
19 |20 | {{shareDate}} 21 |
22 |Likes: 23 | {{likes}} 24 | , Dislikes: 25 | {{dislikes}} 26 |
27 |var actual = sum(1, 2, 3),
6 | expected = 6;
7 | expect(actual).to.equal(expected);var actual = sum([1, 2, 3]),
11 | expected = 6;
12 | expect(actual).to.equal(expected);var actual = sum(),
15 | expected = 0;
16 | expect(actual).to.equal(expected);var actual = sum([]),
20 | expected = 0;
21 | expect(actual).to.equal(expected);