Inlognaam:
Wachtwoord
AO2A & AO2B lessen en huiswerk
Lessen bij Client Side Programming 2
AO2:
Onderstaande opdrachten leiden uiteindelijk tot 1 eindproduct, maar:
Maak alle opdrachten wel een aparte mappen aan zodat ze per opdracht beoordeeld kunnen worden!!

Opdracht 1 Formulier validatie en dynamic HTML
Zie voor opdracht 1 onderstaand GoogleDoc
Dynamic forms, JSON, Ajax, jQuery ( Klik hier voor het Google-Docs document met de vragen:
Opdracht 2.1 JSON => JS => HTML
Bouw met Javascript een HTML tabel op (met bijv. htm += "<tr>";) van de 750 biertjes
  1. Zet de <table> nog gewoon in de HTML
  2. Loop door de 750 biersoorten heen met JS en maak met createElement steeds een <tr> aan
  3. Voeg met append daarin een <td> toe (probeer eerst met een dummy tekst)
  4. Voeg de tr met een append aan de <table> toe
  5. Zet alle velden van de biertabel er in
Opdracht 2.2 Een eerste API
Een API (Application Programming Interface) is een bestand die data levert voor een applicatie. Zo bestaat er bijvoorbeeld een API voor weergegevens die wereldwijde GPS-coordinaten accepteert en vervolgens de actuele weergevens van die plek teruggeeft. De opmaak van de teruggeven data is vaak JSON, maar kan ook XML of ander opmaak hebben. In deze opdracht maak je zelf een simpele API.
  1. Maak een PHP bestand aan met 2 PHP arrays, dit wordt je API die verschillende gegevens kan leveren. De arrays bevatten beide alle velden van jouw formulier uit opdracht 2, met 2 verschillende personen. Het moet een associatieve array zijn bijv.:
    		$aPersoonA = array("vnaam"=>"Chris", "tv"=>"", "anaam"=>"Stegeman", "adres"=>.... );
    		$aPersoonB = array("vnaam"=>"Jan", "tv"=>"van", "anaam"=>.... );
  2. Kopieer het je hele formulier uit opdracht 1 in deze opdracht en voeg 2 buttons toe: "A" en "B".
    Als je op button A drukt moet persoonA vanuit de API in het form geladen worden, druk je op B, persoonB.
  3. Zorg dat je met button A een AJAX-request uitvoert op je API met bijv. de volgende URL: mijnAPI.php?pers=A.
    Wanneer je dan in mijnAPI.php opneemt:
    if($_GET["pers"] == A)
    geef je bij een druk op knop A een json_encode van $aPersoonA terug en zo ook met knop B
  4. Zorg dat je bij de return-value van de AJAX request (de JSON van persoon A of B), een functie aanroept die door die JSON heen loopt en alle values van die persoon in het formulier plaatst (zoals bij opdracht 1B op het laatst ook gebeurd)
Opdracht 3 MySQL => API
Gebruik voor deze opdracht deze MySQL dump van een biertabel met 750 biertjes, of gebruik een eigen MySQL:-table met minimaal 30 rijen en 5 velden.
  1. Lees met PHP een MySQL tabel uit en plaats deze met PHP in een <table>
  2. Maak een aparte API-file, die de data uit de tabel haalten in een array terug geeft. Include deze (later geeft deze API alleen een JSON terug).
Opdracht 4 HTML-build met JSON vanuit eigen API
  1. Zet je eigen bier-database online en schrijf een API die hem uitleest.
  2. zet in de <body> een lege <table>-tag (zonder <tr>'s) en geef die een id mee
  3. Maak 3 functies:
    • een functie* die het AJAX-request op alle 750 biertjes uitvoert op jouw server
    • een functie die met de JSON uit de vorige opdracht de tabel vult via innerHTML (botte methode)
    • een functie die met de JSON uit de vorige opdracht de tabel vult via createElement
  4. Voeg 2 buttons* aan de <body> toe waarmee je de op innerHTML en de createElement methode, de <tr>'s toevoegd aan de table.
*Bekijk de voorbeelden in deze lesbrief om te zien hoe je met beide buttons de AJAX-functie afvuurt en de innerHTML- of createElement-functie als parameter mee kan geven.
Opdracht 6: toepassen van jQuery
Kopieer de de hele vorige opdracht (HTML en JS) en vervang zo veel mogelijk Javascript door jQuery oplossingen.
Verplichte onderdeel
  1. Het AJAX-request moet met jQuery
  2. Dynamische opbouw van de hele table met alle biereigenschappen via jQuery append e.d.
  3. Als bovenstaande werkt (!), kopieer je de file(s) en bouwt hem om zodat de veldnamen en titels van biereigenschappen uit een array komen.
    • maak een array van objecten waarin je de biereigenschappen opslaat, iets als:
      var aItems = [ { field:"naam", title:"Biernaam" }, { field:"brouwer",..}, ..]
    • zorg dat in jouw script nergens een eigenschap van bier meer voorkomt, maar vanuit deze array en het AJAX-request opgebouwd kan worden
  4. Maak een andere tabel met een paar records en gebruik hetzelfde script (met een aangepaste array van objecten) om ook die tabel weer te geven
Basivoorbeelden in jsFiddle vind je hier
Opdracht 7: Frontend 2: Modal-dialog-box
Bouw met HTML en CSS een modal-dialog-box
Hier vind je een voorbeeld zoals jij die later ook op je (bier) tabel gaat toepassen. De dialog verschijnt op een zelfde manier als de Bootstrap dialog, dit moet anders in deze opdracht!
De basisuitwerking in jsFiddle vind je hier
  1. Bouw de dialog met de volgende kenmerken:
    • een zwart-transparante overlay die voor je content ligt
    • een dialog met header, conent en footer, die weer voor je overlay ligt
    • een close button in de header zodat je hem weg kan klikken
    • gebruik Javascript om de css kenmerken aan te passen om hem te tonen of te sluiten
    • gebruik css-transition (geen jQuery!! om de dialog geanimeerd binnen te laten komen
      • of infaden van volledig transparant, of inzomen van klein naar groot
      • overlay moet langzaam opkomen
    • inhoud van content, header en footer mag nog statisch zijn
  2. Maak de dialog versleepbaar
Opdracht 8: FE2: Dialog in Javascript (m.b.v. jQuery)
De HTML van de dialog stond in de body, deze wordt uit de body gehaald en met Javascript, dynamisch opgebouwd
  1. Schrijf een functie function buildHtmlDialog() of iets dergelijks en roep deze aan in de body-tag: <body onload="buildHtmlDialog()">.
    Schrijf in de functie eerst een console.log() en test of hij werkt bij het openen van de pagina.
  2. append met jQuery de dialog <div> aan de body met de header content en footer van de dialog.
    Set de classname van de buitenste div zodat met het bestaande css de dialog opgemaakt wordt
  3. append met jQuery de overlay <div> aan de body met de header content en footer van de dialog
    Set de classname en zodat je het bestaande css voor de overlay toe past
Opdracht 9: FE2: Dialog volledig (inc. CSS) in Javascript
In de vorige opdracht waren er nog aparte CSS-rules nodig voor de opmaak van de dialog
  1. neem alle CSS-rules op in je Javascript zodat de hele dialog (HTML en CSS) met door het script my-dialog.js geschreven wordt
Opdracht 10: Vul content dialog, dynamisch vanuit JSON
  1. Geef aan de knop waarmee je de dialog opent een JSON-object met teksten voor Header, Content en Footer mee.
  2. Zorg dat bij openen van de dialog de Header, Content en Footer gevuld worden met de teksten
Opdracht 11: Twee typen content: tekst en table
Afhankelijk van het type content, moet er gewoon tekst in de dialog gezet worden of een array
  1. Geef aan een tweede knop het type "array" mee en een JSON-object met een 2 dimensionale array
  2. Pas je Javascript zo aan dat hij controleert wat het type content is, als het een array is, bouwt hij een HTML table op en plaatst de waarden.
Opdracht 12: 3 verschillende typen content: tekst, table en form
  1. Plaats inde body een formulier (voor gebruik in de diaslog) en geef deze een id mee
  2. Voeg een derde knop toe
Opdracht 13: Toepassen dialog op Biertabel
Haal de opdracht van de biertabel op. De tabel werd dynamisch in Javascript opgebouwd vanuit de API
Voorbeeld van biertabel met met CRUD-buttons: link.
  1. Voeg aan elke <tr> een data-object toe met alle gegevens van dat biertje
  2. Voeg aan de HTML van de biertabel 3 knoppen toe: info, wijzig en delete
  3. Zorg dat bij elke druk op 1 van die knoppen de dialog verschijnt
  4. Bij info gebruik je de "array" functie van de dialog zet je alle eigenschappen van dat biertje in een <table>
  5. Bij wijzig gebruik je de "html" functie van de dialog zet je een form vanuit de body in de dialog.
  6. Bij delete gebruik je de "html" functie van de dialog zet je een form vanuit de body in de dialog.
Opdracht 14: API aanpassen voor CRUD bewerkingen
Voordat de API zo aangepast wordt dat we wijzigingen in de database kunnen aanbrengen, moet eerst de site beveiligd worden.
  1. Bouw een HTML-inlog-form in je body en leg een button in de header waarmee je jouw dialog met inlogform kan tonen.
  2. Zorg dat bij inloggen een PHP-sessie-variabele geset wordt waarin vastgelegd is met welke rol er ingelogd is (admin (die mag wijzigen) of andere)
Pas de API zo aan dat:
  1. Wanneer er op de delete knop wordt gedrukt (en de admin is ingelogd!), de API dat record verwijderd
  2. Wanneer er bij wijzigen op opslaan wordt gedrukt, de API dat record aanpast en meteen weer opvraagt en teruggeeft met nieuwste waarden
Opdracht 15: API aanpassen: per 20 bierrecords nieuwe pagina
Je toont maximaal 20 biertjes per pagina
  1. Voeg 2 knoppen toe "terug" en "verder" om de volgende of vorige 20 biertjes te zien
  2. Pas de API zo aan dat hij bij een opvraag alleen de volgende of vorige 20 biertjes verstuurd
Deltion college