Ajout exercices supplémentaires formation JS

This commit is contained in:
2015-04-01 22:05:05 +02:00
committed by Benjamin Bohard
parent ee0ae6d1be
commit b1cbcaefd3
3012 changed files with 363655 additions and 126 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -5,7 +5,7 @@
</head>
<body>
<div class="container">
<h1><img class="logo" src="../../img/vanilla.png" /> Vanilla Todos</h1>
<h1><img class="logo" src="img/vanilla.png" /> Vanilla Todos</h1>
<div id="vanilla-todos">
<table>
<thead>
@ -34,7 +34,7 @@
</table>
</div>
</div>
<script src="vanilla-todos.js"></script>
<script src="vanilla-todos-obfuscated.js"></script>
<script>
(function() {
VanillaTodos.mount('#vanilla-todos');

View File

@ -0,0 +1 @@
var _0x711e=["\x56\x61\x6E\x69\x6C\x6C\x61\x54\x6F\x64\x6F\x73","\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74","\x6D\x6F\x75\x6E\x74","\x71\x75\x65\x72\x79\x53\x65\x6C\x65\x63\x74\x6F\x72","\x49\x6E\x76\x61\x6C\x69\x64\x20\x73\x65\x6C\x65\x63\x74\x6F\x72\x20\x22","\x22\x20\x21","\x6C\x65\x6E\x67\x74\x68","\x2E\x6E\x65\x77\x2D\x74\x6F\x64\x6F","\x6B\x65\x79\x64\x6F\x77\x6E","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x2E\x73\x65\x61\x72\x63\x68\x2D\x74\x6F\x64\x6F\x73","\x6B\x65\x79\x75\x70","\x63\x6C\x69\x63\x6B","\x61\x2E\x72\x65\x6D\x6F\x76\x65\x2D\x74\x6F\x64\x6F","\x6D\x61\x74\x63\x68\x65\x73","\x74\x61\x72\x67\x65\x74","\x74\x6F\x64\x6F\x49\x64","\x64\x61\x74\x61\x73\x65\x74","\x69\x64","\x73\x70\x6C\x69\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x54\x61\x72\x67\x65\x74","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x76\x61\x6C\x75\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x74\x65\x78\x74","\x66\x69\x6C\x74\x65\x72","\x6B\x65\x79\x43\x6F\x64\x65","\x6E\x6F\x77","","\x70\x75\x73\x68","\x2E\x74\x6F\x64\x6F\x73\x2D\x6C\x69\x73\x74","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x66\x6F\x72\x45\x61\x63\x68","\x74\x72","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x64","\x61","\x68\x72\x65\x66","\x23","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x72\x65\x6D\x6F\x76\x65\x2D\x74\x6F\x64\x6F","\x53\x75\x70\x70\x72\x69\x6D\x65\x72","\x76\x61\x6E\x69\x6C\x6C\x61\x54\x6F\x64\x6F\x73\x2E\x74\x6F\x64\x6F\x73","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x63\x61\x6C\x53\x74\x6F\x72\x61\x67\x65","\x5B\x5D","\x70\x61\x72\x73\x65","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x73\x65\x74\x49\x74\x65\x6D"];(function(_0xaf1ax1,_0xaf1ax2){_0x711e[1];var _0xaf1ax3;var _0xaf1ax4=[];var _0xaf1ax5=_0xaf1ax2[_0x711e[2]];_0xaf1ax1[_0x711e[3]]=function(_0xaf1ax6){_0xaf1ax3=_0xaf1ax5[_0x711e[4]](_0xaf1ax6);if(!_0xaf1ax3){throw new Error(_0x711e[5]+_0xaf1ax6+_0x711e[6])};_0xaf1ax7();_0xaf1ax4=_0xaf1ax1c();if(_0xaf1ax4[_0x711e[7]]>0){_0xaf1ax14()};};function _0xaf1ax7(){var _0xaf1ax8=_0xaf1ax3[_0x711e[4]](_0x711e[8]);_0xaf1ax8[_0x711e[10]](_0x711e[9],_0xaf1ax12);var _0xaf1ax9=_0xaf1ax3[_0x711e[4]](_0x711e[11]);_0xaf1ax9[_0x711e[10]](_0x711e[12],_0xaf1axf);_0xaf1ax3[_0x711e[10]](_0x711e[13],_0xaf1axa);}function _0xaf1axa(_0xaf1axb){if(_0xaf1axb[_0x711e[16]][_0x711e[15]](_0x711e[14])){var _0xaf1axc=_0xaf1axb[_0x711e[16]][_0x711e[18]][_0x711e[17]];var _0xaf1axd;for(var _0xaf1axe=0;_0xaf1axe<_0xaf1ax4[_0x711e[7]];++_0xaf1axe){_0xaf1axd=_0xaf1ax4[_0xaf1axe];if(_0xaf1axd[_0x711e[19]]==_0xaf1axc){_0xaf1ax4[_0x711e[20]](_0xaf1axe,1);_0xaf1ax14(_0xaf1ax4);_0xaf1ax1e(_0xaf1ax4);};};}}function _0xaf1axf(_0xaf1axb){var _0xaf1ax9=_0xaf1axb[_0x711e[21]];var _0xaf1ax10=_0xaf1ax9[_0x711e[23]][_0x711e[22]]();var _0xaf1ax11;if(_0xaf1ax10){_0xaf1ax11=_0xaf1ax4[_0x711e[26]](function(_0xaf1axd){if(_0xaf1axd[_0x711e[25]][_0x711e[22]]()[_0x711e[24]](_0xaf1ax10)!== -1){return true}})};_0xaf1ax14(_0xaf1ax11);}function _0xaf1ax12(_0xaf1axb){if(_0xaf1axb[_0x711e[27]]!==13){return };var _0xaf1ax13=_0xaf1axb[_0x711e[21]];var _0xaf1axd={id:Date[_0x711e[28]](),text:_0xaf1ax13[_0x711e[23]]};_0xaf1ax13[_0x711e[23]]=_0x711e[29];_0xaf1ax4[_0x711e[30]](_0xaf1axd);_0xaf1ax14(_0xaf1ax4);_0xaf1ax1e(_0xaf1ax4);}function _0xaf1ax14(_0xaf1ax11){_0xaf1ax11=_0xaf1ax11||_0xaf1ax4;var _0xaf1ax15=_0xaf1ax3[_0x711e[4]](_0x711e[31]);_0xaf1ax15[_0x711e[32]]=_0x711e[29];_0xaf1ax11[_0x711e[34]](function(_0xaf1axd,_0xaf1axe){var _0xaf1ax16=_0xaf1ax17(_0xaf1axd);_0xaf1ax15[_0x711e[33]](_0xaf1ax16);});}function _0xaf1ax17(_0xaf1axd){var _0xaf1ax16=_0xaf1ax5[_0x711e[36]](_0x711e[35]);_0xaf1ax16[_0x711e[33]](_0xaf1ax18(_0xaf1axd));_0xaf1ax16[_0x711e[33]](_0xaf1ax1a(_0xaf1axd));return _0xaf1ax16;}function _0xaf1ax18(_0xaf1axd){var _0xaf1ax19=_0xaf1ax5[_0x711e[36]](_0x711e[37]);_0xaf1ax19[_0x711e[32]]=_0xaf1axd[_0x711e[25]];return _0xaf1ax19;}function _0xaf1ax1a(_0xaf1axd){var _0xaf1ax19=_0xaf1ax5[_0x711e[36]](_0x711e[37]);var _0xaf1ax1b=_0xaf1ax5[_0x711e[36]](_0x711e[38]);_0xaf1ax1b[_0x711e[39]]=_0x711e[40];_0xaf1ax1b[_0x711e[41]]=_0x711e[42];_0xaf1ax1b[_0x711e[18]][_0x711e[17]]=_0xaf1axd[_0x711e[19]];_0xaf1ax1b[_0x711e[32]]=_0x711e[43];_0xaf1ax19[_0x711e[33]](_0xaf1ax1b);return _0xaf1ax19;}function _0xaf1ax1c(){var _0xaf1ax1d=_0xaf1ax2[_0x711e[46]][_0x711e[45]](_0x711e[44]);return JSON[_0x711e[48]](_0xaf1ax1d||_0x711e[47]);}function _0xaf1ax1e(_0xaf1ax11){var _0xaf1ax1d=JSON[_0x711e[49]](_0xaf1ax11);_0xaf1ax2[_0x711e[46]][_0x711e[50]](_0x711e[44],_0xaf1ax1d);}}(this[_0x711e[0]]=this[_0x711e[0]]||{},window));

View File

@ -0,0 +1,166 @@
(function(VT, window) {
"use strict";
// Déclaration des variables
var _rootEl; // Élement racine de notre application
var _todos = []; // Notre liste de todos
var document = window.document; // Alias
/*
* API publique
*/
/*
* "Monte" l'application VanillaTodo sur l'élément du DOM
* correspondant au sélecteur CSS donné
*/
VT.mount = function(selector) {
_rootEl = document.querySelector(selector);
if(!_rootEl) {
throw new Error('Invalid selector "'+selector+'" !');
}
_initHandlers();
_todos = _loadTodos();
if(_todos.length > 0) {
_renderTodos();
}
};
/*
* API privée
*/
function _initHandlers() {
var saveButton = _rootEl.querySelector('.new-todo');
saveButton.addEventListener('keydown', _saveNewTodoHandler);
var searchInput = _rootEl.querySelector('.search-todos');
searchInput.addEventListener('keyup', _searchInputChangeHandler);
// Délégation d'évènement, voir _removeTodoClickHandler
_rootEl.addEventListener('click', _removeTodoClickHandler);
}
function _removeTodoClickHandler(evt){
if(evt.target.matches('a.remove-todo')) {
var todoId = evt.target.dataset.todoId;
var todo;
for(var i = 0; i < _todos.length; ++i) {
todo = _todos[i];
if(todo.id == todoId) {
_todos.splice(i, 1);
_renderTodos(_todos);
_saveTodos(_todos);
}
}
}
}
function _searchInputChangeHandler(evt) {
var searchInput = evt.currentTarget;
var searchText = searchInput.value.toLowerCase();
var todos;
if(searchText) {
todos = _todos.filter(function(todo) {
if(todo.text.toLowerCase().indexOf(searchText) !== -1) {
return true;
}
});
}
_renderTodos(todos);
}
function _saveNewTodoHandler(evt) {
if(evt.keyCode !== 13) return; // Enter
var newTodoInput = evt.currentTarget;
var todo = {
id: Date.now(),
text: newTodoInput.value
};
newTodoInput.value = '';
_todos.push(todo);
_renderTodos(_todos);
_saveTodos(_todos);
}
function _renderTodos(todos) {
todos = todos || _todos;
var todosList = _rootEl.querySelector('.todos-list');
todosList.innerHTML = '';
todos.forEach(function(todo, i) {
var row = _createTodoRow(todo);
todosList.appendChild(row);
});
}
function _createTodoRow(todo) {
var row = document.createElement('tr');
row.appendChild( _createTodoCell(todo) );
row.appendChild( _createActionsCell(todo) );
return row;
}
function _createTodoCell(todo) {
var cell = document.createElement('td');
cell.innerHTML = todo.text;
return cell;
}
function _createActionsCell(todo) {
var cell = document.createElement('td');
var removeLink = document.createElement('a');
removeLink.href = '#';
removeLink.className = "remove-todo";
removeLink.dataset.todoId = todo.id;
removeLink.innerHTML = 'Supprimer';
cell.appendChild(removeLink);
return cell;
}
/*
* Charge les tâches depuis le localStorage
*
* Retourne les tâches sous la forme d'un tableau d'objets
*/
function _loadTodos() {
var todosStr = window.localStorage.getItem('vanillaTodos.todos');
return JSON.parse(todosStr || '[]');
}
/*
* Sauvegarde le tableau de tâches donné dans le localStorage
*
* Ne retourne rien
*/
function _saveTodos(todos) {
var todosStr = JSON.stringify(todos);
window.localStorage.setItem('vanillaTodos.todos', todosStr);
}
}(this.VanillaTodos = this.VanillaTodos || {}, window));

View File

@ -7,9 +7,9 @@
var _todos = []; // Notre liste de todos
var document = window.document; // Alias
/*
/***************
* API publique
*/
***************/
/*
* "Monte" l'application VanillaTodo sur l'élément du DOM
@ -23,130 +23,31 @@
throw new Error('Invalid selector "'+selector+'" !');
}
_initHandlers();
_todos = _loadTodos();
if(_todos.length > 0) {
_renderTodos();
}
// A vous de compléter !
};
/*
/**************
* API privée
**************/
/*
* Charge les tâches depuis le localStorage
*
* Retourne les tâches sous la forme d'un tableau d'objets
*/
function _initHandlers() {
var saveButton = _rootEl.querySelector('.new-todo');
saveButton.addEventListener('keydown', _saveNewTodoHandler);
var searchInput = _rootEl.querySelector('.search-todos');
searchInput.addEventListener('keyup', _searchInputChangeHandler);
// Délégation d'évènement, voir _removeTodoClickHandler
_rootEl.addEventListener('click', _removeTodoClickHandler);
}
function _removeTodoClickHandler(evt){
if(evt.target.matches('a.remove-todo')) {
var todoId = evt.target.dataset.todoId;
var todo;
for(var i = 0; i < _todos.length; ++i) {
todo = _todos[i];
if(todo.id == todoId) {
_todos.splice(i, 1);
_renderTodos(_todos);
_saveTodos(_todos);
}
}
}
}
function _searchInputChangeHandler(evt) {
var searchInput = evt.currentTarget;
var searchText = searchInput.value.toLowerCase();
var todos;
if(searchText) {
todos = _todos.filter(function(todo) {
if(todo.text.toLowerCase().indexOf(searchText) !== -1) {
return true;
}
});
}
_renderTodos(todos);
}
function _saveNewTodoHandler(evt) {
if(evt.keyCode !== 13) return; // Enter
var newTodoInput = evt.currentTarget;
var todo = {
id: Date.now(),
text: newTodoInput.value
};
newTodoInput.value = '';
_todos.push(todo);
_renderTodos(_todos);
_saveTodos(_todos);
}
function _renderTodos(todos) {
todos = todos || _todos;
var todosList = _rootEl.querySelector('.todos-list');
todosList.innerHTML = '';
todos.forEach(function(todo, i) {
var row = _createTodoRow(todo);
todosList.appendChild(row);
});
}
function _createTodoRow(todo) {
var row = document.createElement('tr');
row.appendChild( _createTodoCell(todo) );
row.appendChild( _createActionsCell(todo) );
return row;
}
function _createTodoCell(todo) {
var cell = document.createElement('td');
cell.innerHTML = todo.text;
return cell;
}
function _createActionsCell(todo) {
var cell = document.createElement('td');
var removeLink = document.createElement('a');
removeLink.href = '#';
removeLink.className = "remove-todo";
removeLink.dataset.todoId = todo.id;
removeLink.innerHTML = 'Supprimer';
cell.appendChild(removeLink);
return cell;
}
function _loadTodos() {
var todosStr = window.localStorage.getItem('vanillaTodos.todos');
return JSON.parse(todosStr || '[]');
}
/*
* Sauvegarde le tableau de tâches donné dans le localStorage
*
* Ne retourne rien
*/
function _saveTodos(todos) {
var todosStr = JSON.stringify(todos);
window.localStorage.setItem('vanillaTodos.todos', todosStr);