SlideShare a Scribd company logo
1 of 76
Download to read offline
{ @r_mdias - rmdias.com } 
git.io/QQ7OIQ
{ RODOLFO 
DIAS } 
{ @r_mdias - rmdias.com }
{ RECIFE - BRAZIL }
{ FRONT END ENGINEER - UFMG }
{ / MINAS DEV }
{ DESIGN 
PATTERNS }
{ DESIGN 
PATTERNS } 
WHY 
USE IT??
{ DESIGN 
PATTERNS ( in JS ) }
{ → DESIGN PATTERNS (in JS)} 
['Factory', 'Prototype', 'Mixin', 'Singleton']
{ → DESIGN PATTERNS (in JS)} 
['Factory', 'Prototype', 'Mixin', 'Singleton'] 
(A LITTLE 
HARD)
{ DESIGN 
PATTERNS ( in JS ) } 
(IN 
EASY WAY)
{ SSP }
{ SSP }
git.io/QQ7OIQ
git.io/QQ7OIQ
{ DENNIS 
CALAZANS } 
denniscalazans.com 
contato@denniscalazans.com
{ RODOLFO 
DIAS } 
rmdias.com 
contact@rmdias.com 
{ DENNIS 
CALAZANS } 
denniscalazans.com 
contato@denniscalazans.com
{ SSP 
WHAT’S IT ? }
{ SSP 
HOW IT 
WORKS? }
{ → HOW IT WORKS? } 
var SSP = SSP || {};
{ SSP 
USAGE }
{ → SSP USAGE } 
<!-- Call the SSP file --> 
<script src="SSP.js"></script>
{ → SSP USAGE } 
// SSP.MyModule.js 
SSP.MyModule = { 
setUp: function() { 
console.debug("My SSP module is runing!"); 
} 
}
{ → SSP USAGE } 
// SSP.MyModule.Child.js 
SSP.MyModule.Child = { 
setUp: function() { 
console.debug("My SSP module is runing!"); 
} 
}
{ → SSP USAGE } 
<!-- Incorporating Files --> 
<script src="SSP.js"></script> 
<script src="SSP.MyModule.js"></script> 
<script src="SSP.MyModule.Child.js"></script> 
<script>SSP.init();</script>
{ SSP 
METHODS 
AND 
PROPERTIES }
{ → SSP - PROPERTIES / _nameSpace } 
// All modules have a property called nameSpace that 
// returning string the name of module. 
SSP.MyModule = { 
setUp: function() { 
var self = this; 
console.debug(self._nameSpace); 
// return -> "SSP.MyModule" 
} 
}
{ → SSP - METHODS / .setUp( ) } 
// SetUp is a Main method. 
// It always runs when the father's module is called. 
SSP.MyModule = { 
setUp: function() { 
console.debug(‘My SSP Module is running!’); 
// return -> "My SSP Module is running!" 
} 
}
{ → SSP - METHODS / .init( ) } 
// This method initialize all modules from your application. 
SSP.init(); 
SSP.init(SSP.MyModule); 
SSP.init(SSP.MyModule, SSP.MyOtherModule);
{ → SSP - METHODS / .applyByNamespace(‘namespace’, params) } 
// Using this you can run a method that's located in other 
// module/part from your application, but using `_namespace`. 
// For example: 
SSP.applyByNamespace(‘SSP.MyModule'); 
// SSP.MyModule();
{ → SSP - METHODS / .applyByNamespace(‘namespace’, params) } 
// Using this you can run a method that's located in other 
// module/part from your application, but using `_namespace`. 
// For example: 
SSP.applyByNamespace(‘SSP.MyModule’, SomeParameter); 
// SSP.MyModule(SomeParameter);
{ → SSP - PROPERTIES AND METHODS } 
// Available Methods 
- _nameSpace; 
- .init(); 
- .setUp(); 
- .delegate(scope, method); 
- .readModule(Module); 
- .getByNamespace('namespace'); 
- .applyByNamespace('namespace'); 
- .initModuleByNamespace('nameSpace', params);
{ EXAMPLE 
→ TODO APP }
{ → TODO APP }
{ EXAMPLE 
→ TODO APP } 
(HOW 
WE DO)
{ → TODO APP } 
<script src="Todo.js"></script>
{ → TODO APP } 
'use strict'; 
function createTask(){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function updateTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function deleteTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function completeTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function buildTasksList(tasks) { 
// body... 
};
{ → TODO APP } 
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task');
{ → TODO APP } 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
});
'use strict'; 
function createTask(){ 
// body... 
}; 
function updateTask(taskID){ 
// body... 
}; 
function deleteTask(taskID){ 
// body... 
}; 
function completeTask(taskID){ 
// body... 
}; 
function taskCounter(tasks){ 
// body... 
}; 
function buildTasksList(tasks) { 
// body... 
};
'use strict'; 
function createTask(){ 
// body... 
}; 
function updateTask(taskID){ 
// body... 
}; 
function deleteTask(taskID){ 
// body... 
}; 
function completeTask(taskID){ 
// body... 
}; 
function taskCounter(tasks){ 
// body... 
}; 
function buildTasksList(tasks) { 
// body... 
}; 
| 
:(
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task'); 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
}); 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
| 
:(
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task'); 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
}); 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
| 
: (`
{ EXAMPLE 
→ TODO APP } 
(HOW TO DO 
USING SSP)
{ → TODO APP } 
<script src="SSP.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script> 
<script src="SSP.Todo.Requests.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script> 
<script src="SSP.Todo.Requests.js"></script> 
<script>SSP.init();</script>
{ → TODO APP } 
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
}, 
createTask : function() { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
{ → TODO APP } 
// SSP.Todo.Requests.js 
SSP.Todo.Requests = { 
setUp: function() { 
var self = this; 
}, 
getTodoList : function() { 
// body... 
}, 
setTodoList : function(parameter) { 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
SSP.Todo.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
X 
SSP.Todo.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
self.buildTasksList(self.Requests.getTodoList()); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
self.buildTasksList(self.Requests.getTodoList()); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
} 
| 
: (
// SSP.Todo.Requests.js 
SSP.Todo.Requests = { 
setUp: function() { 
var self = this; 
}, 
getTodoList : function() { 
// body... 
}, 
setTodoList : function(parameter) { 
// body... 
} 
} 
| 
: (
{ → TODO APP }
git.io/QQ7OIQ
{ SSP 
→ WHO USES IT? }
git.io/QQ7OIQ
{ VLW, FLWS O/ } 
{ @r_mdias - rmdias.com }
{ THANKS!! } 
{ @r_mdias - rmdias.com }

More Related Content

What's hot

FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridasFrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridasLoiane Groner
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 
JS programowanie obiektowe
JS  programowanie obiektoweJS  programowanie obiektowe
JS programowanie obiektowePiotr Czajkowski
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programmingintive
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
ECMA2015 INSIDE
ECMA2015 INSIDEECMA2015 INSIDE
ECMA2015 INSIDEJun Ho Lee
 
Practical JavaScript Programming - Session 3/8
Practical JavaScript Programming - Session 3/8Practical JavaScript Programming - Session 3/8
Practical JavaScript Programming - Session 3/8Wilson Su
 
Algebra 1 fernando chamizo lorente
Algebra 1 fernando chamizo lorenteAlgebra 1 fernando chamizo lorente
Algebra 1 fernando chamizo lorenteEduardo Ordaz Cruz
 
jQuery sans jQuery
jQuery sans jQueryjQuery sans jQuery
jQuery sans jQuerygoldoraf
 
Practical JavaScript Programming - Session 2/8
Practical JavaScript Programming - Session 2/8Practical JavaScript Programming - Session 2/8
Practical JavaScript Programming - Session 2/8Wilson Su
 
Testes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaTestes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaDouglas Matoso
 
A slew of AACM 50th anniversary celebrations this weekend
A slew of AACM 50th anniversary celebrations this weekendA slew of AACM 50th anniversary celebrations this weekend
A slew of AACM 50th anniversary celebrations this weekendchicagonewsyesterday
 
Новое в Perl 5.10
Новое в Perl 5.10Новое в Perl 5.10
Новое в Perl 5.10Andrew Shitov
 

What's hot (16)

FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridasFrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
JS programowanie obiektowe
JS  programowanie obiektoweJS  programowanie obiektowe
JS programowanie obiektowe
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programming
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
ECMA2015 INSIDE
ECMA2015 INSIDEECMA2015 INSIDE
ECMA2015 INSIDE
 
Practical JavaScript Programming - Session 3/8
Practical JavaScript Programming - Session 3/8Practical JavaScript Programming - Session 3/8
Practical JavaScript Programming - Session 3/8
 
Algebra 1 fernando chamizo lorente
Algebra 1 fernando chamizo lorenteAlgebra 1 fernando chamizo lorente
Algebra 1 fernando chamizo lorente
 
Proyecto Final Android-SQLite
Proyecto Final Android-SQLiteProyecto Final Android-SQLite
Proyecto Final Android-SQLite
 
5 Hidden Gems of Alloy UI
5 Hidden Gems of Alloy UI5 Hidden Gems of Alloy UI
5 Hidden Gems of Alloy UI
 
jQuery sans jQuery
jQuery sans jQueryjQuery sans jQuery
jQuery sans jQuery
 
Mejor project
Mejor projectMejor project
Mejor project
 
Practical JavaScript Programming - Session 2/8
Practical JavaScript Programming - Session 2/8Practical JavaScript Programming - Session 2/8
Practical JavaScript Programming - Session 2/8
 
Testes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaTestes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e Karma
 
A slew of AACM 50th anniversary celebrations this weekend
A slew of AACM 50th anniversary celebrations this weekendA slew of AACM 50th anniversary celebrations this weekend
A slew of AACM 50th anniversary celebrations this weekend
 
Новое в Perl 5.10
Новое в Perl 5.10Новое в Perl 5.10
Новое в Perl 5.10
 

Viewers also liked

Viewers also liked (14)

JS4Girls
JS4GirlsJS4Girls
JS4Girls
 
Nunca foi tao facil testar
Nunca foi tao facil testarNunca foi tao facil testar
Nunca foi tao facil testar
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
Introduction aux design patterns
Introduction aux design patternsIntroduction aux design patterns
Introduction aux design patterns
 
CM patterns
CM patternsCM patterns
CM patterns
 
Design Patterns (2003)
Design Patterns (2003)Design Patterns (2003)
Design Patterns (2003)
 
les metriques de processus, de produit et de qualité
les metriques de processus, de produit et de qualitéles metriques de processus, de produit et de qualité
les metriques de processus, de produit et de qualité
 
Metrique
MetriqueMetrique
Metrique
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 

SSP - The Simple Singleton Pattern

  • 1. { @r_mdias - rmdias.com } git.io/QQ7OIQ
  • 2. { RODOLFO DIAS } { @r_mdias - rmdias.com }
  • 3. { RECIFE - BRAZIL }
  • 4. { FRONT END ENGINEER - UFMG }
  • 5. { / MINAS DEV }
  • 7. { DESIGN PATTERNS } WHY USE IT??
  • 8.
  • 9. { DESIGN PATTERNS ( in JS ) }
  • 10. { → DESIGN PATTERNS (in JS)} ['Factory', 'Prototype', 'Mixin', 'Singleton']
  • 11. { → DESIGN PATTERNS (in JS)} ['Factory', 'Prototype', 'Mixin', 'Singleton'] (A LITTLE HARD)
  • 12. { DESIGN PATTERNS ( in JS ) } (IN EASY WAY)
  • 17. { DENNIS CALAZANS } denniscalazans.com contato@denniscalazans.com
  • 18. { RODOLFO DIAS } rmdias.com contact@rmdias.com { DENNIS CALAZANS } denniscalazans.com contato@denniscalazans.com
  • 19. { SSP WHAT’S IT ? }
  • 20. { SSP HOW IT WORKS? }
  • 21. { → HOW IT WORKS? } var SSP = SSP || {};
  • 23. { → SSP USAGE } <!-- Call the SSP file --> <script src="SSP.js"></script>
  • 24. { → SSP USAGE } // SSP.MyModule.js SSP.MyModule = { setUp: function() { console.debug("My SSP module is runing!"); } }
  • 25. { → SSP USAGE } // SSP.MyModule.Child.js SSP.MyModule.Child = { setUp: function() { console.debug("My SSP module is runing!"); } }
  • 26. { → SSP USAGE } <!-- Incorporating Files --> <script src="SSP.js"></script> <script src="SSP.MyModule.js"></script> <script src="SSP.MyModule.Child.js"></script> <script>SSP.init();</script>
  • 27. { SSP METHODS AND PROPERTIES }
  • 28. { → SSP - PROPERTIES / _nameSpace } // All modules have a property called nameSpace that // returning string the name of module. SSP.MyModule = { setUp: function() { var self = this; console.debug(self._nameSpace); // return -> "SSP.MyModule" } }
  • 29. { → SSP - METHODS / .setUp( ) } // SetUp is a Main method. // It always runs when the father's module is called. SSP.MyModule = { setUp: function() { console.debug(‘My SSP Module is running!’); // return -> "My SSP Module is running!" } }
  • 30. { → SSP - METHODS / .init( ) } // This method initialize all modules from your application. SSP.init(); SSP.init(SSP.MyModule); SSP.init(SSP.MyModule, SSP.MyOtherModule);
  • 31. { → SSP - METHODS / .applyByNamespace(‘namespace’, params) } // Using this you can run a method that's located in other // module/part from your application, but using `_namespace`. // For example: SSP.applyByNamespace(‘SSP.MyModule'); // SSP.MyModule();
  • 32. { → SSP - METHODS / .applyByNamespace(‘namespace’, params) } // Using this you can run a method that's located in other // module/part from your application, but using `_namespace`. // For example: SSP.applyByNamespace(‘SSP.MyModule’, SomeParameter); // SSP.MyModule(SomeParameter);
  • 33. { → SSP - PROPERTIES AND METHODS } // Available Methods - _nameSpace; - .init(); - .setUp(); - .delegate(scope, method); - .readModule(Module); - .getByNamespace('namespace'); - .applyByNamespace('namespace'); - .initModuleByNamespace('nameSpace', params);
  • 34. { EXAMPLE → TODO APP }
  • 35. { → TODO APP }
  • 36. { EXAMPLE → TODO APP } (HOW WE DO)
  • 37. { → TODO APP } <script src="Todo.js"></script>
  • 38. { → TODO APP } 'use strict'; function createTask(){ // body... };
  • 39. { → TODO APP } 'use strict'; function updateTask(taskID){ // body... };
  • 40. { → TODO APP } 'use strict'; function deleteTask(taskID){ // body... };
  • 41. { → TODO APP } 'use strict'; function completeTask(taskID){ // body... };
  • 42. { → TODO APP } 'use strict'; function buildTasksList(tasks) { // body... };
  • 43. { → TODO APP } var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task');
  • 44. { → TODO APP } form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... });
  • 45. { → TODO APP } completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... });
  • 46. { → TODO APP } deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... });
  • 47. { → TODO APP } updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... });
  • 48. 'use strict'; function createTask(){ // body... }; function updateTask(taskID){ // body... }; function deleteTask(taskID){ // body... }; function completeTask(taskID){ // body... }; function taskCounter(tasks){ // body... }; function buildTasksList(tasks) { // body... };
  • 49. 'use strict'; function createTask(){ // body... }; function updateTask(taskID){ // body... }; function deleteTask(taskID){ // body... }; function completeTask(taskID){ // body... }; function taskCounter(tasks){ // body... }; function buildTasksList(tasks) { // body... }; | :(
  • 50. var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task'); form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... }); completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... }); deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... }); updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... }); | :(
  • 51. var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task'); form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... }); completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... }); deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... }); updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... }); | : (`
  • 52. { EXAMPLE → TODO APP } (HOW TO DO USING SSP)
  • 53. { → TODO APP } <script src="SSP.js"></script>
  • 54. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script>
  • 55. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script> <script src="SSP.Todo.Requests.js"></script>
  • 56. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script> <script src="SSP.Todo.Requests.js"></script> <script>SSP.init();</script>
  • 57. { → TODO APP } // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; }, createTask : function() { // body... }, buildTasksList : function(todoList){ // body... } }
  • 58. { → TODO APP } // SSP.Todo.Requests.js SSP.Todo.Requests = { setUp: function() { var self = this; }, getTodoList : function() { // body... }, setTodoList : function(parameter) { // body... } }
  • 59. // SSP.Todo.JS SSP.Todo = { setUp: function() { }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 60. // SSP.Todo.JS SSP.Todo = { setUp: function() { SSP.Todo.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 61. // SSP.Todo.JS SSP.Todo = { setUp: function() { X SSP.Todo.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 62. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 63. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 64. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 65. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); self.buildTasksList(self.Requests.getTodoList()); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 66. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); self.buildTasksList(self.Requests.getTodoList()); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } } | : (
  • 67. // SSP.Todo.Requests.js SSP.Todo.Requests = { setUp: function() { var self = this; }, getTodoList : function() { // body... }, setTodoList : function(parameter) { // body... } } | : (
  • 68.
  • 69. { → TODO APP }
  • 71. { SSP → WHO USES IT? }
  • 72.
  • 74.
  • 75. { VLW, FLWS O/ } { @r_mdias - rmdias.com }
  • 76. { THANKS!! } { @r_mdias - rmdias.com }