Mykhailo Churilov
Senior JS Developer
var r = new XMLHttpRequest();
r.open("POST", "webservice", true);
r.onreadystatechange = function () {
if (r.readyState != 4 || r.status != 200) return;
console.log(r.responseText);
};
r.send("a=1&b=2&c=3");
DOM manipulation
Animation
Events
Promises
AJAX
JSON parsing
Cross-browser support
$.ajax({
url: "webservice",
type: "POST",
data: "a=1&b=2&c=3",
success: function(d) {
console.log(d);
}
});
2008
Internet Birth 1991
JavaScript 1995
AJAX 2005
jQuery 2006
Google Chrome 2008
Node.js 2009
AMD 2009
Quality Over Quantity
No page refresh
Mobile preffered
Scaling
Long pageload
Higher risks
module.exports = function(grunt) {
grunt.initConfig({
jshint: {
files: ['**.js'],
options: JSON.parse(require('fs').readFileSync('./.jshinrc'))
}
});
grunt.loadNpmTasks('grunt-contrib-jshint');
};
var jshint = require('gulp-jshint');
var gulp = require('gulp');
gulp.task('jshint', function() {
return gulp.src('**.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
"devDependencies": {
"jshint": "latest",
},
"scripts": {
"lint": "jshint **.js"
}
npm start
npm test
bower i
gulp less
gulp images
gulp fonts
gulp vendors
gulp lint
gulp js
gulp views
// Rebuild only files that change
var gulp = require('gulp');
var sass = require('gulp-sass');
var watch = require('gulp-watch');
gulp.task('default', function() {
return gulp.src('sass/*.scss')
.pipe(watch('sass/*.scss'))
.pipe(sass())
.pipe(gulp.dest('dist'));
});
(function() {
'use strict';
angular.module('linked', ['angularLinkedLists'])
.controller('LinkedController', LinkedController);
function LinkedController() {
this.data = [{
id: 213,
title: 'Ukraine',
}, {
id: 1,
title: 'Andorra'
}, {
id: 34,
title: 'Great Britain'
}, {
id: 75,
title: 'United States'
}];
this.selected = [this.data[0]];
this.updateOnServer = updateOnServer;
function updateOnServer() {
console.log('updateOnServer');
};
};
})();
<div ng-controller="LinkedController as link">
<h2>Data out of directive</h2>
<pre>{{ link.data }}</pre>
<pre>{{ link.selected }}</pre>
<h2>Data in directive</h2>
<linked-lists data="link.data"
selected="link.selected"
selection-updated="link.updateOnServer()"
filterable>
</linked-lists>
</div>