Slide 1

Slide 1 text

MODERN JAVASCRIPT FOR PHP DEVELOPERS Derek Binkley - @DerekB_WI – [email protected]

Slide 2

Slide 2 text

 Harassment includes offensive verbal comments related to gender, age, sexual orientation, disability, physical appearance, body size, race, religion, sexual images in public spaces, deliberate intimidation, stalking, following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention.  Participants asked to stop any harassing behavior are expected to comply immediately.  Sponsors are also subject to the anti-harassment policy. In particular, sponsors should not use sexualised images, activities, or other material. Booth staff (including volunteers) should not use sexualise clothing/uniforms/costumes, or otherwise create a sexualised environment.  If a participant engages in harassing behavior, the conference organisers may take any action they deem appropriate, including warning the offender or expulsion from the conference with no refund.  If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of conference staff immediately. Conference staff can be identified as they’ll be wearing branded t-shirts.  Conference staff will be happy to help participants contact hotel/venue security or local law enforcement, provide escorts, or otherwise assist those experiencing harassment to feel safe for the duration of the conference. We value your attendance.  We expect participants to follow these rules at conference and workshop venues and conference- related social events. @DerekB_WI

Slide 3

Slide 3 text

ABOUT ME Lead Developer at National Conference of Bar Examiners Father of three Home pizza chef @DerekB_WI

Slide 4

Slide 4 text

WHAT WILL WE LEARN Using Javascript for Quick Prototyping Ways to Incrementally Add Functionality to Existing Pages Object Oriented Design Testable and Modular Design @DerekB_WI

Slide 5

Slide 5 text

 Early on we wanted to add functionality to our static pages  But browsers do not agree  Plugins for functionality, Flash, ActiveX  Big libraries start to evolve, Dojo, YUI @DerekB_WI

Slide 6

Slide 6 text

 Selectors use same syntax as style sheets.  Allows for manipulation of DOM  Bind to events  Add-Ons for UI enhancements AJAX also takes center stage. @DerekB_WI

Slide 7

Slide 7 text

MAKING IT MODERN @DerekB_WI

Slide 8

Slide 8 text

 Using the built in capabilities of the browser.  Standard core of ECMAScript  Many online references @DerekB_WI

Slide 9

Slide 9 text

ALL ABOUT THE BROWSER  For this talk we are only concerned with the browser.  Complementing not replacing PHP  Lots of browser tools for developers  For this talk we are not looking at a single page app or server side JS @DerekB_WI

Slide 10

Slide 10 text

FIREFOX WEB CONSOLE  Ctrl + Shift + K opens browser console. @DerekB_WI

Slide 11

Slide 11 text

CHROME DEV TOOLS  Ctrl + Shift + I opens browser console. @DerekB_WI

Slide 12

Slide 12 text

LET'S GET TO SOME CODE

Slide 13

Slide 13 text

@DerekB_WI

Slide 14

Slide 14 text

@DerekB_WI

Slide 15

Slide 15 text

@DerekB_WI

Slide 16

Slide 16 text

QUICK JAVASCRIPT BASICS

Slide 17

Slide 17 text

 By default scope is global, var makes it local  ECMAScript 6 introduces let for block level scoping.  Console lets you print lines – quick and easy debugging  Prototype based not class based – inheritance differences @DerekB_WI

Slide 18

Slide 18 text

@DerekB_WI

Slide 19

Slide 19 text

@DerekB_WI

Slide 20

Slide 20 text

In PHP, we would separate into re-usable, carefully designed objects. So let’s try it in JavaScript.

Slide 21

Slide 21 text

OBJECT FOR DATA @DerekB_WI

Slide 22

Slide 22 text

OBJECT FOR VIEW @DerekB_WI

Slide 23

Slide 23 text

OBJECT FOR VIEW – LIST @DerekB_WI

Slide 24

Slide 24 text

OBJECT FOR VIEW – INITIALIZE & REFRESH @DerekB_WI

Slide 25

Slide 25 text

BROWSER STORAGE  LocalStorage persists  SessionStorage tied to browser tab  Same origin policy for security, e.g. http://www.example.com @DerekB_WI

Slide 26

Slide 26 text

BROWSER STORAGE EXAMPLE @DerekB_WI

Slide 27

Slide 27 text

BROWSER STORAGE EXAMPLE @DerekB_WI

Slide 28

Slide 28 text

A PATTERN DEVELOPS

Slide 29

Slide 29 text

 An alternative to Model View Controller  Well suited for browser based development  Model doesn’t interact directly with View @DerekB_WI

Slide 30

Slide 30 text

THERE IS EVEN MORE TO ADD

Slide 31

Slide 31 text

 Examples using Knockout JS  Declarative data binding updates html in real time.  Works inside standard html tags  View object gets replaced by html parameters  Vue.js is an alternative @DerekB_WI

Slide 32

Slide 32 text

@DerekB_WI

Slide 33

Slide 33 text

@DerekB_WI

Slide 34

Slide 34 text

@DerekB_WI

Slide 35

Slide 35 text

@DerekB_WI

Slide 36

Slide 36 text

@DerekB_WI

Slide 37

Slide 37 text

@DerekB_WI

Slide 38

Slide 38 text

@DerekB_WI

Slide 39

Slide 39 text

UNIT TESTING  By following separating concerns your code is now unit testable  Many tools out there but beyond the scope of this talk  http://qunitjs.com/ - from Jquery team  https://jasmine.github.io/ - Behavior driven testing @DerekB_WI

Slide 40

Slide 40 text

Give feedback at https://joind.in/talk/9a733 @DerekB_WI

Slide 41

Slide 41 text

Download slides at: https://speakerdeck.com/derekb/modernjava scripttalk @DerekB_WI

Slide 42

Slide 42 text

 http://vanilla-js.com/  https://developer.mozilla.org/en-US/docs/Web/JavaScript  https://msdn.microsoft.com/en-us/library/d1et7k7c(v=vs.94).aspx  http://javascriptissexy.com/javascript-objects-in-detail/  http://www.codeproject.com/Articles/278901/MVVM-Pattern-Made-Simple  https://www.sitepoint.com/javascript-testing-unit-functional-integration/  https://medium.com/javascript-scene/master-the-javascript-interview-what-s-the- difference-between-class-prototypal-inheritance-e4cd0a7562e9#.l5sawwwsh  Derek Binkley - @DerekB_WI – [email protected] @DerekB_WI