-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
1 lines (1 loc) · 9.82 KB
/
index.js
File metadata and controls
1 lines (1 loc) · 9.82 KB
1
!function(e){var t={};function a(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)a.d(r,i,function(t){return e[t]}.bind(null,i));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e){e.exports=JSON.parse('{"courses":[{"id":0,"step":{"index":0},"title":"Java - ambitny start. Zbuduj aplikację webową!","link":"/course/java-ambitny-start/","referralCode":"56E80735FC5C43577394","logo":"java.jpg","category":"back-end","description":"Pokazanie z czego składa się aplikacja webowa * HTTP, REST, CRUD * Architektura wielowarstwowa * Zajawka front-endu i SQL * ORM - Hibernate * Migracje bazodanowe * Wprowadzenie do testowania"},{"id":1,"step":{"index":1,"optional":"Chcę zgłębić bazy danych"},"title":"Bazy danych w Javie","category":"db","description":"Rodzaje SQL * Modelowanie powiązań * Zarządzanie encjami * SQL z Javy, JDBC * ORM - Hibernate * Migracje bazodanowe * Rodzaje baz NoSQL * Spring Data"},{"id":2,"title":"Java - Spring Framework","link":"/course/spring-pl/","referralCode":"076ED1698FAD5F57A751","logo":"spring.jpg","category":"back-end","description":"Spring Servlet Stack * Spring Data * Spring Security * Aspect-Oriented Programming * Wstrzykiwanie zależności * ORM - Hibernate * Testowanie aplikacji (jednostkowe, integracyjne, e2e)"},{"id":3,"step":{"index":2},"title":"JavaScript i front-end (nie tylko) dla back-endowców","link":"/course/fe4be-pl/","referralCode":"2AFE6D84786CB1CCFE4D","category":"front-end","description":"Node.js * ES6 * Klasy w stylu JS * TypeScript * Wstęp do Reacta * Testowanie i budowanie aplikacji * CSS"},{"id":4,"title":"Fajny JavaScript - zaawansowane techniki ES6+","link":"/course/fajny-javascript/","referralCode":"7479E688776B32AAB63E","category":"front-end","description":"Webpack * Web Components * fetch, Promise, async/await * ESLint * Destrukturyzacja, domyślne wartości * Generatory, Proxy"},{"id":5,"step":{"index":3},"title":"Czysty JavaScript zamiast jQuery","link":"/course/nie-jquery/","referralCode":"C3BB64A90361F15E1927","logo":"jq.jpg","category":"front-end","description":"Warstwa widoku * Manipulowanie CSSem i węzłami DOM * API przeglądarek * Babel * Web Components"},{"id":6,"step":{"index":4,"optional":"Inżynieria oprogramowania - narzędzia"},"title":"IntelliJ - najlepsze praktyki","category":"eng","description":"Generowanie kodu * Współdzielenie ustawień * Skróty klawiszowe * Debuggowanie, refactoring * Wspiercie dla frameworków"},{"id":7,"step":{"index":4,"optional":"Inżynieria oprogramowania - testy"},"title":"Testy automatyczne: jednostkowe, integracyjne, e2e","category":"eng","description":"Filozofia, piramida testów * Java - JUnit, TestNG, Spock * JavaScript - Jest, JSDOM * Test-Driven Development * Testy integracyjne, e2e"},{"id":8,"step":{"index":4,"optional":"Architektura i DevOps"},"title":"Architektura aplikacji - back-end, Java<br/><br/>","link":"/course/architektura-java/","referralCode":"2F9A960416F69ACC455A","logo":"clean.jpg","category":"arch","description":"Refactoring z kuli błota * Modularność * Moduły Mavena * Czysta architektura i DDD * porty i adaptery * Command Query Responsibility Segregation * wzorce"},{"id":9,"step":{"index":5,"optional":true},"title":"Budujemy mikroserwisy!","category":"arch","description":"Spring Cloud * NoSQL * REST API * Komunikacja asynchroniczna, kolejki * Service registration, discovery * Load balancing, Circuit Breaker * Docker * Service Mesh"},{"id":10,"step":{"index":6,"optional":true},"title":"DevOps - praca z kodem, wdrażanie na proda","category":"devops","description":"Kultura pracy z kodem * Budowanie front-endu i back-endu * Hostowanie front-endu i back-endu * Parametry per środowisko * Continous Integration * Docker"},{"id":11,"title":"Frameworki frontendowe: Angular, React, Vue","category":"front-end","description":"Różne podejścia do budowania front-endu * Building blocki, podejścia do architektury * Testowanie"},{"id":12,"title":"Fajna Java - zaawansowane techniki Java 8+","category":"back-end","description":"Moduły * HttpClient * var, Optional * Bloki tekstu, Record * Switch, instanceof * Preview features * Wielowątkowość, java.util.concurrent * Stream, Reactive Stream * Data i czas"},{"id":13,"title":"Spring WebFlux","category":"back-end","description":"Reaktywny Spring * NIO * Reaktywne bazy * Mono, Flux * Nowe kontrolery"},{"id":14,"title":"Wirtualna maszyna Javy, alternatywne języki JVM","category":"back-end","description":"Memory model, Garbage Collector * JMX, diagnostyka * Profilowanie, flame graph * Groovy, Kotlin, Gosu"},{"id":15,"title":"Micro-frontendy","category":"front-end","description":"Web Components * Server-side rendering * ESI, SSI"},{"id":16,"title":"Full-stack JavaScript","category":"arch","description":"Frameworki back-endowe * Logger, metryki * Klient HTTP, bazy danych"},{"id":17,"title":"Integracja systemów","category":"arch","description":"Integracje plikowe * Kolejki, ESB * HTTP: RPC, WSDL, REST, HATEOAS, OData, GraphQL * SDK, klient * Testowanie"},{"id":18,"title":"GraphQL, serverless i cloud","category":"arch","description":"3factor app * Szybki start z GraphQL * Serverless framework"}],"relations":{"extends":[{"from":0,"to":2,"label":"Chcę zgłębić Springa"},{"from":0,"to":12,"label":"Chcę zgłębić Javę"},{"from":12,"to":14,"label":"Jeszcze więcej o Javie i JVM"},{"from":2,"to":13,"label":"Jeszcze więcej Springa"},{"from":9,"to":17,"label":"Chcę zgłębić mechanizmy integracji systemów"},{"from":17,"to":18,"label":"Jeszcze więcej o integracji"},{"from":10,"to":18,"label":"Jeszcze więcej o nowoczesnym wdrażaniu"},{"from":3,"to":4,"label":"Chcę zgłębić JavaScript"},{"from":3,"to":16,"label":"Chcę więcej o backendowym JS"},{"from":3,"to":11,"label":"Chcę zgłębić frameworki"},{"from":11,"to":15,"label":"Chcę zgłębić łączenie frameworków"}],"related":[{"from":15,"to":16,"label":"Pomocny kurs","both":true},{"from":9,"to":16,"label":"Zbuduj mikroserwis w JS"},{"from":15,"to":9,"label":"Powiązany kurs","both":true},{"from":9,"to":13,"label":"Reaktywny Spring"}]}}')},function(e,t,a){"use strict";a.r(t);var r=a(0);const i="https://r53a9vitsc.execute-api.eu-west-1.amazonaws.com/default/udemy";async function n(){const e=sessionStorage.getItem(i);if(e)return JSON.parse(e);const t=await fetch(i).then(e=>e.json());return sessionStorage.setItem(i,JSON.stringify(t)),t}class o extends HTMLElement{constructor(){super(),this.index=0,this.window=+this.dataset.window||3}async connectedCallback(){if(this.classList.add("e-cards","deck"),!this.cards){const e='\n <m3-card data-title="..." data-link="..." data-referral-code="..." data-rating="5" data-num-reviews="?" \n data-logo="empty.jpg">\n </m3-card>\n ';for(let t=0;t<this.window;++t)this.innerHTML+=e;const t=(await n()).data;this.cards=r.courses.filter(({logo:e})=>!!e).sort(()=>Math.random()-.5).map(({title:e,link:a,referralCode:r,logo:i})=>{const{rating:n,numReviews:o,couponCode:c}=t.find(({link:e})=>a===e)||{};return{title:e,link:a,referralCode:r,couponCode:c,rating:n,numReviews:o,logo:i}}).map(e=>{const t=document.createElement("m3-card");return Object.entries(e).filter(([e,t])=>!!t).forEach(([e,a])=>t.dataset[e]=a),t})}this.render()}increment(){++this.index>=this.cards.length&&(this.index=0),this.render()}decrement(){--this.index<0&&(this.index=this.cards.length-1),this.render()}render(){const e=[],t=this.index+this.window;for(let a=this.index;a<t&&a<this.cards.length;++a)e.push(this.cards[a]);const a=this.window-e.length;for(let t=0;t<a;++t)e.push(this.cards[t]);[...this.querySelectorAll("m3-card")].filter(t=>!e.includes(t)).forEach(e=>e.remove()),e.forEach(e=>this.appendChild(e))}}class c extends HTMLElement{constructor(){super()}connectedCallback(){this.classList.add("e-card","white","d-flex");const{title:e,link:t,couponCode:a,referralCode:r,logo:i,rating:n=0,numReviews:o=0}=this.dataset;this.innerHTML=`\n <img src="img/logo/${i}" class="border-bottom" alt="${e} logo"/>\n <div class="card-body d-flex align-elements">\n <h3 class="card-title text-dark">${e}</h3>\n <p><m3-stars alt="${n}" title="${n}" max="5" current="${n}" class="text-primary"></m3-stars> (${o})</p>\n ${function({link:e,couponCode:t,referralCode:a}){return s.has(e)?`\n <a class="e-btn anime plane success fullwidth" href="${s.get(e)}">\n Zapisuję się\n </a>\n `:`\n <a class="e-btn anime plane danger fullwidth" href="https://www.udemy.com${e}?${t?"couponCode="+t:"referralCode="+a}">\n Kupuję\n </a>\n `}({link:t,couponCode:a,referralCode:r})}\n </div>\n `}}const s=new Map([]);class d extends HTMLElement{constructor(){super()}async connectedCallback(){const{coupon:e,deadline:t}=await n(),a=new Date(t);new Intl.DateTimeFormat("pl",{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}).format(a);new Date<a&&(this.innerHTML=`\n <div class="e-alert warning">\n <i class="fas fa-exclamation-circle e-icon"></i> \n Kupuj z kuponem "<strong>${e}</strong>"!\n </div>\n `)}}customElements.define("m3-cards",o),customElements.define("m3-card",c),customElements.define("m3-alert",d)}]);