├── workshop ├── zengular.js ├── solutions │ ├── zengular-01-scope.js │ ├── zengular-02-watch.js │ ├── zengular-03-digest.js │ ├── zengular-04-apply.js │ ├── zengular-05-loop.js │ ├── zengular-06-dirty.js │ ├── zengular-07-phase.js │ ├── zengular-08-directive.js │ ├── zengular-09-compile.js │ └── zengular-10-bind.js ├── digest.png ├── tests │ ├── jasmine-2.0.0 │ │ └── jasmine_favicon.png │ ├── zengular-tests-01-scope.js │ ├── zengular-tests-08-directive.js │ ├── zengular-tests-02-watch.js │ ├── zengular-tests-04-apply.js │ ├── zengular-tests-10-bind.js │ ├── zengular-tests-09-compile.js │ ├── zengular-tests-06-dirty.js │ ├── zengular-tests-11-model.js │ ├── zengular-tests-12-click.js │ ├── zengular-tests-03-digest.js │ ├── zengular-tests-05-loop.js │ └── SpecRunner.html └── zengular.html ├── .gitignore ├── sessions ├── devoxxfr-16042014 │ ├── zengular.js │ └── digest.png ├── m6web-25042014 │ ├── slides │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── img │ │ │ ├── digest.png │ │ │ ├── lyonjs.png │ │ │ ├── swiip.jpg │ │ │ ├── teropa.jpeg │ │ │ ├── zenika.jpeg │ │ │ ├── timruffles.jpeg │ │ │ └── angularjs-logo.png │ │ ├── lib │ │ │ ├── font │ │ │ │ ├── league_gothic_license │ │ │ │ ├── league_gothic-webfont.eot │ │ │ │ ├── league_gothic-webfont.ttf │ │ │ │ └── league_gothic-webfont.woff │ │ │ ├── js │ │ │ │ ├── html5shiv.js │ │ │ │ └── classList.js │ │ │ └── css │ │ │ │ └── zenburn.css │ │ ├── test │ │ │ ├── examples │ │ │ │ ├── assets │ │ │ │ │ ├── image1.png │ │ │ │ │ └── image2.png │ │ │ │ ├── barebones.html │ │ │ │ └── embedded-media.html │ │ │ ├── test-markdown.js │ │ │ ├── test-markdown.html │ │ │ └── test.html │ │ ├── plugin │ │ │ ├── markdown │ │ │ │ └── example.md │ │ │ ├── multiplex │ │ │ │ ├── client.js │ │ │ │ ├── master.js │ │ │ │ └── index.js │ │ │ ├── print-pdf │ │ │ │ └── print-pdf.js │ │ │ ├── postmessage │ │ │ │ ├── postmessage.js │ │ │ │ └── example.html │ │ │ ├── remotes │ │ │ │ └── remotes.js │ │ │ ├── math │ │ │ │ └── math.js │ │ │ ├── notes-server │ │ │ │ ├── client.js │ │ │ │ └── index.js │ │ │ └── notes │ │ │ │ └── notes.js │ │ ├── css │ │ │ └── theme │ │ │ │ ├── template │ │ │ │ ├── settings.scss │ │ │ │ └── mixins.scss │ │ │ │ ├── source │ │ │ │ ├── night.scss │ │ │ │ ├── serif.scss │ │ │ │ ├── simple.scss │ │ │ │ ├── sky.scss │ │ │ │ ├── default.scss │ │ │ │ ├── beige.scss │ │ │ │ ├── moon.scss │ │ │ │ ├── solarized.scss │ │ │ │ └── blood.scss │ │ │ │ └── README.md │ │ ├── LICENSE │ │ └── package.json │ └── zengular-1h.html ├── breizhcamp-22052014 │ ├── slides │ │ ├── .gitignore │ │ ├── img │ │ │ ├── digest.png │ │ │ ├── lego.jpeg │ │ │ ├── lyonjs.png │ │ │ ├── slide8.jpg │ │ │ ├── swiip.jpg │ │ │ ├── jasmine.jpeg │ │ │ ├── teropa.jpeg │ │ │ ├── zenika.jpeg │ │ │ ├── Slide_first.png │ │ │ ├── Slide_last.png │ │ │ ├── timruffles.jpeg │ │ │ ├── angularjs-logo.png │ │ │ ├── jasmine-screen.png │ │ │ └── underscore-js.png │ │ ├── lib │ │ │ ├── font │ │ │ │ ├── league_gothic_license │ │ │ │ ├── league_gothic-webfont.eot │ │ │ │ ├── league_gothic-webfont.ttf │ │ │ │ └── league_gothic-webfont.woff │ │ │ ├── js │ │ │ │ ├── html5shiv.js │ │ │ │ └── classList.js │ │ │ └── css │ │ │ │ └── zenburn.css │ │ ├── css │ │ │ ├── fonts │ │ │ │ └── Ubuntu │ │ │ │ │ ├── Ubuntu-Bold.woff │ │ │ │ │ ├── Ubuntu-Light.woff │ │ │ │ │ ├── Ubuntu-BoldItalic.woff │ │ │ │ │ ├── Ubuntu-LightItalic.woff │ │ │ │ │ └── Ubuntu.css │ │ │ └── theme │ │ │ │ ├── template │ │ │ │ ├── settings.scss │ │ │ │ └── mixins.scss │ │ │ │ ├── source │ │ │ │ ├── night.scss │ │ │ │ ├── serif.scss │ │ │ │ ├── simple.scss │ │ │ │ ├── sky.scss │ │ │ │ ├── default.scss │ │ │ │ ├── beige.scss │ │ │ │ ├── moon.scss │ │ │ │ ├── solarized.scss │ │ │ │ └── blood.scss │ │ │ │ └── README.md │ │ └── plugin │ │ │ ├── markdown │ │ │ └── example.md │ │ │ ├── multiplex │ │ │ ├── client.js │ │ │ ├── master.js │ │ │ └── index.js │ │ │ ├── print-pdf │ │ │ └── print-pdf.js │ │ │ ├── postmessage │ │ │ ├── postmessage.js │ │ │ └── example.html │ │ │ ├── remotes │ │ │ └── remotes.js │ │ │ ├── math │ │ │ └── math.js │ │ │ └── notes-server │ │ │ ├── client.js │ │ │ └── index.js │ └── digest.png ├── lyonjs-03042014 │ └── digest.png ├── mixit-30042014 │ └── digest.png └── zenika-24042014 │ └── zengular-1h.html ├── slides ├── .gitignore ├── img │ ├── books.jpg │ ├── ebook.jpg │ ├── lego.jpeg │ ├── lyon.jpg │ ├── magic.jpg │ ├── swiip.jpg │ ├── title.jpg │ ├── chrome.jpg │ ├── concepts.png │ ├── digest.png │ ├── eiffel.jpeg │ ├── gearing.jpg │ ├── jasmine.jpeg │ ├── lyonjs.png │ ├── teropa.jpeg │ ├── training.jpg │ ├── yeoman.png │ ├── zenika.jpeg │ ├── complexity.jpg │ ├── generator.png │ ├── ng-europe.png │ ├── training.jpeg │ ├── whitepage.jpg │ ├── zenika-big.png │ ├── olivierhuber.jpeg │ ├── timruffles.jpeg │ ├── underscore-js.png │ ├── angularjs-logo.png │ └── jasmine-screen.png ├── .travis.yml ├── lib │ ├── font │ │ ├── league_gothic_license │ │ ├── league_gothic-webfont.eot │ │ ├── league_gothic-webfont.ttf │ │ └── league_gothic-webfont.woff │ ├── js │ │ ├── html5shiv.js │ │ └── classList.js │ └── css │ │ └── zenburn.css ├── test │ ├── examples │ │ ├── assets │ │ │ ├── image1.png │ │ │ └── image2.png │ │ ├── barebones.html │ │ └── embedded-media.html │ ├── test-markdown.js │ ├── test-markdown.html │ └── test.html ├── plugin │ ├── markdown │ │ └── example.md │ ├── multiplex │ │ ├── client.js │ │ ├── master.js │ │ └── index.js │ ├── print-pdf │ │ └── print-pdf.js │ ├── postmessage │ │ ├── postmessage.js │ │ └── example.html │ ├── remotes │ │ └── remotes.js │ ├── math │ │ └── math.js │ ├── notes-server │ │ ├── client.js │ │ └── index.js │ └── notes │ │ └── notes.js ├── css │ └── theme │ │ ├── template │ │ ├── settings.scss │ │ └── mixins.scss │ │ ├── source │ │ ├── night.scss │ │ ├── serif.scss │ │ ├── simple.scss │ │ ├── sky.scss │ │ ├── default.scss │ │ ├── beige.scss │ │ ├── moon.scss │ │ ├── solarized.scss │ │ └── blood.scss │ │ └── README.md ├── LICENSE └── package.json ├── .editorconfig ├── index.html ├── index.css ├── .jshintrc ├── alternatives ├── zengular-workshop.html ├── zengular-1h.html ├── zengular-parse.html └── zengular-1h.js ├── README.md ├── workout ├── index6.js ├── index5.js ├── index3.js ├── index2.js └── index4.js └── index.js /workshop/zengular.js: -------------------------------------------------------------------------------- 1 | // A vous ! 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .DS_Store 3 | *.iml 4 | node_modules -------------------------------------------------------------------------------- /sessions/devoxxfr-16042014/zengular.js: -------------------------------------------------------------------------------- 1 | // A vous ! 2 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-01-scope.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /slides/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .svn 3 | log/*.log 4 | tmp/** 5 | node_modules/ 6 | .sass-cache -------------------------------------------------------------------------------- /slides/img/books.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/books.jpg -------------------------------------------------------------------------------- /slides/img/ebook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/ebook.jpg -------------------------------------------------------------------------------- /slides/img/lego.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/lego.jpeg -------------------------------------------------------------------------------- /slides/img/lyon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/lyon.jpg -------------------------------------------------------------------------------- /slides/img/magic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/magic.jpg -------------------------------------------------------------------------------- /slides/img/swiip.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/swiip.jpg -------------------------------------------------------------------------------- /slides/img/title.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/title.jpg -------------------------------------------------------------------------------- /workshop/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/workshop/digest.png -------------------------------------------------------------------------------- /slides/img/chrome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/chrome.jpg -------------------------------------------------------------------------------- /slides/img/concepts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/concepts.png -------------------------------------------------------------------------------- /slides/img/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/digest.png -------------------------------------------------------------------------------- /slides/img/eiffel.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/eiffel.jpeg -------------------------------------------------------------------------------- /slides/img/gearing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/gearing.jpg -------------------------------------------------------------------------------- /slides/img/jasmine.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/jasmine.jpeg -------------------------------------------------------------------------------- /slides/img/lyonjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/lyonjs.png -------------------------------------------------------------------------------- /slides/img/teropa.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/teropa.jpeg -------------------------------------------------------------------------------- /slides/img/training.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/training.jpg -------------------------------------------------------------------------------- /slides/img/yeoman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/yeoman.png -------------------------------------------------------------------------------- /slides/img/zenika.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/zenika.jpeg -------------------------------------------------------------------------------- /slides/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 4 | before_script: 5 | - npm install -g grunt-cli -------------------------------------------------------------------------------- /slides/img/complexity.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/complexity.jpg -------------------------------------------------------------------------------- /slides/img/generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/generator.png -------------------------------------------------------------------------------- /slides/img/ng-europe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/ng-europe.png -------------------------------------------------------------------------------- /slides/img/training.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/training.jpeg -------------------------------------------------------------------------------- /slides/img/whitepage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/whitepage.jpg -------------------------------------------------------------------------------- /slides/img/zenika-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/zenika-big.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .svn 3 | log/*.log 4 | tmp/** 5 | node_modules/ 6 | .sass-cache -------------------------------------------------------------------------------- /slides/img/olivierhuber.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/olivierhuber.jpeg -------------------------------------------------------------------------------- /slides/img/timruffles.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/timruffles.jpeg -------------------------------------------------------------------------------- /slides/img/underscore-js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/underscore-js.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .svn 3 | log/*.log 4 | tmp/** 5 | node_modules/ 6 | .sass-cache -------------------------------------------------------------------------------- /slides/img/angularjs-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/angularjs-logo.png -------------------------------------------------------------------------------- /slides/img/jasmine-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/img/jasmine-screen.png -------------------------------------------------------------------------------- /sessions/lyonjs-03042014/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/lyonjs-03042014/digest.png -------------------------------------------------------------------------------- /sessions/mixit-30042014/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/mixit-30042014/digest.png -------------------------------------------------------------------------------- /sessions/devoxxfr-16042014/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/devoxxfr-16042014/digest.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 4 | before_script: 5 | - npm install -g grunt-cli -------------------------------------------------------------------------------- /slides/lib/font/league_gothic_license: -------------------------------------------------------------------------------- 1 | SIL Open Font License (OFL) 2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL 3 | -------------------------------------------------------------------------------- /slides/test/examples/assets/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/test/examples/assets/image1.png -------------------------------------------------------------------------------- /slides/test/examples/assets/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/test/examples/assets/image2.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/digest.png -------------------------------------------------------------------------------- /slides/lib/font/league_gothic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/lib/font/league_gothic-webfont.eot -------------------------------------------------------------------------------- /slides/lib/font/league_gothic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/lib/font/league_gothic-webfont.ttf -------------------------------------------------------------------------------- /slides/lib/font/league_gothic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/slides/lib/font/league_gothic-webfont.woff -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/digest.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/lyonjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/lyonjs.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/swiip.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/swiip.jpg -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/teropa.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/teropa.jpeg -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/zenika.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/zenika.jpeg -------------------------------------------------------------------------------- /workshop/tests/jasmine-2.0.0/jasmine_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/workshop/tests/jasmine-2.0.0/jasmine_favicon.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/digest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/digest.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/lego.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/lego.jpeg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/lyonjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/lyonjs.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/slide8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/slide8.jpg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/swiip.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/swiip.jpg -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/timruffles.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/timruffles.jpeg -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/lib/font/league_gothic_license: -------------------------------------------------------------------------------- 1 | SIL Open Font License (OFL) 2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL 3 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/jasmine.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/jasmine.jpeg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/teropa.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/teropa.jpeg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/zenika.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/zenika.jpeg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/lib/font/league_gothic_license: -------------------------------------------------------------------------------- 1 | SIL Open Font License (OFL) 2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL 3 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/img/angularjs-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/img/angularjs-logo.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/Slide_first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/Slide_first.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/Slide_last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/Slide_last.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/timruffles.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/timruffles.jpeg -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/angularjs-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/angularjs-logo.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/jasmine-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/jasmine-screen.png -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/img/underscore-js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/img/underscore-js.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/examples/assets/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/test/examples/assets/image1.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/examples/assets/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/test/examples/assets/image2.png -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.eot -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.ttf -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/m6web-25042014/slides/lib/font/league_gothic-webfont.woff -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-Bold.woff -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-Light.woff -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.eot -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.ttf -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/lib/font/league_gothic-webfont.woff -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-BoldItalic.woff -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swiip/angular-from-scratch/HEAD/sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu-LightItalic.woff -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-01-scope.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 1 of the workshop', function() { 2 | 3 | it('sould be a scope defined', function() { 4 | 5 | expect(_.isFunction(Scope)).toBe(true); 6 | 7 | }); 8 | 9 | }); 10 | -------------------------------------------------------------------------------- /slides/lib/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | document.createElement('header'); 2 | document.createElement('nav'); 3 | document.createElement('section'); 4 | document.createElement('article'); 5 | document.createElement('aside'); 6 | document.createElement('footer'); 7 | document.createElement('hgroup'); -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/lib/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | document.createElement('header'); 2 | document.createElement('nav'); 3 | document.createElement('section'); 4 | document.createElement('article'); 5 | document.createElement('aside'); 6 | document.createElement('footer'); 7 | document.createElement('hgroup'); -------------------------------------------------------------------------------- /workshop/solutions/zengular-02-watch.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | } 4 | 5 | Scope.prototype.$watch = function (watcherFn, listenerFn) { 6 | var watch = { 7 | watcherFn: watcherFn, 8 | listenerFn: listenerFn 9 | }; 10 | this.$$watchers.push(watch); 11 | }; 12 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/lib/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | document.createElement('header'); 2 | document.createElement('nav'); 3 | document.createElement('section'); 4 | document.createElement('article'); 5 | document.createElement('aside'); 6 | document.createElement('footer'); 7 | document.createElement('hgroup'); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Angular From Scratch 4 | 5 | 6 | 7 |

hello

8 |

9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /slides/test/test-markdown.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | Reveal.addEventListener( 'ready', function() { 4 | 5 | QUnit.module( 'Markdown' ); 6 | 7 | test( 'Vertical separator', function() { 8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' ); 9 | }); 10 | 11 | 12 | } ); 13 | 14 | Reveal.initialize(); 15 | 16 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/test-markdown.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | Reveal.addEventListener( 'ready', function() { 4 | 5 | QUnit.module( 'Markdown' ); 6 | 7 | test( 'Vertical separator', function() { 8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' ); 9 | }); 10 | 11 | 12 | } ); 13 | 14 | Reveal.initialize(); 15 | 16 | -------------------------------------------------------------------------------- /slides/plugin/markdown/example.md: -------------------------------------------------------------------------------- 1 | # Markdown Demo 2 | 3 | 4 | 5 | ## External 1.1 6 | 7 | Content 1.1 8 | 9 | Note: This will only appear in the speaker notes window. 10 | 11 | 12 | ## External 1.2 13 | 14 | Content 1.2 15 | 16 | 17 | 18 | ## External 2 19 | 20 | Content 2.1 21 | 22 | 23 | 24 | ## External 3.1 25 | 26 | Content 3.1 27 | 28 | 29 | ## External 3.2 30 | 31 | Content 3.2 32 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/plugin/markdown/example.md: -------------------------------------------------------------------------------- 1 | # Markdown Demo 2 | 3 | 4 | 5 | ## External 1.1 6 | 7 | Content 1.1 8 | 9 | Note: This will only appear in the speaker notes window. 10 | 11 | 12 | ## External 1.2 13 | 14 | Content 1.2 15 | 16 | 17 | 18 | ## External 2 19 | 20 | Content 2.1 21 | 22 | 23 | 24 | ## External 3.1 25 | 26 | Content 3.1 27 | 28 | 29 | ## External 3.2 30 | 31 | Content 3.2 32 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/plugin/markdown/example.md: -------------------------------------------------------------------------------- 1 | # Markdown Demo 2 | 3 | 4 | 5 | ## External 1.1 6 | 7 | Content 1.1 8 | 9 | Note: This will only appear in the speaker notes window. 10 | 11 | 12 | ## External 1.2 13 | 14 | Content 1.2 15 | 16 | 17 | 18 | ## External 2 19 | 20 | Content 2.1 21 | 22 | 23 | 24 | ## External 3.1 25 | 26 | Content 3.1 27 | 28 | 29 | ## External 3.2 30 | 31 | Content 3.2 32 | -------------------------------------------------------------------------------- /slides/plugin/multiplex/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var multiplex = Reveal.getConfig().multiplex; 3 | var socketId = multiplex.id; 4 | var socket = io.connect(multiplex.url); 5 | 6 | socket.on(multiplex.id, function(data) { 7 | // ignore data from sockets that aren't ours 8 | if (data.socketId !== socketId) { return; } 9 | if( window.location.host === 'localhost:1947' ) return; 10 | 11 | Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote'); 12 | }); 13 | }()); 14 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/plugin/multiplex/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var multiplex = Reveal.getConfig().multiplex; 3 | var socketId = multiplex.id; 4 | var socket = io.connect(multiplex.url); 5 | 6 | socket.on(multiplex.id, function(data) { 7 | // ignore data from sockets that aren't ours 8 | if (data.socketId !== socketId) { return; } 9 | if( window.location.host === 'localhost:1947' ) return; 10 | 11 | Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote'); 12 | }); 13 | }()); 14 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/plugin/multiplex/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var multiplex = Reveal.getConfig().multiplex; 3 | var socketId = multiplex.id; 4 | var socket = io.connect(multiplex.url); 5 | 6 | socket.on(multiplex.id, function(data) { 7 | // ignore data from sockets that aren't ours 8 | if (data.socketId !== socketId) { return; } 9 | if( window.location.host === 'localhost:1947' ) return; 10 | 11 | Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote'); 12 | }); 13 | }()); 14 | -------------------------------------------------------------------------------- /index.css: -------------------------------------------------------------------------------- 1 | body { 2 | height: 100%; 3 | margin: 0; 4 | background-image: url('slides/img/whitepage.jpg'); 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: center; 8 | 9 | } 10 | 11 | h1, h2 { 12 | font-family: 'Cherry Cream Soda', cursive; 13 | font-size: 4em; 14 | text-align: center; 15 | align-items: center; 16 | background-color: rgba(0, 0, 0, 0.5); 17 | color: white; 18 | padding: .2em; 19 | margin: 0; 20 | } 21 | 22 | input { 23 | font-size: .5em; 24 | margin: .5em; 25 | border-radius: .2em; 26 | border: none; 27 | } 28 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-03-digest.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | } 4 | 5 | Scope.prototype.$watch = function (watcherFn, listenerFn) { 6 | var watch = { 7 | watcherFn: watcherFn, 8 | listenerFn: listenerFn 9 | }; 10 | this.$$watchers.push(watch); 11 | }; 12 | 13 | Scope.prototype.$digest = function () { 14 | _.each(this.$$watchers, function (watcher) { 15 | var newValue = watcher.watcherFn(this); 16 | if (watcher.last !== newValue) { 17 | watcher.listenerFn(newValue, watcher.last, this); 18 | watcher.last = newValue; 19 | } 20 | }.bind(this)); 21 | }; 22 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-04-apply.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | } 4 | 5 | Scope.prototype.$watch = function (watcherFn, listenerFn) { 6 | var watch = { 7 | watcherFn: watcherFn, 8 | listenerFn: listenerFn 9 | }; 10 | this.$$watchers.push(watch); 11 | }; 12 | 13 | Scope.prototype.$digest = function () { 14 | _.each(this.$$watchers, function (watcher) { 15 | var newValue = watcher.watcherFn(this); 16 | if (watcher.last !== newValue) { 17 | watcher.listenerFn(newValue, watcher.last, this); 18 | watcher.last = newValue; 19 | } 20 | }.bind(this)); 21 | }; 22 | 23 | Scope.prototype.$apply = function (exprFn) { 24 | try { 25 | exprFn(); 26 | } finally { 27 | this.$digest(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-08-directive.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 8 of the workshop', function() { 2 | 3 | it('sould add an object $$directives and a function $directive', function() { 4 | 5 | expect(_.isObject($$directives)).toBe(true); 6 | 7 | expect(_.isFunction($directive)).toBe(true); 8 | 9 | }); 10 | 11 | it('sould register the directive function when using $directive function', function() { 12 | 13 | var directiveName = 'directive-test'; 14 | var directiveFunction = function() {}; 15 | 16 | $directive(directiveName, directiveFunction); 17 | 18 | expect($$directives[directiveName]).toBe(directiveFunction); 19 | 20 | expect($directive(directiveName)).toBe(directiveFunction); 21 | 22 | }); 23 | 24 | }); 25 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browser": true, 3 | "devel": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "globalstrict": true, 20 | "trailing": true, 21 | "smarttabs": true, 22 | "white": true, 23 | "validthis": true, 24 | "globals": { 25 | /* Angular Mocks */ 26 | "inject": false, 27 | /* MOCHA */ 28 | "describe": false, 29 | "it": false, 30 | "before": false, 31 | "beforeEach": false, 32 | "after": false, 33 | "afterEach": false 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-02-watch.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 2 of the workshop', function() { 2 | 3 | var scope; 4 | 5 | beforeEach(function() { 6 | scope = new Scope(); 7 | }); 8 | 9 | it('sould add a function $watch in the Scope', function() { 10 | 11 | expect(_.isFunction(scope.$watch)).toBe(true); 12 | 13 | }); 14 | 15 | it('sould add a watcher object in $$watchers when using $watch', function() { 16 | 17 | var myWatcher = function() {}, myListener = function() {}; 18 | 19 | scope.$watch(myWatcher, myListener); 20 | 21 | expect(_.isArray(scope.$$watchers)).toBe(true); 22 | expect(scope.$$watchers.length).toBe(1); 23 | expect(scope.$$watchers[0].watcherFn).toBe(myWatcher); 24 | expect(scope.$$watchers[0].listenerFn).toBe(myListener); 25 | 26 | }); 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /workshop/zengular.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 |

Cet exercice à pour but de démystifier le schéma suivant :

13 | 14 | 15 |

... en créant tout simplement notre propre AngularJS

16 |
17 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 18 | specs le schéma ci-dessus

19 |
20 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /alternatives/zengular-workshop.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 |

Cet exercice à pour but de démystifier le schéma suivant :

13 | 14 | 15 |

... en créant tout simplement notre propre AngularJS

16 |
17 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 18 | specs le schéma ci-dessus

19 |
20 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/fonts/Ubuntu/Ubuntu.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Ubuntu'; 3 | font-style: normal; 4 | font-weight: 300; 5 | src: local('Ubuntu Light'), local('Ubuntu-Light'), url('Ubuntu-Light.woff') format('woff'); 6 | } 7 | @font-face { 8 | font-family: 'Ubuntu'; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url('Ubuntu-Bold.woff') format('woff'); 12 | } 13 | @font-face { 14 | font-family: 'Ubuntu'; 15 | font-style: italic; 16 | font-weight: 300; 17 | src: local('Ubuntu Light Italic'), local('Ubuntu-LightItalic'), url('Ubuntu-LightItalic.woff') format('woff'); 18 | } 19 | @font-face { 20 | font-family: 'Ubuntu'; 21 | font-style: italic; 22 | font-weight: 700; 23 | src: local('Ubuntu Bold Italic'), local('Ubuntu-BoldItalic'), url('Ubuntu-BoldItalic.woff') format('woff'); 24 | } 25 | -------------------------------------------------------------------------------- /slides/test/examples/barebones.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Barebones 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 |
17 | 18 |
19 |

Barebones Presentation

20 |

This example contains the bare minimum includes and markup required to run a reveal.js presentation.

21 |
22 | 23 |
24 |

No Theme

25 |

There's no theme included, so it will fall back on browser defaults.

26 |
27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /alternatives/zengular-1h.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 | 13 |

Cet exercice à pour but de démystifier le schéma suivant :

14 | 15 | 16 |

... en créant tout simplement notre propre AngularJS

17 |
18 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 19 | specs le schéma ci-dessus

20 |
21 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/zengular-1h.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 | 13 |

Cet exercice à pour but de démystifier le schéma suivant :

14 | 15 | 16 |

... en créant tout simplement notre propre AngularJS

17 |
18 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 19 | specs le schéma ci-dessus

20 |
21 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /sessions/zenika-24042014/zengular-1h.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 | 13 |

Cet exercice à pour but de démystifier le schéma suivant :

14 | 15 | 16 |

... en créant tout simplement notre propre AngularJS

17 |
18 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 19 | specs le schéma ci-dessus

20 |
21 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/examples/barebones.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Barebones 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 |
17 | 18 |
19 |

Barebones Presentation

20 |

This example contains the bare minimum includes and markup required to run a reveal.js presentation.

21 |
22 | 23 |
24 |

No Theme

25 |

There's no theme included, so it will fall back on browser defaults.

26 |
27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-05-loop.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | } 4 | 5 | Scope.prototype.$watch = function (watcherFn, listenerFn) { 6 | var watch = { 7 | watcherFn: watcherFn, 8 | listenerFn: listenerFn 9 | }; 10 | this.$$watchers.push(watch); 11 | }; 12 | 13 | Scope.prototype.$digest = function () { 14 | var dirty; 15 | var ttl = 10; 16 | do { 17 | dirty = false; 18 | _.each(this.$$watchers, function (watcher) { 19 | var newValue = watcher.watcherFn(this); 20 | if (watcher.last !== newValue) { 21 | dirty = true; 22 | watcher.listenerFn(newValue, watcher.last, this); 23 | watcher.last = newValue; 24 | } 25 | }.bind(this)); 26 | if (dirty && !(ttl--)) { 27 | throw "$digest est partie en boucle !" 28 | } 29 | } while (dirty) 30 | }; 31 | 32 | Scope.prototype.$apply = function (exprFn) { 33 | try { 34 | exprFn(); 35 | } finally { 36 | this.$digest(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /alternatives/zengular-parse.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Zengular 6 | 7 | 8 | 9 | 10 |

Zengular

11 | 12 | 13 |

Cet exercice à pour but de démystifier le schéma suivant :

14 | 15 | 16 |

... en créant tout simplement notre propre AngularJS

17 |
18 |

Vous partirez de cette page vierge de tout javascript pour construire petit à petit un mini framework qui à pour 19 | specs le schéma ci-dessus

20 |
21 | Activer (F12) à présent votre concole JavaScript sur cette page, éditer ce même fichier et suivez le guide... 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /slides/css/theme/template/settings.scss: -------------------------------------------------------------------------------- 1 | // Base settings for all themes that can optionally be 2 | // overridden by the super-theme 3 | 4 | // Background of the presentation 5 | $backgroundColor: #2b2b2b; 6 | 7 | // Primary/body text 8 | $mainFont: 'Lato', sans-serif; 9 | $mainFontSize: 36px; 10 | $mainColor: #eee; 11 | 12 | // Headings 13 | $headingMargin: 0 0 20px 0; 14 | $headingFont: 'League Gothic', Impact, sans-serif; 15 | $headingColor: #eee; 16 | $headingLineHeight: 0.9em; 17 | $headingLetterSpacing: 0.02em; 18 | $headingTextTransform: uppercase; 19 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); 20 | $heading1TextShadow: $headingTextShadow; 21 | 22 | // Links and actions 23 | $linkColor: #13DAEC; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | 26 | // Text selection 27 | $selectionBackgroundColor: #FF5E99; 28 | $selectionColor: #fff; 29 | 30 | // Generates the presentation background, can be overridden 31 | // to return a background image or gradient 32 | @mixin bodyBackground() { 33 | background: $backgroundColor; 34 | } -------------------------------------------------------------------------------- /slides/plugin/print-pdf/print-pdf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * phantomjs script for printing presentations to PDF. 3 | * 4 | * Example: 5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf 6 | * 7 | * By Manuel Bieh (https://github.com/manuelbieh) 8 | */ 9 | 10 | // html2pdf.js 11 | var page = new WebPage(); 12 | var system = require( 'system' ); 13 | 14 | page.viewportSize = { 15 | width: 1024, 16 | height: 768 17 | }; 18 | 19 | page.paperSize = { 20 | format: 'letter', 21 | orientation: 'landscape', 22 | margin: { 23 | left: '0', 24 | right: '0', 25 | top: '0', 26 | bottom: '0' 27 | } 28 | }; 29 | 30 | var revealFile = system.args[1] || 'index.html?print-pdf'; 31 | var slideFile = system.args[2] || 'slides.pdf'; 32 | 33 | if( slideFile.match( /\.pdf$/gi ) === null ) { 34 | slideFile += '.pdf'; 35 | } 36 | 37 | console.log( 'Printing PDF...' ); 38 | 39 | page.open( revealFile, function( status ) { 40 | console.log( 'Printed succesfully' ); 41 | page.render( slideFile ); 42 | phantom.exit(); 43 | } ); 44 | 45 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/css/theme/template/settings.scss: -------------------------------------------------------------------------------- 1 | // Base settings for all themes that can optionally be 2 | // overridden by the super-theme 3 | 4 | // Background of the presentation 5 | $backgroundColor: #2b2b2b; 6 | 7 | // Primary/body text 8 | $mainFont: 'Lato', sans-serif; 9 | $mainFontSize: 36px; 10 | $mainColor: #eee; 11 | 12 | // Headings 13 | $headingMargin: 0 0 20px 0; 14 | $headingFont: 'League Gothic', Impact, sans-serif; 15 | $headingColor: #eee; 16 | $headingLineHeight: 0.9em; 17 | $headingLetterSpacing: 0.02em; 18 | $headingTextTransform: uppercase; 19 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); 20 | $heading1TextShadow: $headingTextShadow; 21 | 22 | // Links and actions 23 | $linkColor: #13DAEC; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | 26 | // Text selection 27 | $selectionBackgroundColor: #FF5E99; 28 | $selectionColor: #fff; 29 | 30 | // Generates the presentation background, can be overridden 31 | // to return a background image or gradient 32 | @mixin bodyBackground() { 33 | background: $backgroundColor; 34 | } -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/theme/template/settings.scss: -------------------------------------------------------------------------------- 1 | // Base settings for all themes that can optionally be 2 | // overridden by the super-theme 3 | 4 | // Background of the presentation 5 | $backgroundColor: #2b2b2b; 6 | 7 | // Primary/body text 8 | $mainFont: 'Lato', sans-serif; 9 | $mainFontSize: 36px; 10 | $mainColor: #eee; 11 | 12 | // Headings 13 | $headingMargin: 0 0 20px 0; 14 | $headingFont: 'League Gothic', Impact, sans-serif; 15 | $headingColor: #eee; 16 | $headingLineHeight: 0.9em; 17 | $headingLetterSpacing: 0.02em; 18 | $headingTextTransform: uppercase; 19 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); 20 | $heading1TextShadow: $headingTextShadow; 21 | 22 | // Links and actions 23 | $linkColor: #13DAEC; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | 26 | // Text selection 27 | $selectionBackgroundColor: #FF5E99; 28 | $selectionColor: #fff; 29 | 30 | // Generates the presentation background, can be overridden 31 | // to return a background image or gradient 32 | @mixin bodyBackground() { 33 | background: $backgroundColor; 34 | } -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/plugin/print-pdf/print-pdf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * phantomjs script for printing presentations to PDF. 3 | * 4 | * Example: 5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf 6 | * 7 | * By Manuel Bieh (https://github.com/manuelbieh) 8 | */ 9 | 10 | // html2pdf.js 11 | var page = new WebPage(); 12 | var system = require( 'system' ); 13 | 14 | page.viewportSize = { 15 | width: 1024, 16 | height: 768 17 | }; 18 | 19 | page.paperSize = { 20 | format: 'letter', 21 | orientation: 'landscape', 22 | margin: { 23 | left: '0', 24 | right: '0', 25 | top: '0', 26 | bottom: '0' 27 | } 28 | }; 29 | 30 | var revealFile = system.args[1] || 'index.html?print-pdf'; 31 | var slideFile = system.args[2] || 'slides.pdf'; 32 | 33 | if( slideFile.match( /\.pdf$/gi ) === null ) { 34 | slideFile += '.pdf'; 35 | } 36 | 37 | console.log( 'Printing PDF...' ); 38 | 39 | page.open( revealFile, function( status ) { 40 | console.log( 'Printed succesfully' ); 41 | page.render( slideFile ); 42 | phantom.exit(); 43 | } ); 44 | 45 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/plugin/print-pdf/print-pdf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * phantomjs script for printing presentations to PDF. 3 | * 4 | * Example: 5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf 6 | * 7 | * By Manuel Bieh (https://github.com/manuelbieh) 8 | */ 9 | 10 | // html2pdf.js 11 | var page = new WebPage(); 12 | var system = require( 'system' ); 13 | 14 | page.viewportSize = { 15 | width: 1024, 16 | height: 768 17 | }; 18 | 19 | page.paperSize = { 20 | format: 'letter', 21 | orientation: 'landscape', 22 | margin: { 23 | left: '0', 24 | right: '0', 25 | top: '0', 26 | bottom: '0' 27 | } 28 | }; 29 | 30 | var revealFile = system.args[1] || 'index.html?print-pdf'; 31 | var slideFile = system.args[2] || 'slides.pdf'; 32 | 33 | if( slideFile.match( /\.pdf$/gi ) === null ) { 34 | slideFile += '.pdf'; 35 | } 36 | 37 | console.log( 'Printing PDF...' ); 38 | 39 | page.open( revealFile, function( status ) { 40 | console.log( 'Printed succesfully' ); 41 | page.render( slideFile ); 42 | phantom.exit(); 43 | } ); 44 | 45 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-06-dirty.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | } 4 | 5 | Scope.prototype.$watch = function (watcherFn, listenerFn, byValue) { 6 | var watch = { 7 | watcherFn: watcherFn, 8 | listenerFn: listenerFn, 9 | byValue: byValue 10 | }; 11 | this.$$watchers.push(watch); 12 | }; 13 | 14 | Scope.prototype.$digest = function () { 15 | var dirty; 16 | var ttl = 10; 17 | do { 18 | dirty = false; 19 | _.each(this.$$watchers, function (watcher) { 20 | var newValue = watcher.watcherFn(this); 21 | if (watcher.byValue ? !_.isEqual(watcher.last, newValue) : watcher.last !== newValue) { 22 | dirty = true; 23 | watcher.listenerFn(newValue, watcher.last, this); 24 | watcher.last = watcher.byValue ? _.clone(newValue) : newValue; 25 | } 26 | }.bind(this)); 27 | if (dirty && !(ttl--)) { 28 | throw "$digest est partie en boucle !" 29 | } 30 | } while (dirty) 31 | }; 32 | 33 | Scope.prototype.$apply = function (exprFn) { 34 | try { 35 | exprFn(); 36 | } finally { 37 | this.$digest(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Angular from scratch 2 | 3 | This is the repository of my live coding from [ng-europe](http://ngeurope.org) and [Soft Shake](http://soft-shake.ch). 4 | 5 | It's a fork of the initiative of a Workshop for the [DevoxxFR](http://www.devoxx.fr/) and the [Mix-IT](http://www.mix-it.fr/). You can find more description on the original repository. 6 | 7 | This talk has been inspired by some blog posts on the internet and especially [Make Your Own AngularJS, Part 1: Scopes And Digest](http://teropa.info/blog/2013/11/03/make-your-own-angular-part-1-scopes-and-digest.html). The blogger [@teropa](https://twitter.com/teropa) started the adaptation of the concept on an eBook which can only recommend [Build Your Own AngularJS](http://teropa.info/build-your-own-angular). 8 | 9 | ##Content 10 | 11 | * root directory contains the actual files used on stage 12 | * slides directory contains the slides to support the workshop 13 | * alternatives directory contains some variants of the code 14 | * workout directoy contains my actual repetitions files 15 | * sessions directory contains all files from each sessions of this workshop 16 | -------------------------------------------------------------------------------- /slides/css/theme/source/night.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700); 16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); 17 | 18 | 19 | // Override theme settings (see ../template/settings.scss) 20 | $backgroundColor: #111; 21 | 22 | $mainFont: 'Open Sans', sans-serif; 23 | $linkColor: #e7ad52; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | $headingFont: 'Montserrat', Impact, sans-serif; 26 | $headingTextShadow: none; 27 | $headingLetterSpacing: -0.03em; 28 | $headingTextTransform: none; 29 | $selectionBackgroundColor: #e7ad52; 30 | $mainFontSize: 30px; 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- -------------------------------------------------------------------------------- /slides/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2013 Hakim El Hattab, http://hakim.se 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /slides/plugin/postmessage/postmessage.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | simple postmessage plugin 4 | 5 | Useful when a reveal slideshow is inside an iframe. 6 | It allows to call reveal methods from outside. 7 | 8 | Example: 9 | var reveal = window.frames[0]; 10 | 11 | // Reveal.prev(); 12 | reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*'); 13 | // Reveal.next(); 14 | reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*'); 15 | // Reveal.slide(2, 2); 16 | reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*'); 17 | 18 | Add to the slideshow: 19 | 20 | dependencies: [ 21 | ... 22 | { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } } 23 | ] 24 | 25 | */ 26 | 27 | (function (){ 28 | 29 | window.addEventListener( "message", function ( event ) { 30 | var data = JSON.parse( event.data ), 31 | method = data.method, 32 | args = data.args; 33 | 34 | if( typeof Reveal[method] === 'function' ) { 35 | Reveal[method].apply( Reveal, data.args ); 36 | } 37 | }, false); 38 | 39 | }()); 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /slides/test/examples/embedded-media.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Embedded Media 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 |

Embedded Media Test

23 |
24 | 25 |
26 | 27 |
28 | 29 |
30 |

Empty Slide

31 |
32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 | 40 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/css/theme/source/night.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700); 16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); 17 | 18 | 19 | // Override theme settings (see ../template/settings.scss) 20 | $backgroundColor: #111; 21 | 22 | $mainFont: 'Open Sans', sans-serif; 23 | $linkColor: #e7ad52; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | $headingFont: 'Montserrat', Impact, sans-serif; 26 | $headingTextShadow: none; 27 | $headingLetterSpacing: -0.03em; 28 | $headingTextTransform: none; 29 | $selectionBackgroundColor: #e7ad52; 30 | $mainFontSize: 30px; 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/theme/source/night.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700); 16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); 17 | 18 | 19 | // Override theme settings (see ../template/settings.scss) 20 | $backgroundColor: #111; 21 | 22 | $mainFont: 'Open Sans', sans-serif; 23 | $linkColor: #e7ad52; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | $headingFont: 'Montserrat', Impact, sans-serif; 26 | $headingTextShadow: none; 27 | $headingLetterSpacing: -0.03em; 28 | $headingTextTransform: none; 29 | $selectionBackgroundColor: #e7ad52; 30 | $mainFontSize: 30px; 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2013 Hakim El Hattab, http://hakim.se 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/plugin/postmessage/postmessage.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | simple postmessage plugin 4 | 5 | Useful when a reveal slideshow is inside an iframe. 6 | It allows to call reveal methods from outside. 7 | 8 | Example: 9 | var reveal = window.frames[0]; 10 | 11 | // Reveal.prev(); 12 | reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*'); 13 | // Reveal.next(); 14 | reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*'); 15 | // Reveal.slide(2, 2); 16 | reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*'); 17 | 18 | Add to the slideshow: 19 | 20 | dependencies: [ 21 | ... 22 | { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } } 23 | ] 24 | 25 | */ 26 | 27 | (function (){ 28 | 29 | window.addEventListener( "message", function ( event ) { 30 | var data = JSON.parse( event.data ), 31 | method = data.method, 32 | args = data.args; 33 | 34 | if( typeof Reveal[method] === 'function' ) { 35 | Reveal[method].apply( Reveal, data.args ); 36 | } 37 | }, false); 38 | 39 | }()); 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/plugin/postmessage/postmessage.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | simple postmessage plugin 4 | 5 | Useful when a reveal slideshow is inside an iframe. 6 | It allows to call reveal methods from outside. 7 | 8 | Example: 9 | var reveal = window.frames[0]; 10 | 11 | // Reveal.prev(); 12 | reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*'); 13 | // Reveal.next(); 14 | reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*'); 15 | // Reveal.slide(2, 2); 16 | reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*'); 17 | 18 | Add to the slideshow: 19 | 20 | dependencies: [ 21 | ... 22 | { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } } 23 | ] 24 | 25 | */ 26 | 27 | (function (){ 28 | 29 | window.addEventListener( "message", function ( event ) { 30 | var data = JSON.parse( event.data ), 31 | method = data.method, 32 | args = data.args; 33 | 34 | if( typeof Reveal[method] === 'function' ) { 35 | Reveal[method].apply( Reveal, data.args ); 36 | } 37 | }, false); 38 | 39 | }()); 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/examples/embedded-media.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Embedded Media 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 |

Embedded Media Test

23 |
24 | 25 |
26 | 27 |
28 | 29 |
30 |

Empty Slide

31 |
32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 | 40 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /slides/css/theme/source/serif.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is brown. 4 | * 5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. 6 | */ 7 | 8 | 9 | // Default mixins and settings ----------------- 10 | @import "../template/mixins"; 11 | @import "../template/settings"; 12 | // --------------------------------------------- 13 | 14 | 15 | 16 | // Override theme settings (see ../template/settings.scss) 17 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 18 | $mainColor: #000; 19 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 20 | $headingColor: #383D3D; 21 | $headingTextShadow: none; 22 | $headingTextTransform: none; 23 | $backgroundColor: #F0F1EB; 24 | $linkColor: #51483D; 25 | $linkColorHover: lighten( $linkColor, 20% ); 26 | $selectionBackgroundColor: #26351C; 27 | 28 | .reveal a:not(.image) { 29 | line-height: 1.3em; 30 | } 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- 36 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-04-apply.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 4 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | listenerFn = function () {}; 8 | 9 | spyOn(window, 'listenerFn'); 10 | 11 | scope.$watch(function (scope) { 12 | return scope.value; 13 | }, listenerFn); 14 | 15 | }); 16 | 17 | it('sould add a function $apply in the Scope', function() { 18 | 19 | expect(_.isFunction(scope.$apply)).toBe(true); 20 | 21 | }); 22 | 23 | it('should launch the listener when calling $apply and changing something', function() { 24 | 25 | scope.$apply(function() { 26 | scope.value = 'first value'; 27 | }); 28 | 29 | expect(listenerFn.calls.count()).toBe(1); 30 | 31 | }); 32 | 33 | it('should launch the listener when calling $apply even with an exception', function() { 34 | 35 | try { 36 | scope.$apply(function() { 37 | scope.value = 'second value'; 38 | throw 'test error'; 39 | }); 40 | } catch (error) { 41 | //nothing 42 | } 43 | 44 | expect(listenerFn.calls.count()).toBe(1); 45 | 46 | }); 47 | 48 | }); 49 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/css/theme/source/serif.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is brown. 4 | * 5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. 6 | */ 7 | 8 | 9 | // Default mixins and settings ----------------- 10 | @import "../template/mixins"; 11 | @import "../template/settings"; 12 | // --------------------------------------------- 13 | 14 | 15 | 16 | // Override theme settings (see ../template/settings.scss) 17 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 18 | $mainColor: #000; 19 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 20 | $headingColor: #383D3D; 21 | $headingTextShadow: none; 22 | $headingTextTransform: none; 23 | $backgroundColor: #F0F1EB; 24 | $linkColor: #51483D; 25 | $linkColorHover: lighten( $linkColor, 20% ); 26 | $selectionBackgroundColor: #26351C; 27 | 28 | .reveal a:not(.image) { 29 | line-height: 1.3em; 30 | } 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- 36 | -------------------------------------------------------------------------------- /slides/plugin/postmessage/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 |
11 | 12 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/theme/source/serif.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is brown. 4 | * 5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. 6 | */ 7 | 8 | 9 | // Default mixins and settings ----------------- 10 | @import "../template/mixins"; 11 | @import "../template/settings"; 12 | // --------------------------------------------- 13 | 14 | 15 | 16 | // Override theme settings (see ../template/settings.scss) 17 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 18 | $mainColor: #000; 19 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 20 | $headingColor: #383D3D; 21 | $headingTextShadow: none; 22 | $headingTextTransform: none; 23 | $backgroundColor: #F0F1EB; 24 | $linkColor: #51483D; 25 | $linkColorHover: lighten( $linkColor, 20% ); 26 | $selectionBackgroundColor: #26351C; 27 | 28 | .reveal a:not(.image) { 29 | line-height: 1.3em; 30 | } 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- 36 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/plugin/postmessage/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 |
11 | 12 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/plugin/postmessage/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 |
11 | 12 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-10-bind.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 10 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | var elementWithNgBind = document.getElementById('elementWithNgBind'); 8 | 9 | elementWithNgBind.innerHTML = 'Test p block'; 10 | 11 | }); 12 | 13 | it('sould add a directive called ng-bind', function() { 14 | 15 | var directiveNgBind = $directive('ng-bind'); 16 | 17 | expect(_.isFunction(directiveNgBind)).toBe(true); 18 | 19 | }); 20 | 21 | it('sould replace the content of the element with the data bound', function() { 22 | 23 | var elementRoot = document.getElementById('domStep10'); 24 | var elementWithNgBind = document.getElementById('elementWithNgBind'); 25 | 26 | //'Test p block' is the initial value in SpecRunner.html 27 | expect(elementWithNgBind.innerHTML).toBe('Test p block'); 28 | 29 | $compile(elementRoot, scope); 30 | 31 | scope.$apply(function() { 32 | //'test.bind' is the data bound in SpecRunner.html 33 | scope.test = { 34 | bind: 'first value' 35 | }; 36 | }); 37 | 38 | expect(elementWithNgBind.innerHTML).toBe(scope.test.bind); 39 | 40 | }); 41 | 42 | }); 43 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-09-compile.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 9 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | }); 8 | 9 | it('sould add a function $compile', function() { 10 | 11 | expect(_.isFunction($compile)).toBe(true); 12 | 13 | }); 14 | 15 | it('sould $compile recurse on all nodes', function() { 16 | 17 | spyOn(window, '$compile').and.callThrough(); 18 | 19 | var element = document.getElementById('domStep09'); 20 | 21 | $compile(element, scope); 22 | 23 | expect($compile.calls.count()).toBe(2); 24 | 25 | }); 26 | 27 | it('sould $compile recurse on all nodes and launch directives function with the good parameters', function() { 28 | 29 | var elementRoot = document.getElementById('domStep09'); 30 | var elementDirective = document.getElementById('elementWithDirective'); 31 | 32 | myDirectiveTest = function() {}; 33 | 34 | spyOn(window, 'myDirectiveTest'); 35 | 36 | $directive('my-directive-test', myDirectiveTest); 37 | 38 | $compile(elementRoot, scope); 39 | 40 | expect(window.myDirectiveTest).toHaveBeenCalledWith(scope, elementDirective, elementDirective.attributes); 41 | 42 | }); 43 | 44 | }); 45 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-06-dirty.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 6 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | }); 8 | 9 | it('should not watch a deep change if not watched by value', function() { 10 | 11 | listenerFn = function () {}; 12 | 13 | spyOn(window, 'listenerFn'); 14 | 15 | scope.$watch(function (scope) { 16 | return scope.value; 17 | }, listenerFn); 18 | 19 | scope.$apply(function() { 20 | scope.value = ['first value']; 21 | }); 22 | 23 | scope.$apply(function() { 24 | scope.value.push('second value'); 25 | }); 26 | 27 | expect(listenerFn.calls.count()).toBe(1); 28 | 29 | }); 30 | 31 | it('should watch a deep change if watched by value', function() { 32 | 33 | listenerFn = function () {}; 34 | 35 | spyOn(window, 'listenerFn'); 36 | 37 | scope.$watch(function (scope) { 38 | return scope.value; 39 | }, listenerFn, true); 40 | 41 | scope.$apply(function() { 42 | scope.value = ['first value']; 43 | }); 44 | 45 | scope.$apply(function() { 46 | scope.value.push('second value'); 47 | }); 48 | 49 | expect(listenerFn.calls.count()).toBe(2); 50 | 51 | }); 52 | 53 | }); 54 | -------------------------------------------------------------------------------- /slides/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reveal.js", 3 | "version": "2.6.1", 4 | "description": "The HTML Presentation Framework", 5 | "homepage": "http://lab.hakim.se/reveal-js", 6 | "subdomain": "revealjs", 7 | "scripts": { 8 | "test": "grunt test", 9 | "start": "" 10 | }, 11 | "author": { 12 | "name": "Hakim El Hattab", 13 | "email": "hakim.elhattab@gmail.com", 14 | "web": "http://hakim.se" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/hakimel/reveal.js.git" 19 | }, 20 | "engines": { 21 | "node": "~0.8.0" 22 | }, 23 | "dependencies": { 24 | "underscore": "~1.5.1", 25 | "express": "~2.5.9", 26 | "mustache": "~0.7.2", 27 | "socket.io": "~0.9.13" 28 | }, 29 | "devDependencies": { 30 | "grunt-contrib-qunit": "~0.2.2", 31 | "grunt-contrib-jshint": "~0.6.4", 32 | "grunt-contrib-cssmin": "~0.4.1", 33 | "grunt-contrib-uglify": "~0.2.4", 34 | "grunt-contrib-watch": "~0.5.3", 35 | "grunt-contrib-sass": "~0.5.0", 36 | "grunt-contrib-connect": "~0.4.1", 37 | "grunt-zip": "~0.7.0", 38 | "grunt": "~0.4.0" 39 | }, 40 | "licenses": [ 41 | { 42 | "type": "MIT", 43 | "url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE" 44 | } 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reveal.js", 3 | "version": "2.6.1", 4 | "description": "The HTML Presentation Framework", 5 | "homepage": "http://lab.hakim.se/reveal-js", 6 | "subdomain": "revealjs", 7 | "scripts": { 8 | "test": "grunt test", 9 | "start": "" 10 | }, 11 | "author": { 12 | "name": "Hakim El Hattab", 13 | "email": "hakim.elhattab@gmail.com", 14 | "web": "http://hakim.se" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/hakimel/reveal.js.git" 19 | }, 20 | "engines": { 21 | "node": "~0.8.0" 22 | }, 23 | "dependencies": { 24 | "underscore": "~1.5.1", 25 | "express": "~2.5.9", 26 | "mustache": "~0.7.2", 27 | "socket.io": "~0.9.13" 28 | }, 29 | "devDependencies": { 30 | "grunt-contrib-qunit": "~0.2.2", 31 | "grunt-contrib-jshint": "~0.6.4", 32 | "grunt-contrib-cssmin": "~0.4.1", 33 | "grunt-contrib-uglify": "~0.2.4", 34 | "grunt-contrib-watch": "~0.5.3", 35 | "grunt-contrib-sass": "~0.5.0", 36 | "grunt-contrib-connect": "~0.4.1", 37 | "grunt-zip": "~0.7.0", 38 | "grunt": "~0.4.0" 39 | }, 40 | "licenses": [ 41 | { 42 | "type": "MIT", 43 | "url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE" 44 | } 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /slides/css/theme/source/simple.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is darkblue. 4 | * 5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. 6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | 10 | // Default mixins and settings ----------------- 11 | @import "../template/mixins"; 12 | @import "../template/settings"; 13 | // --------------------------------------------- 14 | 15 | 16 | 17 | // Include theme-specific fonts 18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | 22 | // Override theme settings (see ../template/settings.scss) 23 | $mainFont: 'Lato', sans-serif; 24 | $mainColor: #000; 25 | $headingFont: 'News Cycle', Impact, sans-serif; 26 | $headingColor: #000; 27 | $headingTextShadow: none; 28 | $headingTextTransform: none; 29 | $backgroundColor: #fff; 30 | $linkColor: #00008B; 31 | $linkColorHover: lighten( $linkColor, 20% ); 32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99); 33 | 34 | 35 | 36 | // Theme template ------------------------------ 37 | @import "../template/theme"; 38 | // --------------------------------------------- -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/css/theme/source/simple.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is darkblue. 4 | * 5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. 6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | 10 | // Default mixins and settings ----------------- 11 | @import "../template/mixins"; 12 | @import "../template/settings"; 13 | // --------------------------------------------- 14 | 15 | 16 | 17 | // Include theme-specific fonts 18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | 22 | // Override theme settings (see ../template/settings.scss) 23 | $mainFont: 'Lato', sans-serif; 24 | $mainColor: #000; 25 | $headingFont: 'News Cycle', Impact, sans-serif; 26 | $headingColor: #000; 27 | $headingTextShadow: none; 28 | $headingTextTransform: none; 29 | $backgroundColor: #fff; 30 | $linkColor: #00008B; 31 | $linkColorHover: lighten( $linkColor, 20% ); 32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99); 33 | 34 | 35 | 36 | // Theme template ------------------------------ 37 | @import "../template/theme"; 38 | // --------------------------------------------- -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/theme/source/simple.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is darkblue. 4 | * 5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. 6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | 10 | // Default mixins and settings ----------------- 11 | @import "../template/mixins"; 12 | @import "../template/settings"; 13 | // --------------------------------------------- 14 | 15 | 16 | 17 | // Include theme-specific fonts 18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | 22 | // Override theme settings (see ../template/settings.scss) 23 | $mainFont: 'Lato', sans-serif; 24 | $mainColor: #000; 25 | $headingFont: 'News Cycle', Impact, sans-serif; 26 | $headingColor: #000; 27 | $headingTextShadow: none; 28 | $headingTextTransform: none; 29 | $backgroundColor: #fff; 30 | $linkColor: #00008B; 31 | $linkColorHover: lighten( $linkColor, 20% ); 32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99); 33 | 34 | 35 | 36 | // Theme template ------------------------------ 37 | @import "../template/theme"; 38 | // --------------------------------------------- -------------------------------------------------------------------------------- /slides/css/theme/source/sky.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Sky theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | 15 | // Include theme-specific fonts 16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); 18 | 19 | 20 | // Override theme settings (see ../template/settings.scss) 21 | $mainFont: 'Open Sans', sans-serif; 22 | $mainColor: #333; 23 | $headingFont: 'Quicksand', sans-serif; 24 | $headingColor: #333; 25 | $headingLetterSpacing: -0.08em; 26 | $headingTextShadow: none; 27 | $backgroundColor: #f7fbfc; 28 | $linkColor: #3b759e; 29 | $linkColorHover: lighten( $linkColor, 20% ); 30 | $selectionBackgroundColor: #134674; 31 | 32 | // Fix links so they are not cut off 33 | .reveal a:not(.image) { 34 | line-height: 1.3em; 35 | } 36 | 37 | // Background generator 38 | @mixin bodyBackground() { 39 | @include radial-gradient( #add9e4, #f7fbfc ); 40 | } 41 | 42 | 43 | 44 | // Theme template ------------------------------ 45 | @import "../template/theme"; 46 | // --------------------------------------------- 47 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/css/theme/source/sky.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Sky theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | 15 | // Include theme-specific fonts 16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); 18 | 19 | 20 | // Override theme settings (see ../template/settings.scss) 21 | $mainFont: 'Open Sans', sans-serif; 22 | $mainColor: #333; 23 | $headingFont: 'Quicksand', sans-serif; 24 | $headingColor: #333; 25 | $headingLetterSpacing: -0.08em; 26 | $headingTextShadow: none; 27 | $backgroundColor: #f7fbfc; 28 | $linkColor: #3b759e; 29 | $linkColorHover: lighten( $linkColor, 20% ); 30 | $selectionBackgroundColor: #134674; 31 | 32 | // Fix links so they are not cut off 33 | .reveal a:not(.image) { 34 | line-height: 1.3em; 35 | } 36 | 37 | // Background generator 38 | @mixin bodyBackground() { 39 | @include radial-gradient( #add9e4, #f7fbfc ); 40 | } 41 | 42 | 43 | 44 | // Theme template ------------------------------ 45 | @import "../template/theme"; 46 | // --------------------------------------------- 47 | -------------------------------------------------------------------------------- /sessions/breizhcamp-22052014/slides/css/theme/source/sky.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Sky theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | 15 | // Include theme-specific fonts 16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); 18 | 19 | 20 | // Override theme settings (see ../template/settings.scss) 21 | $mainFont: 'Open Sans', sans-serif; 22 | $mainColor: #333; 23 | $headingFont: 'Quicksand', sans-serif; 24 | $headingColor: #333; 25 | $headingLetterSpacing: -0.08em; 26 | $headingTextShadow: none; 27 | $backgroundColor: #f7fbfc; 28 | $linkColor: #3b759e; 29 | $linkColorHover: lighten( $linkColor, 20% ); 30 | $selectionBackgroundColor: #134674; 31 | 32 | // Fix links so they are not cut off 33 | .reveal a:not(.image) { 34 | line-height: 1.3em; 35 | } 36 | 37 | // Background generator 38 | @mixin bodyBackground() { 39 | @include radial-gradient( #add9e4, #f7fbfc ); 40 | } 41 | 42 | 43 | 44 | // Theme template ------------------------------ 45 | @import "../template/theme"; 46 | // --------------------------------------------- 47 | -------------------------------------------------------------------------------- /slides/test/test-markdown.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Test Markdown 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /sessions/m6web-25042014/slides/test/test-markdown.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Test Markdown 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-11-model.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 11 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | var elementNgModel = document.getElementById('elementWithNgModel'); 8 | 9 | elementNgModel.value = ''; 10 | 11 | }); 12 | 13 | it('sould add a directive called ng-model', function() { 14 | 15 | var directiveNgModel = $directive('ng-model'); 16 | 17 | expect(_.isFunction(directiveNgModel)).toBe(true); 18 | 19 | }); 20 | 21 | it('sould replace value by the scope value and replace the scope value on keyup events', function() { 22 | 23 | var elementRoot = document.getElementById('domStep11'); 24 | var elementWithNgModel = document.getElementById('elementWithNgModel'); 25 | 26 | //'Test p block' is the initial value in SpecRunner.html 27 | expect(elementWithNgModel.value).toBe(''); 28 | 29 | $compile(elementRoot, scope); 30 | 31 | scope.$apply(function() { 32 | //'test.bind' is the data bound in SpecRunner.html 33 | scope.test = { 34 | bind: 'first value' 35 | }; 36 | }); 37 | 38 | expect(elementWithNgModel.value).toBe(scope.test.bind); 39 | 40 | elementWithNgModel.value = 'second value'; 41 | 42 | var event = new CustomEvent("keyup"); 43 | elementWithNgModel.dispatchEvent(event); 44 | 45 | expect(scope.test.bind).toBe(elementWithNgModel.value); 46 | 47 | }); 48 | 49 | }); 50 | -------------------------------------------------------------------------------- /workshop/tests/zengular-tests-12-click.js: -------------------------------------------------------------------------------- 1 | describe('the tests of the step 12 of the workshop', function() { 2 | 3 | beforeEach(function() { 4 | 5 | scope = new Scope(); 6 | 7 | }); 8 | 9 | it('sould add a directive called ng-click', function() { 10 | 11 | var directiveNgClick = $directive('ng-click'); 12 | 13 | expect(_.isFunction(directiveNgClick)).toBe(true); 14 | 15 | }); 16 | 17 | it('sould execute the contentof ng-click when a click is performed', function() { 18 | 19 | var elementRoot = document.getElementById('domStep12'); 20 | var elementWithNgClick = document.getElementById('elementWithNgClick'); 21 | 22 | scope.test = { 23 | click: function() { 24 | scope.test.value += '.'; 25 | } 26 | } 27 | 28 | scope.$apply(function() { 29 | scope.test.value = 'first value'; 30 | }); 31 | 32 | listenerFn = function() {} 33 | 34 | spyOn(scope.test, 'click').and.callThrough(); 35 | spyOn(window, 'listenerFn'); 36 | 37 | scope.$watch(function(scope) { 38 | return scope.test.value; 39 | }, listenerFn); 40 | 41 | $compile(elementRoot, scope); 42 | 43 | expect(scope.test.click.calls.count()).toBe(0); 44 | expect(listenerFn.calls.count()).toBe(0); 45 | 46 | var event = new CustomEvent("click"); 47 | elementWithNgClick.dispatchEvent(event); 48 | 49 | expect(scope.test.click.calls.count()).toBe(1); 50 | expect(listenerFn.calls.count()).toBe(1); 51 | 52 | }); 53 | 54 | }); 55 | -------------------------------------------------------------------------------- /workshop/solutions/zengular-07-phase.js: -------------------------------------------------------------------------------- 1 | function Scope() { 2 | this.$$watchers = []; 3 | this.$$phase = null; 4 | } 5 | 6 | Scope.prototype.$$beginPhase = function(phase) { 7 | if (this.$$phase) { 8 | throw this.$$phase + " est déjà en cours..."; 9 | } 10 | this.$$phase = phase; 11 | }; 12 | 13 | Scope.prototype.$$clearPhase = function() { 14 | this.$$phase = null; 15 | }; 16 | 17 | Scope.prototype.$watch = function (watcherFn, listenerFn, byValue) { 18 | var watch = { 19 | watcherFn: watcherFn, 20 | listenerFn: listenerFn, 21 | byValue: byValue 22 | }; 23 | this.$$watchers.push(watch); 24 | }; 25 | 26 | Scope.prototype.$digest = function () { 27 | var dirty; 28 | var ttl = 10; 29 | this.$$beginPhase('$digest'); 30 | do { 31 | dirty = false; 32 | _.each(this.$$watchers, function (watcher) { 33 | var newValue = watcher.watcherFn(this); 34 | if (watcher.byValue ? !_.isEqual(watcher.last, newValue) : watcher.last !== newValue) { 35 | dirty = true; 36 | watcher.listenerFn(newValue, watcher.last, this); 37 | watcher.last = watcher.byValue ? _.clone(newValue) : newValue; 38 | } 39 | }.bind(this)); 40 | if (dirty && !(ttl--)) { 41 | this.$$clearPhase(); 42 | throw "$digest est partie en boucle !" 43 | } 44 | } while (dirty) 45 | this.$$clearPhase(); 46 | }; 47 | 48 | Scope.prototype.$apply = function (exprFn) { 49 | try { 50 | exprFn(); 51 | } finally { 52 | this.$digest(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /slides/lib/js/classList.js: -------------------------------------------------------------------------------- 1 | /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/ 2 | if(typeof document!=="undefined"&&!("classList" in document.createElement("a"))){(function(j){var a="classList",f="prototype",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p