SlideShare uma empresa Scribd logo
1 de 50
Julie Iskander, Lecturer at ITI
MSc. Communication and Electronics
LectureOutlines
 Object Oriented JavaScript Revision
 Prototype js
 Extending the DOM
 Elements dimensions
 Event Model
 Classes and inheritance
 JSON
 Ajax
OO JavaScript
Remember
 Everything is an Object
 Every Object can have instance methods
 All objects have prototype
 Functions are first-class Objects
 JavaScript is multi-paradigm language
 Imperative style of C
 Object oriented style of Java
 Functional style of Lisp
Prototype JS
Prototype
Prototype
 It is about the abstract not the concrete
 Many toolkits is built over it like script.aculo.us
$ Function
 $()  document.getElementById()
 $(‘menu’)  returns element with id=menu
 $(element)  if element is a node, it is returned back
 $(‘menu’,’menuitem1’,’menuitem2’)  return an array of 3
nodes id=menu and menuitem1 and menuitem2
 $ extends node returned with useful prototype node
methods
$$ Function
 $$(), selects node using CSS selectors, support CSS3 selectors
 $$(‘li’)  select all li elements
 $$(‘li.current’)  select all li elements of class=current
 $$(‘#menu a’) select element all a elements inside of
element with id=menu
 $$ extends nodes returned with useful prototype node
methods
Enumerable Object
 A mixin that provides methods useful for collections
 Use in the following classes
 Array
 Hash
 DOM- related objects
 Instance Methods:
 all; any; collect; detect; each; eachSlice; entries; every; filter;
find; find;All; grep; include; inGroupsOf; inject; inspect; invoke;
map; max; member; min; partition; pluck; reject; select; size;
some; sortBy; toArray; zip
each
 elem.each(Visitor object)
 Implements visitor on each element
 Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
alert(elem);
});
each
 Implement continue using return
 Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
if(elem>10)
return;
alert(elem);
});
each
 Implement break by throw $break
 Example:
[1,3,4,7,89,6,3,4,5].each(function(elem)
{
if(elem>10)
return;
if(elem==4)
throw $break;
alert(elem);
});
detect
 Takes function that returns true/false
 Returns first element that returns true
 If no match returns undefined
 Examples:
[1,3,4,6,8,0,9].detect(function(elem)
{
return elem==0
}));
 See also select, reject, partition
map
 Applies function on each element, pushes the
return into an array that is eventually returned
 Example:
[2, 5, 7, 9,50].map(function(item)
{
return item*item;
});
Extending DOM
Prototype’s DOM extension
Modifying properties of elements
Visibility
 .hide()
 .show()
 .visible()  returns true/false
 .toggle()
Prototype’s DOM extension
Modifying properties of elements
Style and classes
 .addClassName(‘class name’)
 .removeClassName(‘class name’)
 .hasClassName(‘class name’) returns true/false
 .toggleClassName(‘class name’)
 .setStyle({ prop:val,prop:val,……… })
 .getStyle(‘css property’)
Prototype’s DOM extension
Modifying DOM
.update(‘ ’)
Change content of element
.replace(‘ ’)
 Remove element and add a new one in its place
.insert(‘ ’), insert({top:’ ’,bottom:’ ‘, after:’
‘, before : ‘ ’ })
.remove()
Templates
Templates
 TheTemplate class uses a basic formatting syntax, similar to
Ruby.
 The templates are created from strings that use symbols in
the form (e.g., #{fieldName})
 The symbols are replaced by actual values when the
template is applied (evaluated) to an object.
Example
var myTemplate =
newTemplate('<p>The TV show #{title} was directed
by  #{author}.</p>');
// Create hashes with the required values for placeholders
var record1 = {title: 'Metrix', author:'Arun Pandey'};
var record2 = {title: 'Junoon', author:'Manusha'};
var record3 = {title: 'Red Moon', author:'Paul, John'};
var record4 = {title: 'Henai', author:'Robert'};
Example
var records = [record1, record2, record3, record4 ];
// Now apply template to produce desired formatted output
records.each( function(conv)
{
$$('p')[0].insert( {bottom: "<div>Formatted Output : " +
myTemplate.evaluate(conv)+"</div>" });
});
}
Form Management
Prototype Form Methods
 disable() Disables the form as whole. Form controls will
be visible but uneditable.
 enable() Enables a fully or partially disabled form.
Prototype Form Methods
 findFirstElement() Finds first non-hidden, non-disabled
form control.
 focusFirstElement() Gives keyboard focus to the first
element of the form.
 getElements() Returns a collection of all form controls
within a form.
Prototype Form Methods
 getInputs() Returns a collection of all INPUT elements in a
form. Use optional type and name arguments to restrict the
search on these attributes.
 request() A convenience method for serializing and
submitting the form via an Ajax.Request to the URL of the
form's action attribute.The options parameter is passed to
the Ajax.Request instance, allowing to override the HTTP
method and to specify additional parameters.
 reset() Resets a form to its default values.
Element Dimensions
Element Dimension
 Solve problem of inconsistent browser
measurements
 .measure(‘ property‘ )
 $(‘mydiv’).measure(‘width’)  pixel values
 For better performance, when measuring more than
one dimension
 .getLayout()  Layout object
 $(‘mydiv’).getLayout().get(‘width’);
 http://prototypejs.org/learn/element-layout
Event Model
Events
 A single model for all browsers
 Event.observe(element,’event’,function{}())
 Event.observe(window,’load’,function(){})
Element.observe
 $(‘ ’).observe(‘event’,function(){})
Events
 Can register events on elements or children of an
element.
 The selection of children is done using CSS-selectors
 Element.on
 $(‘ ’).on(‘event’,function(){})
 $(‘ ’).on(‘event’,’css selector for child’,function(){})
 $(‘item’).on(‘click’,’li’, function(){
………………
});
Event Object
 All event handlers are receive an event object
 function submitFun(evnt)
{
evnt.element() //returns element object that triggered event
evnt.preventDefault() //stop default behaviour
evnt.isLeftClick() or isRightClick() or isMiddleClick()
evnt.pointerX() or pointerY()
evnt.pointer()  object{x: , y: }
}
Classes and Inheritance
Class
 Manages Prototype’s class-based OOP system
 Class methods:
 create()
 Instance Methods:
 addMethods()
Class.create([superclass][, methods...])
 superclass (class): superclass to inherit from.
 method (object): an object (mix-in) that will be mixed-in to my
new class. Multiple mixins can be used, later mixins take
precedence.
 returns a constructor function that can be called using new
operator. It will invoke the initialize method.
 The object mixin must contain ‘initialize’ method to be called
when new is called.
Class.create()
var Person = Class.create({
initialize: function(name) { this.name = name; },
say: function(message) {
return this.name + ': ' + message;
}
});
Example
 Create your own class that’s mixed with
Enumerable
Var MyClass=Class.Create(Enumerable, {
initialize:function(){………….},
_each: function(iterator){
for(var i=0;i<……)
{
iterator(….);
}
}
});
JSON
Encoding
 Number#toJSON, String#toJSON,Array#toJSON, Hash#toJSON, Date#toJSON, and
Object.toJSON.
 var data = {name: 'Violet', occupation: 'character', age: 25 };
 Object.toJSON(data); //-> '{"name": "Violet", "occupation": "character", "age": 25}’
 For custom objects,
 Set toJSON method which will be used by Object.toJSON.
 var Person = Class.create({
 initialize: function(name) {
 this.name = name;
 },
 toJSON: function() {
 return ('My name is ' + this.name + ' and I am ' + this.age + ' years old.').toJSON();
 }
 });
 var john = new Person('John', 49);
 Object.toJSON(john); //-> '"My name is John and I am 49 years old.”’
Parsing
 String#evalJSON
 var data = '{ "name": "Violet", "occupation": "character"
}'.evalJSON();
 data.name; //-> "Violet”
Ajax
Ajax
 A wrapper class around the XMLHttpRequest
 Uses callbacks to handle different phases of the
asynchronous request.
 If requested page is a JavaScript code then it is automatically
evaluated and executed.
Ajax.Request
new Ajax.Request(URL, Option)
 URL : string representing the url to request
 Options hash
 method
 parameters
 contentType
 onSuccess
 onFailure
 For complete details:
 http://api.prototypejs.org/ajax/
Ajax.Updater
 Updates a portion of the DOM with external source
 new Ajax.Updater(ID , URL , Options)
 ID: the id of the element to be updated
 URL: url to fetch
 Options: hash same as previous
 insertion: Insertion.Top
Insertion.Bottom
Insertion.After
Insertion.Before
Ajax.PeriodicalUpdater
 Runs Updater in periodical Intervals to repeatedly fetch
content from the server.
 new Ajax.PeriodicalUpdater(ID, URL, Options)
 Same except Options
 frequency : interval in seconds
 decay : factor to multiply frequency by everytime the fetched
response is the same as the previously fetched.
 stop()
 start()
References
 http://prototypejs.org/
 Practical Prototype and script.aculo.us, Andrew
Dupont , 2008

Mais conteúdo relacionado

Mais procurados

Working With JQuery Part1
Working With JQuery Part1Working With JQuery Part1
Working With JQuery Part1
saydin_soft
 

Mais procurados (20)

jQuery
jQueryjQuery
jQuery
 
JavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and LodashJavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and Lodash
 
Build your own entity with Drupal
Build your own entity with DrupalBuild your own entity with Drupal
Build your own entity with Drupal
 
DOM and Events
DOM and EventsDOM and Events
DOM and Events
 
Working With JQuery Part1
Working With JQuery Part1Working With JQuery Part1
Working With JQuery Part1
 
ActionScript3 collection query API proposal
ActionScript3 collection query API proposalActionScript3 collection query API proposal
ActionScript3 collection query API proposal
 
Spsl v unit - final
Spsl v unit - finalSpsl v unit - final
Spsl v unit - final
 
#pugMi - DDD - Value objects
#pugMi - DDD - Value objects#pugMi - DDD - Value objects
#pugMi - DDD - Value objects
 
Ms Ajax Dom Element Class
Ms Ajax Dom Element ClassMs Ajax Dom Element Class
Ms Ajax Dom Element Class
 
jQuery 1.7 visual cheat sheet
jQuery 1.7 visual cheat sheetjQuery 1.7 visual cheat sheet
jQuery 1.7 visual cheat sheet
 
Jquery 17-visual-cheat-sheet1
Jquery 17-visual-cheat-sheet1Jquery 17-visual-cheat-sheet1
Jquery 17-visual-cheat-sheet1
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
 
Python programming : Classes objects
Python programming : Classes objectsPython programming : Classes objects
Python programming : Classes objects
 
اسلاید جلسه ۹ کلاس پایتون برای هکر های قانونی
اسلاید جلسه ۹ کلاس پایتون برای هکر های قانونیاسلاید جلسه ۹ کلاس پایتون برای هکر های قانونی
اسلاید جلسه ۹ کلاس پایتون برای هکر های قانونی
 
Drupal Entities - Emerging Patterns of Usage
Drupal Entities - Emerging Patterns of UsageDrupal Entities - Emerging Patterns of Usage
Drupal Entities - Emerging Patterns of Usage
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no android
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Python Metaclasses
Python MetaclassesPython Metaclasses
Python Metaclasses
 
Hello Swift Final 5/5 - Structures and Classes
Hello Swift Final 5/5 - Structures and ClassesHello Swift Final 5/5 - Structures and Classes
Hello Swift Final 5/5 - Structures and Classes
 
OO in JavaScript
OO in JavaScriptOO in JavaScript
OO in JavaScript
 

Semelhante a Prototype Framework

Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Thomas Fuchs
 
J Query The Write Less Do More Javascript Library
J Query   The Write Less Do More Javascript LibraryJ Query   The Write Less Do More Javascript Library
J Query The Write Less Do More Javascript Library
rsnarayanan
 
13 advanced-swing
13 advanced-swing13 advanced-swing
13 advanced-swing
Nataraj Dg
 

Semelhante a Prototype Framework (20)

Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
 
J Query The Write Less Do More Javascript Library
J Query   The Write Less Do More Javascript LibraryJ Query   The Write Less Do More Javascript Library
J Query The Write Less Do More Javascript Library
 
JQuery introduction
JQuery introductionJQuery introduction
JQuery introduction
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
13 advanced-swing
13 advanced-swing13 advanced-swing
13 advanced-swing
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejs
 
Clean Javascript
Clean JavascriptClean Javascript
Clean Javascript
 
droidparts
droidpartsdroidparts
droidparts
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Query
 
jQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journeyjQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journey
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using Room
 
Structuring React.js Components
Structuring React.js ComponentsStructuring React.js Components
Structuring React.js Components
 
4Developers 2018: Structuring React components (Bartłomiej Witczak)
4Developers 2018: Structuring React components (Bartłomiej Witczak)4Developers 2018: Structuring React components (Bartłomiej Witczak)
4Developers 2018: Structuring React components (Bartłomiej Witczak)
 
jQuery - Chapter 4 - DOM Handling
jQuery - Chapter 4 - DOM Handling jQuery - Chapter 4 - DOM Handling
jQuery - Chapter 4 - DOM Handling
 
How te bring common UI patterns to ADF
How te bring common UI patterns to ADFHow te bring common UI patterns to ADF
How te bring common UI patterns to ADF
 
Object-Oriented JavaScript
Object-Oriented JavaScriptObject-Oriented JavaScript
Object-Oriented JavaScript
 
Object-Oriented Javascript
Object-Oriented JavascriptObject-Oriented Javascript
Object-Oriented Javascript
 
DIWE - Advanced PHP Concepts
DIWE - Advanced PHP ConceptsDIWE - Advanced PHP Concepts
DIWE - Advanced PHP Concepts
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
 

Mais de Julie Iskander

Mais de Julie Iskander (20)

HTML 5
HTML 5HTML 5
HTML 5
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
 
C for Engineers
C for EngineersC for Engineers
C for Engineers
 
Design Pattern lecture 3
Design Pattern lecture 3Design Pattern lecture 3
Design Pattern lecture 3
 
Scriptaculous
ScriptaculousScriptaculous
Scriptaculous
 
Design Pattern lecture 4
Design Pattern lecture 4Design Pattern lecture 4
Design Pattern lecture 4
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2
 
Design Pattern lecture 1
Design Pattern lecture 1Design Pattern lecture 1
Design Pattern lecture 1
 
Ajax and ASP.NET AJAX
Ajax and ASP.NET AJAXAjax and ASP.NET AJAX
Ajax and ASP.NET AJAX
 
ASP.NET Lecture 5
ASP.NET Lecture 5ASP.NET Lecture 5
ASP.NET Lecture 5
 
ASP.NET lecture 8
ASP.NET lecture 8ASP.NET lecture 8
ASP.NET lecture 8
 
ASP.NET Lecture 7
ASP.NET Lecture 7ASP.NET Lecture 7
ASP.NET Lecture 7
 
ASP.NET Lecture 6
ASP.NET Lecture 6ASP.NET Lecture 6
ASP.NET Lecture 6
 
ASP.NET Lecture 4
ASP.NET Lecture 4ASP.NET Lecture 4
ASP.NET Lecture 4
 
ASP.NET Lecture 3
ASP.NET Lecture 3ASP.NET Lecture 3
ASP.NET Lecture 3
 
ASP.NET Lecture 2
ASP.NET Lecture 2ASP.NET Lecture 2
ASP.NET Lecture 2
 
ASP.NET Lecture 1
ASP.NET Lecture 1ASP.NET Lecture 1
ASP.NET Lecture 1
 
AJAX and JSON
AJAX and JSONAJAX and JSON
AJAX and JSON
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
HTML and CSS part 3
HTML and CSS part 3HTML and CSS part 3
HTML and CSS part 3
 

Último

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Último (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

Prototype Framework

  • 1. Julie Iskander, Lecturer at ITI MSc. Communication and Electronics
  • 2. LectureOutlines  Object Oriented JavaScript Revision  Prototype js  Extending the DOM  Elements dimensions  Event Model  Classes and inheritance  JSON  Ajax
  • 4. Remember  Everything is an Object  Every Object can have instance methods  All objects have prototype  Functions are first-class Objects  JavaScript is multi-paradigm language  Imperative style of C  Object oriented style of Java  Functional style of Lisp
  • 5.
  • 8. Prototype  It is about the abstract not the concrete  Many toolkits is built over it like script.aculo.us
  • 9. $ Function  $()  document.getElementById()  $(‘menu’)  returns element with id=menu  $(element)  if element is a node, it is returned back  $(‘menu’,’menuitem1’,’menuitem2’)  return an array of 3 nodes id=menu and menuitem1 and menuitem2  $ extends node returned with useful prototype node methods
  • 10. $$ Function  $$(), selects node using CSS selectors, support CSS3 selectors  $$(‘li’)  select all li elements  $$(‘li.current’)  select all li elements of class=current  $$(‘#menu a’) select element all a elements inside of element with id=menu  $$ extends nodes returned with useful prototype node methods
  • 11. Enumerable Object  A mixin that provides methods useful for collections  Use in the following classes  Array  Hash  DOM- related objects  Instance Methods:  all; any; collect; detect; each; eachSlice; entries; every; filter; find; find;All; grep; include; inGroupsOf; inject; inspect; invoke; map; max; member; min; partition; pluck; reject; select; size; some; sortBy; toArray; zip
  • 12. each  elem.each(Visitor object)  Implements visitor on each element  Example: [1,3,4,7,89,6,3,4,5].each(function(elem) { alert(elem); });
  • 13. each  Implement continue using return  Example: [1,3,4,7,89,6,3,4,5].each(function(elem) { if(elem>10) return; alert(elem); });
  • 14. each  Implement break by throw $break  Example: [1,3,4,7,89,6,3,4,5].each(function(elem) { if(elem>10) return; if(elem==4) throw $break; alert(elem); });
  • 15. detect  Takes function that returns true/false  Returns first element that returns true  If no match returns undefined  Examples: [1,3,4,6,8,0,9].detect(function(elem) { return elem==0 }));  See also select, reject, partition
  • 16. map  Applies function on each element, pushes the return into an array that is eventually returned  Example: [2, 5, 7, 9,50].map(function(item) { return item*item; });
  • 18. Prototype’s DOM extension Modifying properties of elements Visibility  .hide()  .show()  .visible()  returns true/false  .toggle()
  • 19. Prototype’s DOM extension Modifying properties of elements Style and classes  .addClassName(‘class name’)  .removeClassName(‘class name’)  .hasClassName(‘class name’) returns true/false  .toggleClassName(‘class name’)  .setStyle({ prop:val,prop:val,……… })  .getStyle(‘css property’)
  • 20. Prototype’s DOM extension Modifying DOM .update(‘ ’) Change content of element .replace(‘ ’)  Remove element and add a new one in its place .insert(‘ ’), insert({top:’ ’,bottom:’ ‘, after:’ ‘, before : ‘ ’ }) .remove()
  • 22. Templates  TheTemplate class uses a basic formatting syntax, similar to Ruby.  The templates are created from strings that use symbols in the form (e.g., #{fieldName})  The symbols are replaced by actual values when the template is applied (evaluated) to an object.
  • 23. Example var myTemplate = newTemplate('<p>The TV show #{title} was directed by #{author}.</p>'); // Create hashes with the required values for placeholders var record1 = {title: 'Metrix', author:'Arun Pandey'}; var record2 = {title: 'Junoon', author:'Manusha'}; var record3 = {title: 'Red Moon', author:'Paul, John'}; var record4 = {title: 'Henai', author:'Robert'};
  • 24. Example var records = [record1, record2, record3, record4 ]; // Now apply template to produce desired formatted output records.each( function(conv) { $$('p')[0].insert( {bottom: "<div>Formatted Output : " + myTemplate.evaluate(conv)+"</div>" }); }); }
  • 25.
  • 27. Prototype Form Methods  disable() Disables the form as whole. Form controls will be visible but uneditable.  enable() Enables a fully or partially disabled form.
  • 28. Prototype Form Methods  findFirstElement() Finds first non-hidden, non-disabled form control.  focusFirstElement() Gives keyboard focus to the first element of the form.  getElements() Returns a collection of all form controls within a form.
  • 29. Prototype Form Methods  getInputs() Returns a collection of all INPUT elements in a form. Use optional type and name arguments to restrict the search on these attributes.  request() A convenience method for serializing and submitting the form via an Ajax.Request to the URL of the form's action attribute.The options parameter is passed to the Ajax.Request instance, allowing to override the HTTP method and to specify additional parameters.  reset() Resets a form to its default values.
  • 31. Element Dimension  Solve problem of inconsistent browser measurements  .measure(‘ property‘ )  $(‘mydiv’).measure(‘width’)  pixel values  For better performance, when measuring more than one dimension  .getLayout()  Layout object  $(‘mydiv’).getLayout().get(‘width’);  http://prototypejs.org/learn/element-layout
  • 33. Events  A single model for all browsers  Event.observe(element,’event’,function{}())  Event.observe(window,’load’,function(){}) Element.observe  $(‘ ’).observe(‘event’,function(){})
  • 34. Events  Can register events on elements or children of an element.  The selection of children is done using CSS-selectors  Element.on  $(‘ ’).on(‘event’,function(){})  $(‘ ’).on(‘event’,’css selector for child’,function(){})  $(‘item’).on(‘click’,’li’, function(){ ……………… });
  • 35. Event Object  All event handlers are receive an event object  function submitFun(evnt) { evnt.element() //returns element object that triggered event evnt.preventDefault() //stop default behaviour evnt.isLeftClick() or isRightClick() or isMiddleClick() evnt.pointerX() or pointerY() evnt.pointer()  object{x: , y: } }
  • 37. Class  Manages Prototype’s class-based OOP system  Class methods:  create()  Instance Methods:  addMethods()
  • 38. Class.create([superclass][, methods...])  superclass (class): superclass to inherit from.  method (object): an object (mix-in) that will be mixed-in to my new class. Multiple mixins can be used, later mixins take precedence.  returns a constructor function that can be called using new operator. It will invoke the initialize method.  The object mixin must contain ‘initialize’ method to be called when new is called.
  • 39. Class.create() var Person = Class.create({ initialize: function(name) { this.name = name; }, say: function(message) { return this.name + ': ' + message; } });
  • 40. Example  Create your own class that’s mixed with Enumerable
  • 41. Var MyClass=Class.Create(Enumerable, { initialize:function(){………….}, _each: function(iterator){ for(var i=0;i<……) { iterator(….); } } });
  • 42. JSON
  • 43. Encoding  Number#toJSON, String#toJSON,Array#toJSON, Hash#toJSON, Date#toJSON, and Object.toJSON.  var data = {name: 'Violet', occupation: 'character', age: 25 };  Object.toJSON(data); //-> '{"name": "Violet", "occupation": "character", "age": 25}’  For custom objects,  Set toJSON method which will be used by Object.toJSON.  var Person = Class.create({  initialize: function(name) {  this.name = name;  },  toJSON: function() {  return ('My name is ' + this.name + ' and I am ' + this.age + ' years old.').toJSON();  }  });  var john = new Person('John', 49);  Object.toJSON(john); //-> '"My name is John and I am 49 years old.”’
  • 44. Parsing  String#evalJSON  var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON();  data.name; //-> "Violet”
  • 45. Ajax
  • 46. Ajax  A wrapper class around the XMLHttpRequest  Uses callbacks to handle different phases of the asynchronous request.  If requested page is a JavaScript code then it is automatically evaluated and executed.
  • 47. Ajax.Request new Ajax.Request(URL, Option)  URL : string representing the url to request  Options hash  method  parameters  contentType  onSuccess  onFailure  For complete details:  http://api.prototypejs.org/ajax/
  • 48. Ajax.Updater  Updates a portion of the DOM with external source  new Ajax.Updater(ID , URL , Options)  ID: the id of the element to be updated  URL: url to fetch  Options: hash same as previous  insertion: Insertion.Top Insertion.Bottom Insertion.After Insertion.Before
  • 49. Ajax.PeriodicalUpdater  Runs Updater in periodical Intervals to repeatedly fetch content from the server.  new Ajax.PeriodicalUpdater(ID, URL, Options)  Same except Options  frequency : interval in seconds  decay : factor to multiply frequency by everytime the fetched response is the same as the previously fetched.  stop()  start()
  • 50. References  http://prototypejs.org/  Practical Prototype and script.aculo.us, Andrew Dupont , 2008