SlideShare a Scribd company logo
Pavol Hejný
pavolhejny.com
Webové aplikace v
JavaScriptu
27.5.2016 | Praha | ITnetwork.cz
Stránka vs. Aplikace
WWW App
API
server DBDB
View
Controller
WWW
server
Model
HTML
page
Frontend
v JS
Proč?
Rychlost
využití 2D / 3D grafiky
Využití web audio
Využití files API
Webové aplikace v JavaScriptu
http://birds.cz/avif/atlas_nest_map.php?rok=2016&druh=Phasianus_colchicus
http://zastavky.birdlife.cz/
Towns.cz
Towns.cz
develop.towns.cz
develop.towns.cz
develop.towns.cz
develop.towns.cz
develop.towns.cz
Webové aplikace v JavaScriptu
JS
a
HTML
<body>
<p id="itnetwork">ITnetwork</p>
</body>
<script>
var element = window.document.getElementById
("itnetwork");
element.onclick = function(){
element.style.color = '#3B94E0';
}
</script>
DOM
ITnetwork
DOM vs. jQuery
$('#itnetwork').click(function(){
$(this).css('color','#00ff00');
});
var element = window.document.getElementById
("itnetwork");
element.onclick = function(){
element.style.color = '#00ff00';
}
7
var second=11;
var element =window.document.getElementById
("counter");
var interval = setInterval(function(){
second--;
element.innerHTML = second;
}, 1000);
setTimeout(function(){
alert('Ahoj!');
clearInterval(interval);
}
, 11000);
interval, timeout
https://jsfiddle.net/phejny/xjyerkq2/
var start = null;
var element = document.getElementById("ball");
element.style.position = 'absolute';
function step(timestamp) {
if (!start) start = timestamp;
var progress = timestamp - start;
element.style.top = Math.sin(progress/1000*Math.PI)
*100+100 + "px";
element.style.left = Math.cos(progress/1000*Math.PI)
*100+100 + "px";
window.requestAnimationFrame(step);
}
window.requestAnimationFrame(step);
Animation frame
https://jsfiddle.net/phejny/8nLcpffb/1/
5€ je 135,- kč.
var request = new XMLHttpRequest();
var url = "https://api.fixer.io/latest?symbols=CZK";
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200)
{
var response = JSON.parse(request.responseText);
var rate = response.rates.CZK;
document.getElementById('CZK').innerText = Math.
round(rate*5);
}
};
request.open("GET", url, true);
request.send();
XMLHttpRequest
https://jsfiddle.net/phejny/0y6dbyug/1
XMLHttpRequest vs. jQuery
var url = "https://api.fixer.io/latest?symbols=CZK";
$.get(url)
.done(function(response){
var rate = response.rates.CZK;
$('#CZK').text(Math.round(rate*5));
});
var request = new XMLHttpRequest();
var url = "https://api.fixer.io/latest?symbols=CZK";
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var response = JSON.parse(request.responseText);
var rate = response.rates.CZK;
document.getElementById('CZK').innerText = Math.round
(rate*5);
}
};
request.open("GET", url, true);
request.send();
https://jsfiddle.net/phejny/0y6dbyug/3
Sync vs. Async
$.get("https://api.fixer.io/latest?symbols=CZK")
.done(function(response){
var rate = response.rates.CZK;
$('#CZK').text(Math.round(rate*5));
});
$.get("https://api.fixer.io/latest?symbols=USD")
.done(function(response){
var rate = response.rates.USD;
$('#USD').text(Math.round(rate*5*100)/100);
});
<?php
$json = file_get_contents("https://api.fixer.io/latest?
symbols=CZK,EUR");
//...
echo('5€ je '.$CZK.',- kč.');
$json = file_get_contents("https://api.fixer.io/latest?
symbols=USD,EUR");
//...
echo('5€ je '.$USD.'$.');
?>
Sync vs. Async
Event
Event
Výsledek
Výsledek
Angular
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5
/angular.min.js"></script>
</head>
<body>
<div>
<input type="text" ng-model="jmeno_cajovny">
<hr>
<h1>Jsme v čajovně {{jmeno_cajovny}}!</h1>
</div>
</body>
</html>
ECMAScript 5
var Position = function(x,y){
this.x= x || 0;
this.y= y || 0;
};
Position.prototype.getDistance = function(position){
return Math.sqrt(Math.pow(position.x-this.x,2)+Math.pow(position.y-
this.y,2));
};
Position.prototype.toString = function(){
return ''+this.x+','+this.y+'';
};
var multiline_string = (function () {/*
Podle
mě
ten nejhorší
způsob :(
*/}).toString().match(/[^]*/*([^]*)*/}$/)[1];
var multiline_string = `V ES6
to jde
bez problémů!`;
var multiline_string = 'Takhle
d*****e
se musí psát
string na více
řádků.';
var multiline_string = 'Nebo' +
'takhle - s tímhle zápisem alespoň umí' +
'pracovat PHPStorm';
var multiline_string =
['Nebo',
'takhle',
].join('n')
String
ECMAScript 6
var Position = class{
constructor(x=0,y=0){
this.x= x;
this.y= y;
}
getDistance(position){
return Math.sqrt(Math.pow(position.x-this.x,2)+Math.pow(position.
y-this.y,2));
}
toString(){
return ''+this.x+','+this.y+'';
}
};
CoffeeScript
transpiler
Position = (x, y) ->
@x = x or 0
@y = y or 0
return
Position::getDistance = (position) ->
Math.sqrt (position.x - (@x)) ** 2+ (position.y - (@y)) ** 2
Position::toString = ->
'' + @x + ',' + @y + ''
Backend
Proč?
Node JS
Přepínání
Rychlost
Sdílení kódu
REST API
používání WS
PHP vs. Node
● Apache
● Jednotlivé stránky
● node, pm2
● Celý server
Response
● http://www.itnetwork.
cz/software/sublime-text?
nastaveni=123#goto173043
● GET, POST, DELETE, HEAD,...
Body
● status code - 200, 404, 403,...
● mime type - text/html
● cache control
● form data, upload,... ● html, js, css, image, pdf,
video,...
Request
Header
Response Headers
alt-svc:quic=":443"; ma=2592000; v="
34,33,32,31,30,29,28,27,26,25"
alternate-protocol:443:quic
cache-control:private, max-age=0
content-encoding:gzip
content-type:text/html; charset=UTF-8
date:Fri, 27 May 2016 11:46:06 GMT
expires:-1
server:gws
status:200
x-frame-options:SAMEORIGIN
x-xss-protection:1; mode=block
Request Headers
URL:https://www.google.cz/search?
q=itnetwork+je+nej&oq=status+code&aqs=ch
rome..69i57.
395j0j7&sourceid=chrome&es_sm=93&ie=UT
F-8
Request Method:GET
Remote Address:216.58.212.67:443
RAW
Browser vs. Node
● window
● <script src="..."></script>
● HTTP klient
● JQuery, Angular
● global
● var module = require("...");
● HTTP server, klient
● Express
Express
Routing
var http = require("http");
http.createServer(function(request, response){
if(request.url=='/') {
response.writeHead(200);
response.end('GET request to the home');
}else
if(request.url=='/objects') {
response.writeHead(200);
response.end('GET request to the objects');
}else{
response.writeHead(404);
response.end('Not fount :( ');
}
}).listen(80);
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('GET request to the home');
});
app.get('/objects', function (req, res) {
res.send('GET request to the objects');
});
Jasmine
testování
describe('lineCollision', function() {
it('//', function () {
expect(T.Math.lineCollision(0,0,10,10,0,2,10,12)).toBe(false);
});
it('/|', function () {
expect(T.Math.lineCollision(0,0,10,10,100,0,100,10)).toBe(false);
});
it('X', function () {
expect(T.Math.lineCollision(0,0,10,10,0,2,2,0)).toBe(true);
});
it('L', function () {
expect(T.Math.lineCollision(0,0,10,10,10,10,10,0)).toBe(true);
});
it('T', function () {
expect(T.Math.lineCollision(0,0,10,0,10,10,10,-10)).toBe(true);
});
it('/', function () {
expect(T.Math.lineCollision(0,0,10,10,1,1,9,9)).toBe(true);
});
it('!', function () {
expect(T.Math.lineCollision(0,0,0,2,0,4,0,10)).toBe(false);
});
});
Middleware
načítání js souborů
HTML
browser includes
<script src="/app/js/00-other/cookie.static.js"></script>
<script src="/app/js/00-other/copy.static.js"></script>
<script src="/app/js/00-other/date.functions.js"></script>
<script src="/app/js/00-other/escape.functions.js"></script>
<script src="/app/js/00-other/generate-file.jquery.js"></script>
<script src="/app/js/00-other/interval.static.js"></script>
<script src="/app/js/00-other/is-image-ok.function.js"></script>
<script src="/app/js/00-other/is.functions.js"></script>
<script src="/app/js/00-other/log.functions.js"></script>
<script src="/app/js/00-other/outer-html.jquery.js"></script>
<script src="/app/js/00-other/select-text.function.js"></script>
<script src="/app/js/00-other/set-input-error.function.js"></script>
<script src="/app/js/00-other/string.class.js"></script>
<script src="/app/js/00-other/track-event.function.js"></script>
<script src="/app/js/00-other/uri-plugin.js"></script>
<script src="/app/js/00-other/validate.functions.js"></script>
<script src="/app/js/10-model/10-model-draw-3d.prototype.js"></script>
<script src="/app/js/10-model/10-model-draw-cache.prototype.js"></script>
<script src="/app/js/20-ui/10-browser-compatibility.static.js"></script>
<script src="/app/js/20-ui/10-messages.static.js"></script>
<script src="/app/js/20-ui/10-popup-window.static.js"></script>
<script src="/app/js/20-ui/10-status.static.js"></script>
<script src="/app/js/20-ui/10-templates.static.js"></script>
<script src="/app/js/20-uri/10-uri.static.js"></script>
<script src="/app/js/20-uri/20-uri.onload.js"></script>
<script src="/app/js/30-api/10-townsapi.class.js"></script>
GULP
build
<script src="/app-build/js/towns.min.js"></script>
//--------------------------------------------------------------------------------------------------
gulp.task('build', function () {
gulp.src(includes)
.pipe(sort())
.pipe(concat('towns-shared.js'))
.pipe(es6transpiler({
"disallowUnknownReferences": false,
"disallowDuplicated": false
}))
.pipe(gulp.dest('./build'))
.pipe(uglify())
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest('./build'));
});
PHP
browser includes
<?php
$scripts = glob('./js/*.js');
foreach($scripts as $script){
echo('<script src="'.htmlentities($script).'"></script>'."n");
}
?>
Middleware
komunikace WWW a API serveru
http://www.itnetwork.cz/software/sublime-
text
Sublime Text 3 napsal Jon Skinner. Jde o komerční editor napsaný v C++ a jehož
licence stojí kolem 1400 Kč. Editor si ale můžete vyzkoušet a to na neomezenou
dobu. Bez licence se však čas od času při ukládání ukáže dialogové okno, kde je
doporučena koupě licence….
Honza Bittner | ITNetwork.cz
WWW App
API
server DB
WWW
server
WWW App
API
server DB
WWW
server
http://www.towns.
cz/story/572cbec9b8
3bf0b7710c6b58#23,
56
<title>Lesní mýtina | Towns</title>
<meta name="description" content="">
<link rel="icon" href="/favicon.ico">
<meta property="fb:app_id" content="408791555870621" >
<meta property="og:site_name" content="Lesní mýtina | Towns" >
<meta property="og:title" content="Lesní mýtina | Towns" >
<meta property="og:description" content="Na lesní mýtině…." >
<meta property="og:type" content="article" >
<meta property="og:url" content="http://towns.
cz/story/572cbec9b83bf0b7710c6b58" >
<meta property="og:image" content="http://cdn.towns.cz/towns-cdn/?
file=572cbec84cc89-bGVzMi5qcGc=&&width=1200" >
………………………………………………………………………………...
<main class="popup-window">
<div class="header">Lesní mýtina</div>
<article class="content">
<p><img src="http://cdn.towns.cz/towns-cdn/?file=572cbec84cc89-
bGVzMi5qcGc=&amp;&amp;width=800" alt="les2.jpg"></p>
</article>
</main>
Další témata
● TypeScript
● Angular
● Google Maps vs. Seznam Mapy
● WS
● REST API
● Mongo DB
● JS Files API - drag & drop
● 2D grafika - canvas / svg
● 3D grafika webgl
● Procedurální mapy
● Gulp
● Sass

More Related Content

PDF
ITNetwork - 3D na webu
PDF
Petar Nikolow - OA Conf 2021
PDF
まよいの墓(WebVR編)
PDF
Web page load speed optimization
PDF
Practical Android Course Part III - REST API with AQuery, Preferences, Androi...
KEY
CSS3 Takes on the World
PDF
Banquet 36
PDF
Phantom js quick start
ITNetwork - 3D na webu
Petar Nikolow - OA Conf 2021
まよいの墓(WebVR編)
Web page load speed optimization
Practical Android Course Part III - REST API with AQuery, Preferences, Androi...
CSS3 Takes on the World
Banquet 36
Phantom js quick start

What's hot (20)

PDF
An Impromptu Introduction to HTML5 Canvas
PDF
Mobile Web Development
PPTX
Canvas
PDF
Css sprite_maker-1
PDF
CARATULA ASPT: PROAÑO
PDF
Functional javascript
DOCX
كود شات عربي جميل
PDF
Bootstrap Study Share
PDF
Web Performance Workshop - Velocity London 2013
KEY
PreDevCampSF - CSS3 Tricks
PPTX
Introduction à AngularJS
PDF
ServiceWorker: New game changer is coming!
PDF
Javascript fullstasck
KEY
A brief look at CSS3 techniques by Aaron Rodgers, Web Designer @ vzaar.com
PDF
Overview: How to Measure your WebApp
KEY
OPTIMERA STHLM! Isac Lagerblad
PDF
Minimalism in Web Development
PPTX
Web Development for Mobile: GTUG Talk at Google
PPTX
Javascipt ch1
An Impromptu Introduction to HTML5 Canvas
Mobile Web Development
Canvas
Css sprite_maker-1
CARATULA ASPT: PROAÑO
Functional javascript
كود شات عربي جميل
Bootstrap Study Share
Web Performance Workshop - Velocity London 2013
PreDevCampSF - CSS3 Tricks
Introduction à AngularJS
ServiceWorker: New game changer is coming!
Javascript fullstasck
A brief look at CSS3 techniques by Aaron Rodgers, Web Designer @ vzaar.com
Overview: How to Measure your WebApp
OPTIMERA STHLM! Isac Lagerblad
Minimalism in Web Development
Web Development for Mobile: GTUG Talk at Google
Javascipt ch1
Ad

Similar to Webové aplikace v JavaScriptu (20)

PDF
NodeJS, CoffeeScript & Real-time Web
PDF
Single Page Web Apps
PPTX
PWA basics for developers
PDF
Always on! ... or not?
PDF
Progressive Web Apps
PDF
The web - What it has, what it lacks and where it must go
PDF
Pivorak.javascript.global domination
PDF
Andriy Vandakurov about "Frontend. Global domination"
PDF
Mobile Vue.js – From PWA to Native
PDF
A year with progressive web apps! #DevConMU
PDF
Progressive Web Apps are here!
PDF
20181023 progressive web_apps_are_here_sfcampua
PDF
Trends in front end engineering_handouts
PDF
Service workers are your best friends
PDF
Offline progressive web apps with NodeJS and React
PPTX
Centric - PWA WebCast
PPTX
Html5 (looks ready for everything)
PDF
Building cross platform web apps
PDF
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
PDF
Angular Offline Progressive Web Apps With NodeJS
NodeJS, CoffeeScript & Real-time Web
Single Page Web Apps
PWA basics for developers
Always on! ... or not?
Progressive Web Apps
The web - What it has, what it lacks and where it must go
Pivorak.javascript.global domination
Andriy Vandakurov about "Frontend. Global domination"
Mobile Vue.js – From PWA to Native
A year with progressive web apps! #DevConMU
Progressive Web Apps are here!
20181023 progressive web_apps_are_here_sfcampua
Trends in front end engineering_handouts
Service workers are your best friends
Offline progressive web apps with NodeJS and React
Centric - PWA WebCast
Html5 (looks ready for everything)
Building cross platform web apps
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
Angular Offline Progressive Web Apps With NodeJS
Ad

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Cloud computing and distributed systems.
PDF
Machine learning based COVID-19 study performance prediction
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Approach and Philosophy of On baking technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Encapsulation theory and applications.pdf
Chapter 3 Spatial Domain Image Processing.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Spectroscopy.pptx food analysis technology
Cloud computing and distributed systems.
Machine learning based COVID-19 study performance prediction
Dropbox Q2 2025 Financial Results & Investor Presentation
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
sap open course for s4hana steps from ECC to s4
Unlocking AI with Model Context Protocol (MCP)
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Approach and Philosophy of On baking technology
MIND Revenue Release Quarter 2 2025 Press Release
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Programs and apps: productivity, graphics, security and other tools
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Encapsulation theory and applications.pdf

Webové aplikace v JavaScriptu

  • 1. Pavol Hejný pavolhejny.com Webové aplikace v JavaScriptu 27.5.2016 | Praha | ITnetwork.cz
  • 2. Stránka vs. Aplikace WWW App API server DBDB View Controller WWW server Model HTML page
  • 4. Proč? Rychlost využití 2D / 3D grafiky Využití web audio Využití files API
  • 17. <body> <p id="itnetwork">ITnetwork</p> </body> <script> var element = window.document.getElementById ("itnetwork"); element.onclick = function(){ element.style.color = '#3B94E0'; } </script> DOM ITnetwork
  • 18. DOM vs. jQuery $('#itnetwork').click(function(){ $(this).css('color','#00ff00'); }); var element = window.document.getElementById ("itnetwork"); element.onclick = function(){ element.style.color = '#00ff00'; }
  • 19. 7 var second=11; var element =window.document.getElementById ("counter"); var interval = setInterval(function(){ second--; element.innerHTML = second; }, 1000); setTimeout(function(){ alert('Ahoj!'); clearInterval(interval); } , 11000); interval, timeout https://jsfiddle.net/phejny/xjyerkq2/
  • 20. var start = null; var element = document.getElementById("ball"); element.style.position = 'absolute'; function step(timestamp) { if (!start) start = timestamp; var progress = timestamp - start; element.style.top = Math.sin(progress/1000*Math.PI) *100+100 + "px"; element.style.left = Math.cos(progress/1000*Math.PI) *100+100 + "px"; window.requestAnimationFrame(step); } window.requestAnimationFrame(step); Animation frame https://jsfiddle.net/phejny/8nLcpffb/1/
  • 21. 5€ je 135,- kč. var request = new XMLHttpRequest(); var url = "https://api.fixer.io/latest?symbols=CZK"; request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { var response = JSON.parse(request.responseText); var rate = response.rates.CZK; document.getElementById('CZK').innerText = Math. round(rate*5); } }; request.open("GET", url, true); request.send(); XMLHttpRequest https://jsfiddle.net/phejny/0y6dbyug/1
  • 22. XMLHttpRequest vs. jQuery var url = "https://api.fixer.io/latest?symbols=CZK"; $.get(url) .done(function(response){ var rate = response.rates.CZK; $('#CZK').text(Math.round(rate*5)); }); var request = new XMLHttpRequest(); var url = "https://api.fixer.io/latest?symbols=CZK"; request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { var response = JSON.parse(request.responseText); var rate = response.rates.CZK; document.getElementById('CZK').innerText = Math.round (rate*5); } }; request.open("GET", url, true); request.send(); https://jsfiddle.net/phejny/0y6dbyug/3
  • 23. Sync vs. Async $.get("https://api.fixer.io/latest?symbols=CZK") .done(function(response){ var rate = response.rates.CZK; $('#CZK').text(Math.round(rate*5)); }); $.get("https://api.fixer.io/latest?symbols=USD") .done(function(response){ var rate = response.rates.USD; $('#USD').text(Math.round(rate*5*100)/100); }); <?php $json = file_get_contents("https://api.fixer.io/latest? symbols=CZK,EUR"); //... echo('5€ je '.$CZK.',- kč.'); $json = file_get_contents("https://api.fixer.io/latest? symbols=USD,EUR"); //... echo('5€ je '.$USD.'$.'); ?>
  • 25. Angular <!doctype html> <html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5 /angular.min.js"></script> </head> <body> <div> <input type="text" ng-model="jmeno_cajovny"> <hr> <h1>Jsme v čajovně {{jmeno_cajovny}}!</h1> </div> </body> </html>
  • 26. ECMAScript 5 var Position = function(x,y){ this.x= x || 0; this.y= y || 0; }; Position.prototype.getDistance = function(position){ return Math.sqrt(Math.pow(position.x-this.x,2)+Math.pow(position.y- this.y,2)); }; Position.prototype.toString = function(){ return ''+this.x+','+this.y+''; };
  • 27. var multiline_string = (function () {/* Podle mě ten nejhorší způsob :( */}).toString().match(/[^]*/*([^]*)*/}$/)[1]; var multiline_string = `V ES6 to jde bez problémů!`; var multiline_string = 'Takhle d*****e se musí psát string na více řádků.'; var multiline_string = 'Nebo' + 'takhle - s tímhle zápisem alespoň umí' + 'pracovat PHPStorm'; var multiline_string = ['Nebo', 'takhle', ].join('n') String
  • 28. ECMAScript 6 var Position = class{ constructor(x=0,y=0){ this.x= x; this.y= y; } getDistance(position){ return Math.sqrt(Math.pow(position.x-this.x,2)+Math.pow(position. y-this.y,2)); } toString(){ return ''+this.x+','+this.y+''; } };
  • 29. CoffeeScript transpiler Position = (x, y) -> @x = x or 0 @y = y or 0 return Position::getDistance = (position) -> Math.sqrt (position.x - (@x)) ** 2+ (position.y - (@y)) ** 2 Position::toString = -> '' + @x + ',' + @y + ''
  • 32. PHP vs. Node ● Apache ● Jednotlivé stránky ● node, pm2 ● Celý server
  • 33. Response ● http://www.itnetwork. cz/software/sublime-text? nastaveni=123#goto173043 ● GET, POST, DELETE, HEAD,... Body ● status code - 200, 404, 403,... ● mime type - text/html ● cache control ● form data, upload,... ● html, js, css, image, pdf, video,... Request Header
  • 34. Response Headers alt-svc:quic=":443"; ma=2592000; v=" 34,33,32,31,30,29,28,27,26,25" alternate-protocol:443:quic cache-control:private, max-age=0 content-encoding:gzip content-type:text/html; charset=UTF-8 date:Fri, 27 May 2016 11:46:06 GMT expires:-1 server:gws status:200 x-frame-options:SAMEORIGIN x-xss-protection:1; mode=block Request Headers URL:https://www.google.cz/search? q=itnetwork+je+nej&oq=status+code&aqs=ch rome..69i57. 395j0j7&sourceid=chrome&es_sm=93&ie=UT F-8 Request Method:GET Remote Address:216.58.212.67:443 RAW
  • 35. Browser vs. Node ● window ● <script src="..."></script> ● HTTP klient ● JQuery, Angular ● global ● var module = require("..."); ● HTTP server, klient ● Express
  • 36. Express Routing var http = require("http"); http.createServer(function(request, response){ if(request.url=='/') { response.writeHead(200); response.end('GET request to the home'); }else if(request.url=='/objects') { response.writeHead(200); response.end('GET request to the objects'); }else{ response.writeHead(404); response.end('Not fount :( '); } }).listen(80); var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('GET request to the home'); }); app.get('/objects', function (req, res) { res.send('GET request to the objects'); });
  • 37. Jasmine testování describe('lineCollision', function() { it('//', function () { expect(T.Math.lineCollision(0,0,10,10,0,2,10,12)).toBe(false); }); it('/|', function () { expect(T.Math.lineCollision(0,0,10,10,100,0,100,10)).toBe(false); }); it('X', function () { expect(T.Math.lineCollision(0,0,10,10,0,2,2,0)).toBe(true); }); it('L', function () { expect(T.Math.lineCollision(0,0,10,10,10,10,10,0)).toBe(true); }); it('T', function () { expect(T.Math.lineCollision(0,0,10,0,10,10,10,-10)).toBe(true); }); it('/', function () { expect(T.Math.lineCollision(0,0,10,10,1,1,9,9)).toBe(true); }); it('!', function () { expect(T.Math.lineCollision(0,0,0,2,0,4,0,10)).toBe(false); }); });
  • 39. HTML browser includes <script src="/app/js/00-other/cookie.static.js"></script> <script src="/app/js/00-other/copy.static.js"></script> <script src="/app/js/00-other/date.functions.js"></script> <script src="/app/js/00-other/escape.functions.js"></script> <script src="/app/js/00-other/generate-file.jquery.js"></script> <script src="/app/js/00-other/interval.static.js"></script> <script src="/app/js/00-other/is-image-ok.function.js"></script> <script src="/app/js/00-other/is.functions.js"></script> <script src="/app/js/00-other/log.functions.js"></script> <script src="/app/js/00-other/outer-html.jquery.js"></script> <script src="/app/js/00-other/select-text.function.js"></script> <script src="/app/js/00-other/set-input-error.function.js"></script> <script src="/app/js/00-other/string.class.js"></script> <script src="/app/js/00-other/track-event.function.js"></script> <script src="/app/js/00-other/uri-plugin.js"></script> <script src="/app/js/00-other/validate.functions.js"></script> <script src="/app/js/10-model/10-model-draw-3d.prototype.js"></script> <script src="/app/js/10-model/10-model-draw-cache.prototype.js"></script> <script src="/app/js/20-ui/10-browser-compatibility.static.js"></script> <script src="/app/js/20-ui/10-messages.static.js"></script> <script src="/app/js/20-ui/10-popup-window.static.js"></script> <script src="/app/js/20-ui/10-status.static.js"></script> <script src="/app/js/20-ui/10-templates.static.js"></script> <script src="/app/js/20-uri/10-uri.static.js"></script> <script src="/app/js/20-uri/20-uri.onload.js"></script> <script src="/app/js/30-api/10-townsapi.class.js"></script>
  • 40. GULP build <script src="/app-build/js/towns.min.js"></script> //-------------------------------------------------------------------------------------------------- gulp.task('build', function () { gulp.src(includes) .pipe(sort()) .pipe(concat('towns-shared.js')) .pipe(es6transpiler({ "disallowUnknownReferences": false, "disallowDuplicated": false })) .pipe(gulp.dest('./build')) .pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('./build')); });
  • 41. PHP browser includes <?php $scripts = glob('./js/*.js'); foreach($scripts as $script){ echo('<script src="'.htmlentities($script).'"></script>'."n"); } ?>
  • 43. http://www.itnetwork.cz/software/sublime- text Sublime Text 3 napsal Jon Skinner. Jde o komerční editor napsaný v C++ a jehož licence stojí kolem 1400 Kč. Editor si ale můžete vyzkoušet a to na neomezenou dobu. Bez licence se však čas od času při ukládání ukáže dialogové okno, kde je doporučena koupě licence…. Honza Bittner | ITNetwork.cz
  • 44. WWW App API server DB WWW server WWW App API server DB WWW server
  • 45. http://www.towns. cz/story/572cbec9b8 3bf0b7710c6b58#23, 56 <title>Lesní mýtina | Towns</title> <meta name="description" content=""> <link rel="icon" href="/favicon.ico"> <meta property="fb:app_id" content="408791555870621" > <meta property="og:site_name" content="Lesní mýtina | Towns" > <meta property="og:title" content="Lesní mýtina | Towns" > <meta property="og:description" content="Na lesní mýtině…." > <meta property="og:type" content="article" > <meta property="og:url" content="http://towns. cz/story/572cbec9b83bf0b7710c6b58" > <meta property="og:image" content="http://cdn.towns.cz/towns-cdn/? file=572cbec84cc89-bGVzMi5qcGc=&&width=1200" > ………………………………………………………………………………... <main class="popup-window"> <div class="header">Lesní mýtina</div> <article class="content"> <p><img src="http://cdn.towns.cz/towns-cdn/?file=572cbec84cc89- bGVzMi5qcGc=&amp;&amp;width=800" alt="les2.jpg"></p> </article> </main>
  • 46. Další témata ● TypeScript ● Angular ● Google Maps vs. Seznam Mapy ● WS ● REST API ● Mongo DB ● JS Files API - drag & drop ● 2D grafika - canvas / svg ● 3D grafika webgl ● Procedurální mapy ● Gulp ● Sass