article, header, footer, ... O Novi API moduli za večjo interaktivnost O File, Canvas, WebRTC, WebGL, ... O Novi CSS atributi O transform, animation, transition, ... O ECMAScript razširitve v novejših brskalnikih O Multimedia O <audio>, <video>
(tudi ScriptDebugger) O Mozilla Firefox + Web Developer Tools (tudi Firebug) O Google Chrome + Web Developer Tools O Opera + Dragonfly O Safari + Web Developer Tools
(open- in closed-source) O Gostovanje kode, dokumentacije in orodij za upravljanje s projektom O Gostovanje git repozitorijev O Celoten sistem gosti največje število aktivnih odprtokodnih projektov
Unit test: QUnit, Jasmine, Mocha, ... O UI test: Selenium, CasperJS, ... O Integration test: Selenium, CasperJS, ... O V tej delavnici bomo uporabljali Mocha testno knjižnico za testiranje v brskalniku
Branje dokumenta (parsing) O Ustvarjanje HTML elementov O Prenos vsebine <script> elementov O Izvajanje JavaScript kode O Proženje dogodkov (event) v dokumentu
teče JavaScript koda, se ne izvaja nič drugega (blocking) O Med izvajanjem kode se stran ne odziva na uporabnikova dejanja O Dogodki se prožijo po koncu izvajanja trenutnega run loop-a O Implementacija API-jev odvisna od posameznega brskalnika
objektov O Vse podatkovne strukture so objekti (vključno s primitivnimi tipi), podobno kot pri Javi O Vsi objekti so dinamični in jih lahko koda spreminja po potrebi
O Vsakemu objektu lahko spremenimo lastnosti O Ko metode ni na trenutnem objektu, jo izvajalec išče po verigi prototipov; če je ne najde, vrže izjemo (Exception ali Error)
s pomočjo ključne besede this: var myObject = { name : 'John Doe', sayHello : function() { alert('Hi, my name is ' + this.name); } }; myObject.sayHello();
vse ustvarjene spremenljivke brez var predpone O Vsaka funkcija ob izvajanju ustvari nov kontekst O Konteksti so gnezdeni; če spremenljivke ni v trenutnem kontekstu, išče v naslednjem višjem kontekstu
okoljih, je potrebno zagotoviti varnost, delovanje in okolje, v katerem teče O Z zaščito internih funkcij in vrednosti lahko uspešno zavarujemo izvajanje naše kode na tujih straneh O Idealno v globalni imenski prostor zapišemo največ eno spremenljivko O Primer: jQuery ($), YUI, MooTools, ...
O Statične metode so metode na konstruktorju (this.constructor.*) O Instančne metode so metode na objektu ali verigi prototipov (this.*) O Za klasično dedovanje potrebujemo pomožne funkcije O Več knjižnic na voljo: http://microjs.com/#class
in vsebuje naslednje metode: O getArea() površina O getPerimeterLength() obseg O getBoundingBox() oklepajoči pravokotnik O Napiši razrede z ustrezno hierarhično strukturo: O Rectangle, Circle, Triangle
this kazalec na objekt, na katerem se nahaja funkcija O Kontekst lahko poljubno spreminjamo ob izvajanju funkcije O Če funkcijo izvedemo brez objektne predpone, je this enak window, kontekst ostalih spremenljivk pa je nespremenjen
metode (filter, map, reduce, forEach, ...) O Function.bind() za vezavo konteksta this O Podporto na vseh modernih brskalnikih O IE9+, Chrome, Firefox, Safari, Android, iOS, Opera
števil in izračuna naslednje vrednosti: O vsota O povprečje O minimum in maksimum O standardna deviacija 2 1 1 2 − = ∑ ∑ = = n a n a n i i n i i σ
upravljamo z modelom HTML dokumenta O Preko API-ja vplivamo na vsebino in izgled dokumenta O Ponuja vmesnik za poslušanje dogodkov, ki jih prožita uporabnik ali brskalnik
innerHTML O nodeName O nodeType O offsetLeft, offsetTop O style.* O appendChild(), removeChild() O getElementsBy*() O querySelector*() O insertBefore() O *Attribute*() O addEventListener(), removeEventListener() O focus(), blur(), click()
history, location O navigator.userAgent O parent, top O screen O console.*() O setTimeout(), setInterval() O alert(), prompt(), confirm() O getSelection() O scroll*(), resize*(), sizeToContent() O open(), close() O getComputedStyle() O atob(), btoa()
in dokumentom O Vsa uporabnikova dejanja se prevedejo v dogodke, ki se prožijo na posameznih elementih znotraj dokumenta O Vsakemu elementu lahko pripnemo poslušalce za določen tip dogodka O Dogodkom lahko prekličemo privzeta dejanja in širjenje po dokumentu (bubbling)
ni dogodek preklican) O capture: sproži se na dokumentu in prenaša skozi verigo navzdol do elementa, kjer se je dogodek zgodil O bubble: prenaša se od elementa navzgor po verigi do dokumenta O Poslušalce lahko pripnemo v katerikoli izmed faz
podana addEventListener() O Knjižnice navadno same skrbijo za shranjevanje funkcij v internem seznamu O Izogibajmo se pripenjanju anonimnih funkcij, do katerih nimamo dostopa
po hierarhiji, lahko lovimo dogodke na poti do/od elementa O Namesto pripenjanja na seznam elementov lahko poslušamo dogodke višje v hierarhiji O Boljša performanca aplikacije O Ni treba skrbeti za pripenjanje poslušalcev na novo ustvarjene elemente in odstranjevanje s premaknjenih elementov
starševski element določenega tipa (ali vrne trenutni element, če se ujema) O Napiši event handler za prejšnji HTML primer O Bonus: prepiši prvo funkcijo, da deluje podobno kot filter() funkcija na Array objektih
AJAX klica s pomočjo eval() O Vstavljanje novih <script> elementov O Problemi: O Kdaj so vsi resursi, potrebni za tek aplikacije, na voljo? O Izvajanje kode se vrši na globalnem nivoju O Potencialna varnostna luknja
lahko prožimo HTTP zahteve in beremo rezultate teh zahtev O Omejen s Same-origin varnostnim filtrom O Za meddomensko komunikacijo obstaja CORS ("Cross-Origin Request Sharing") O Obstaja alternativa: JSONP
API modela za vse brskalnike, obnašanje je včasih nekonsistentno med posameznimi različicami O Priporočljivo izvajati ukaze preko AJAX knjižnice, kar zgladi razlike med posameznimi brskalniki