SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
L’univers merveilleux
du développeur frontend
ng-PLAN
I. AngularJS
+
ng-route
ng-cookie
ng-translate
ng-mocks
ng-PLAN
I. AngularJS
II. Le reste
… le tout à la sauce PredicSis
+
ng-route
ng-cookie
ng-translate
ng-mocks
JavaScript HTML CSS JQuery Sass Grunt Bower Foundation Karma Protractor
AngularJS
ngularJS
● Powered by Google
Statistiques du repo GitHub :
87 releases 837 contributeurs
1096 bugs ouverts 6666 bugs fermés
dernière mise à jour : 1 heures 8550 forks
I. AngularJS
● Powered by Google
● Framework Javascript OpenSource MVC
■ Bibliothèque javascript (104ko)
■ Open source : https://github.com/angular/angular.js
■ MVC … oui, même en html - javascript !!
■ Entièrement exécutée dans un navigateur
I. AngularJS
● Powered by Google
● Framework Javascript OpenSource MVC
● Releases https://github.com/angular/angular.js/blob/master/CHANGELOG.md
■ 85 actuellement, 22 depuis 2014 (3-4 par mois)
■ la première : v0.9.0 [Dragon-breath] (20 oct 2010)
■ la première stable : 1.0.0 [Temporal-domination] (13 juin 2012)
■ la dernière : 1.3.0beta11 [Excessive-clarification] (06 juin 2014)
I. AngularJS
● S P A complexes Single-Page Applications
● Manipulation du D O M Document Object Model
● Améliore la testabilité (MVC, modules)
● Isole le front et le backend
● Utilise les dernières technos
(DOM templates, binding attributes, promises, ...)
[
{
index: 0,
used: “true”,
name: “DUALPLAY”,
type: “Symbol”,
description: “Lorem ipsum sit amet”,
expression: “”
},
{
index: 1,
...
]
http://plnkr.co/edit/74JBq2MDACBnmnUgTG0k?
p=preview
I. AngularJS
● MSNBC.com
● Vevo (player video)
● Plunker
● The guardian
● ...
https://builtwith.angularjs.org/
I. AngularJS
Javascript
Javascript
● Créé en 1995 par Brendan Eich (Netscape)
● Intégré au navigateur netscape en 1996
● Standardisé en 1997 par ECMA intl
● Actuellement : ECMAScript 5 (12-2009)
■ Adobe : ActionScript
■ Microsoft : JScript
■ Google : V8 http://fr.wikipedia.org/wiki/ECMAScript
Javascript
Navigateurs “normaux”
el.addEventListener('click', modifieTexte, false);
Internet Explorer
el.attachEvent('onclick', modifieTexte);
JQuery
● Première version en 2006
● LA bibliothèque JS la plus répandue
● Simplifier les fonctions usuelles de JS
■ Modification du DOM et du CSS
■ Évènements, animations, AJAX
■ Plugins
Sass
Sass
● Définition de variables
■ $color-dark-blue: #004466;
■ $color-border: #C6C6C6;
■ $size-width-page: 980px;
■ $size-width-sidebar: $size-width-page / 2;
■ $color-light-blue: lighten($color-dark-blue, 30%);
Surcharge de variables précédemment définies :
$fi-path: "../../vendor/foundation-icon-fonts";
Sass
● Définition de variables
● Définition de fonctions
@mixin android-inputs($color) {
box-shadow: none;
background:
bottom left linear-gradient($color, $color) no-repeat,
bottom center linear-gradient($color, $color) repeat-x,
bottom right linear-gradient($color, $color) no-repeat;
background-size: 1px 6px, 1px 1px, 1px 6px;
}
Sass
● Définition de variables
● Définition de fonctions
● Imbrication
input[type=text] {
@include droid-inputs($color-grey);
&:hover, &:focus { @include droid-inputs($color-blue); }
&.error { @include droid-inputs($color-dark-red) }
}
Sass
● Définition de variables
● Définition de fonctions
● Imbrication
input[type=text] { … }
input[type=text]::hover, input[type=text]::focus { … }
input[type=text].error { … }
Sass
● Définition de variables
● Définition de fonctions
● Imbrication
● Nécessite une compilation avant le rendu
Grunt
Grunt
sass: {
files: { '/styles/css/style.css' : '/styles/main/style.scss' }
}
> grunt sass
Fichier SASS Fichier CSS
Grunt
sass: {
files: { '/styles/css/style.css' : '/styles/main/style.scss' }
},
watch: {
sass-compile: {
files: ['/styles/{,*/}*.{scss,sass}'],
tasks: [sass]
}
}
> grunt watch
Zurb foundation
Zurb foundation
● “Bienvenue dans la grille”
Zurb foundation
● “Bienvenue dans la grille”
● L’approche mobile first
<div class="large-4 medium-6"></div>
● Prévoir la version mobile
● Identifier tôt les contenus essentiels
Zurb foundation
● “Bienvenue dans la grille”
● L’approche mobile first
● C’est un framework …
■ row, radius, large-centered, breadcrumbs, …
■ définit un grand nombre de variables
■ documentation : http://foundation.zurb.com/docs/index.html
Karma & protractor
Karma
angular.filter('nl2br', function() { | <div>
return function(text) { | {{ variable.description | nl2br }}
return text.replace(/n/g, '<br/>'); | </div>
}; |
}); |
--------------------------------------------------------------------------------------------------------
-
describe("Test for nl2br filter", function() {
it('should replace n by <br/>', inject(function(nl2brFilter) {
var scenario = {
input : [ '', 'n', 'nn', 'a linenanother'],
output : [ '', '<br/>', '<br/><br/>', 'a line<br/>another']
};
for (var i = 0 ; i < scenario.input.length ; i++) {
expect(nl2brFilter(scenario.input[i])).toEqual(scenario.output[i]);
}
}));
});
Protractor
it('should display an error when try to create an account with an existing email', function() {
$httpBackend
.when(API.USER_CREATE.method, API.USER_CREATE.url)
.respond(HTTP.UNPROCESSABLE_ENTITY, {
message: 'Validation failed',
status: HTTP.UNPROCESSABLE_ENTITY,
errors: [
{ resource: 'User', field: 'email' , code: 'already_exists' },
{ resource: 'User', field: 'password', code: 'invalid' }
]
})
;
...
Protractor
// enter email/password
element(by.input('username')).sendKeys('Sylvain');
element(by.input('email')).sendKeys('sylvain.ragot@predicsis.com');
element(by.input('password')).sendKeys('s');
// create account
element(page.form.signup).findElement(by.css('button[type=submit]')).click();
// text expectations
expect(ptor.getCurrentUrl()).toMatch('#/login');
expect(element(by.input('email')).getAttribute('class')).toContain('error');
expect(element(by.input('password')).getAttribute('class')).toContain('error');
});
Protractor
// enter email/password
element(by.input('username')).sendKeys('Sylvain');
element(by.input('email')).sendKeys('sylvain.ragot@predicsis.com');
element(by.input('password')).sendKeys('s');
// create account
element(page.form.signup).findElement(by.css('button[type=submit]')).click();
// text expectations
expect(ptor.getCurrentUrl()).toMatch('#/login');
expect(element(by.input('email')).getAttribute('class')).toContain('error');
expect(element(by.input('password')).getAttribute('class')).toContain('error');
});
ng-end
PredicSis’
Technobyte

Contenu connexe

Tendances

Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSFrédéric DUPERIER
 
Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Clément Dubois
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptxEsokia
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Google : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSGoogle : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSPeak Ace
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the futureOuadie LAHDIOUI
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScriptHabib Ayad
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon
 
Angluars js
Angluars jsAngluars js
Angluars jsRYMAA
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsOLBATI
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 

Tendances (20)

Retour d'experience projet AngularJS
Retour d'experience projet AngularJSRetour d'experience projet AngularJS
Retour d'experience projet AngularJS
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJS
 
Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptx
 
jQuery vs AngularJS
jQuery vs AngularJS jQuery vs AngularJS
jQuery vs AngularJS
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Google : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JSGoogle : Prise en charge de l'Ajax et de l'Angular JS
Google : Prise en charge de l'Ajax et de l'Angular JS
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the future
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScript
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
 
Angular 2
Angular 2Angular 2
Angular 2
 
Angluars js
Angluars jsAngluars js
Angluars js
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.js
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 

En vedette

ProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsBinary Studio
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endFrançois Petitit
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015Codemotion
 
Сергей Больщиков "Protractor Tips & Tricks"
Сергей Больщиков "Protractor Tips & Tricks"Сергей Больщиков "Protractor Tips & Tricks"
Сергей Больщиков "Protractor Tips & Tricks"Fwdays
 
ATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachAgile Testing Alliance
 
Dpto.ciencias 10 11
Dpto.ciencias 10 11Dpto.ciencias 10 11
Dpto.ciencias 10 11dptociencias
 
Notice essentielb light up
Notice essentielb light upNotice essentielb light up
Notice essentielb light upBusy_T
 
Proyecto informatica cristiansanz
Proyecto informatica cristiansanzProyecto informatica cristiansanz
Proyecto informatica cristiansanzEduardo Barreras
 
Presentación formación de usuarios (solo sala general)
Presentación formación de usuarios (solo sala general)Presentación formación de usuarios (solo sala general)
Presentación formación de usuarios (solo sala general)agudomaria76
 
Examen final de computacion odalis paredes 8 vo b
Examen final de computacion odalis paredes 8 vo bExamen final de computacion odalis paredes 8 vo b
Examen final de computacion odalis paredes 8 vo bOdalis Paredes
 
Virus y antivirus
Virus y antivirusVirus y antivirus
Virus y antivirusjuankaplay
 
Tecnolog..[1]prom prod
Tecnolog..[1]prom prodTecnolog..[1]prom prod
Tecnolog..[1]prom prodAlba Parra
 
Reportage dans les foyers de la dessidence : Le feu couve sous les cendres
Reportage dans les foyers de la dessidence : Le feu couve sous les cendresReportage dans les foyers de la dessidence : Le feu couve sous les cendres
Reportage dans les foyers de la dessidence : Le feu couve sous les cendresHajer Ajroudi
 

En vedette (20)

Rex E2E
Rex E2ERex E2E
Rex E2E
 
ProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applications
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
Carmen Popoviciu - Protractor styleguide | Codemotion Milan 2015
 
Protractor: Tips & Tricks
Protractor: Tips & TricksProtractor: Tips & Tricks
Protractor: Tips & Tricks
 
Сергей Больщиков "Protractor Tips & Tricks"
Сергей Больщиков "Protractor Tips & Tricks"Сергей Больщиков "Protractor Tips & Tricks"
Сергей Больщиков "Protractor Tips & Tricks"
 
ATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD Approach
 
Dpto.ciencias 10 11
Dpto.ciencias 10 11Dpto.ciencias 10 11
Dpto.ciencias 10 11
 
Notice essentielb light up
Notice essentielb light upNotice essentielb light up
Notice essentielb light up
 
CAF- Marco Kamiya
CAF- Marco KamiyaCAF- Marco Kamiya
CAF- Marco Kamiya
 
Proyecto informatica cristiansanz
Proyecto informatica cristiansanzProyecto informatica cristiansanz
Proyecto informatica cristiansanz
 
Presentación formación de usuarios (solo sala general)
Presentación formación de usuarios (solo sala general)Presentación formación de usuarios (solo sala general)
Presentación formación de usuarios (solo sala general)
 
Excursión al Bajo Aragón
Excursión al Bajo AragónExcursión al Bajo Aragón
Excursión al Bajo Aragón
 
Venezuela
VenezuelaVenezuela
Venezuela
 
Examen final de computacion odalis paredes 8 vo b
Examen final de computacion odalis paredes 8 vo bExamen final de computacion odalis paredes 8 vo b
Examen final de computacion odalis paredes 8 vo b
 
Excursión a Teruel y Albarracín
Excursión a Teruel y AlbarracínExcursión a Teruel y Albarracín
Excursión a Teruel y Albarracín
 
Virus y antivirus
Virus y antivirusVirus y antivirus
Virus y antivirus
 
Igli metal
Igli metal Igli metal
Igli metal
 
Tecnolog..[1]prom prod
Tecnolog..[1]prom prodTecnolog..[1]prom prod
Tecnolog..[1]prom prod
 
Reportage dans les foyers de la dessidence : Le feu couve sous les cendres
Reportage dans les foyers de la dessidence : Le feu couve sous les cendresReportage dans les foyers de la dessidence : Le feu couve sous les cendres
Reportage dans les foyers de la dessidence : Le feu couve sous les cendres
 

Similaire à AngularJS et autres techno frontend

Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascriptcodedarmor
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?Frédéric Harper
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousjwajsberg
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JSNoirdes
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 

Similaire à AngularJS et autres techno frontend (20)

Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tous
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JS
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
Angular.pdf
Angular.pdfAngular.pdf
Angular.pdf
 
CSS3 WebEducation
CSS3 WebEducationCSS3 WebEducation
CSS3 WebEducation
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
CasperJS
CasperJSCasperJS
CasperJS
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 

AngularJS et autres techno frontend

  • 3. ng-PLAN I. AngularJS II. Le reste … le tout à la sauce PredicSis + ng-route ng-cookie ng-translate ng-mocks JavaScript HTML CSS JQuery Sass Grunt Bower Foundation Karma Protractor
  • 5. ngularJS ● Powered by Google Statistiques du repo GitHub : 87 releases 837 contributeurs 1096 bugs ouverts 6666 bugs fermés dernière mise à jour : 1 heures 8550 forks
  • 6. I. AngularJS ● Powered by Google ● Framework Javascript OpenSource MVC ■ Bibliothèque javascript (104ko) ■ Open source : https://github.com/angular/angular.js ■ MVC … oui, même en html - javascript !! ■ Entièrement exécutée dans un navigateur
  • 7. I. AngularJS ● Powered by Google ● Framework Javascript OpenSource MVC ● Releases https://github.com/angular/angular.js/blob/master/CHANGELOG.md ■ 85 actuellement, 22 depuis 2014 (3-4 par mois) ■ la première : v0.9.0 [Dragon-breath] (20 oct 2010) ■ la première stable : 1.0.0 [Temporal-domination] (13 juin 2012) ■ la dernière : 1.3.0beta11 [Excessive-clarification] (06 juin 2014)
  • 8. I. AngularJS ● S P A complexes Single-Page Applications ● Manipulation du D O M Document Object Model ● Améliore la testabilité (MVC, modules) ● Isole le front et le backend ● Utilise les dernières technos (DOM templates, binding attributes, promises, ...)
  • 9. [ { index: 0, used: “true”, name: “DUALPLAY”, type: “Symbol”, description: “Lorem ipsum sit amet”, expression: “” }, { index: 1, ... ] http://plnkr.co/edit/74JBq2MDACBnmnUgTG0k? p=preview I. AngularJS
  • 10. ● MSNBC.com ● Vevo (player video) ● Plunker ● The guardian ● ... https://builtwith.angularjs.org/ I. AngularJS
  • 12. Javascript ● Créé en 1995 par Brendan Eich (Netscape) ● Intégré au navigateur netscape en 1996 ● Standardisé en 1997 par ECMA intl ● Actuellement : ECMAScript 5 (12-2009) ■ Adobe : ActionScript ■ Microsoft : JScript ■ Google : V8 http://fr.wikipedia.org/wiki/ECMAScript
  • 13. Javascript Navigateurs “normaux” el.addEventListener('click', modifieTexte, false); Internet Explorer el.attachEvent('onclick', modifieTexte);
  • 14. JQuery ● Première version en 2006 ● LA bibliothèque JS la plus répandue ● Simplifier les fonctions usuelles de JS ■ Modification du DOM et du CSS ■ Évènements, animations, AJAX ■ Plugins
  • 15. Sass
  • 16. Sass ● Définition de variables ■ $color-dark-blue: #004466; ■ $color-border: #C6C6C6; ■ $size-width-page: 980px; ■ $size-width-sidebar: $size-width-page / 2; ■ $color-light-blue: lighten($color-dark-blue, 30%); Surcharge de variables précédemment définies : $fi-path: "../../vendor/foundation-icon-fonts";
  • 17. Sass ● Définition de variables ● Définition de fonctions @mixin android-inputs($color) { box-shadow: none; background: bottom left linear-gradient($color, $color) no-repeat, bottom center linear-gradient($color, $color) repeat-x, bottom right linear-gradient($color, $color) no-repeat; background-size: 1px 6px, 1px 1px, 1px 6px; }
  • 18. Sass ● Définition de variables ● Définition de fonctions ● Imbrication input[type=text] { @include droid-inputs($color-grey); &:hover, &:focus { @include droid-inputs($color-blue); } &.error { @include droid-inputs($color-dark-red) } }
  • 19. Sass ● Définition de variables ● Définition de fonctions ● Imbrication input[type=text] { … } input[type=text]::hover, input[type=text]::focus { … } input[type=text].error { … }
  • 20. Sass ● Définition de variables ● Définition de fonctions ● Imbrication ● Nécessite une compilation avant le rendu
  • 21. Grunt
  • 22. Grunt sass: { files: { '/styles/css/style.css' : '/styles/main/style.scss' } } > grunt sass Fichier SASS Fichier CSS
  • 23. Grunt sass: { files: { '/styles/css/style.css' : '/styles/main/style.scss' } }, watch: { sass-compile: { files: ['/styles/{,*/}*.{scss,sass}'], tasks: [sass] } } > grunt watch
  • 25. Zurb foundation ● “Bienvenue dans la grille”
  • 26. Zurb foundation ● “Bienvenue dans la grille” ● L’approche mobile first <div class="large-4 medium-6"></div> ● Prévoir la version mobile ● Identifier tôt les contenus essentiels
  • 27. Zurb foundation ● “Bienvenue dans la grille” ● L’approche mobile first ● C’est un framework … ■ row, radius, large-centered, breadcrumbs, … ■ définit un grand nombre de variables ■ documentation : http://foundation.zurb.com/docs/index.html
  • 29. Karma angular.filter('nl2br', function() { | <div> return function(text) { | {{ variable.description | nl2br }} return text.replace(/n/g, '<br/>'); | </div> }; | }); | -------------------------------------------------------------------------------------------------------- - describe("Test for nl2br filter", function() { it('should replace n by <br/>', inject(function(nl2brFilter) { var scenario = { input : [ '', 'n', 'nn', 'a linenanother'], output : [ '', '<br/>', '<br/><br/>', 'a line<br/>another'] }; for (var i = 0 ; i < scenario.input.length ; i++) { expect(nl2brFilter(scenario.input[i])).toEqual(scenario.output[i]); } })); });
  • 30. Protractor it('should display an error when try to create an account with an existing email', function() { $httpBackend .when(API.USER_CREATE.method, API.USER_CREATE.url) .respond(HTTP.UNPROCESSABLE_ENTITY, { message: 'Validation failed', status: HTTP.UNPROCESSABLE_ENTITY, errors: [ { resource: 'User', field: 'email' , code: 'already_exists' }, { resource: 'User', field: 'password', code: 'invalid' } ] }) ; ...
  • 31. Protractor // enter email/password element(by.input('username')).sendKeys('Sylvain'); element(by.input('email')).sendKeys('sylvain.ragot@predicsis.com'); element(by.input('password')).sendKeys('s'); // create account element(page.form.signup).findElement(by.css('button[type=submit]')).click(); // text expectations expect(ptor.getCurrentUrl()).toMatch('#/login'); expect(element(by.input('email')).getAttribute('class')).toContain('error'); expect(element(by.input('password')).getAttribute('class')).toContain('error'); });
  • 32. Protractor // enter email/password element(by.input('username')).sendKeys('Sylvain'); element(by.input('email')).sendKeys('sylvain.ragot@predicsis.com'); element(by.input('password')).sendKeys('s'); // create account element(page.form.signup).findElement(by.css('button[type=submit]')).click(); // text expectations expect(ptor.getCurrentUrl()).toMatch('#/login'); expect(element(by.input('email')).getAttribute('class')).toContain('error'); expect(element(by.input('password')).getAttribute('class')).toContain('error'); });