89
write less. do more.

Rails Presentation - Technology Books, Tech Conferences

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Rails Presentation - Technology Books, Tech Conferences

write less.do more.

Page 2: Rails Presentation - Technology Books, Tech Conferences

who are we?

Page 3: Rails Presentation - Technology Books, Tech Conferences

Yehuda KatzAndy Delcambre

Page 4: Rails Presentation - Technology Books, Tech Conferences
Page 5: Rails Presentation - Technology Books, Tech Conferences

How is this going to work?

Page 6: Rails Presentation - Technology Books, Tech Conferences

Introduction tojQuery

Page 7: Rails Presentation - Technology Books, Tech Conferences

Event DrivenJavaScript

Page 8: Rails Presentation - Technology Books, Tech Conferences

Labs!

Page 9: Rails Presentation - Technology Books, Tech Conferences

Labs!git clone git://github.com/adelcambre/jquery-tutorial.git

Page 10: Rails Presentation - Technology Books, Tech Conferences

Introduction tojQuery

Page 11: Rails Presentation - Technology Books, Tech Conferences

UJS With jQuery

h1 { color: #999;}

$(“h1”).click(function() { $(this).fadeIn();});

Page 12: Rails Presentation - Technology Books, Tech Conferences

get some elements.but how?

Page 13: Rails Presentation - Technology Books, Tech Conferences

CSS 3 plus•div

•div#foo

•div.class

•div, p, a

•div p

•div > p

•div + p

•div ~ p

•div:first

•div:last

•div:not(#foo)

•div:even

•div:odd

•div:eq(1)

•div:gt(1)

•div:lt(1)

•div:header

•div:animated

•div:contains(txt)

•div:empty

•div:has(p)

•div:parent

•div:hidden

•div:visible

Page 14: Rails Presentation - Technology Books, Tech Conferences

CSS 3 plus•div[foo]

•div[foo=bar]

•div[foo!=bar]

•div[foo^=bar]

•div[foo$=bar]

•div[foo*=bar]

•:nth-child(2)

•:nth-child(even)

•:first-child

•:last-child

•:only-child

•:input

•:text

•:password

•:radio

•:checkbox

•:submit

•:image

•:reset

•:button

•:file

•:hidden

•:enabled

•:disabled

•:checked

•:selected

Page 15: Rails Presentation - Technology Books, Tech Conferences

get some elements.

Page 16: Rails Presentation - Technology Books, Tech Conferences

$(“table tr:nth-child(even) > td:visible”)

Page 17: Rails Presentation - Technology Books, Tech Conferences

do stuff.

Page 18: Rails Presentation - Technology Books, Tech Conferences

$(“div”)Returns jquery object

Page 19: Rails Presentation - Technology Books, Tech Conferences

$(“div”).fadeIn()Returns jquery object

Page 20: Rails Presentation - Technology Books, Tech Conferences

$(“div”).fadeIn().css(“color”, “green”)

Returns jquery object

Page 21: Rails Presentation - Technology Books, Tech Conferences

we call this chaining

Page 22: Rails Presentation - Technology Books, Tech Conferences

Crazy chains$(“ul.open”) // [ ul, ul, ul ] .children(“li”) // [ li, li, li ] .addClass(“open”) // [ li, li, li] .end() // [ ul, ul, ul ] .find(“a”) // [ a, a, a ] .click(function(){ $(this).next().toggle(); return false; }) // [ a, a, a ] .end(); // [ ul, ul, ul ]

Page 23: Rails Presentation - Technology Books, Tech Conferences

• Select every other row of the table

• Select the Checked checkboxes

• Select the first column of the table

• Select the top level of the outline

• Select any links to jquery.com

• Select any images that contain flowers

Lab 1: Selectors

Page 24: Rails Presentation - Technology Books, Tech Conferences

5 parts of jquerydom

events

effects

ajax

plugins

Page 25: Rails Presentation - Technology Books, Tech Conferences

dom traversal$(“div”).parent();$(“div”).siblings();$(“div”).next();$(“div”).nextAll(“p”);$(“div”).nextAll(“p:first”);

dom

Page 26: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”)

<body>

<div>

<p> <p> <p>

<div> <pre>

<p> <p> <p>

Page 27: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div#foo”).siblings()

<body>

<div id='foo'>

<p> <p> <p>

<div> <pre>

<p> <p> <p>

Page 28: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”).next()

<body>

<div>

<p> <p> <p>

<div> <pre>

<p> <p> <p>

Page 29: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”).nextall(“p”)

<body>

<div id='foo'> <p> <p> <pre> <p>

Page 30: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”).nextall(“p:!rst”)

<body>

<div id='foo'> <p> <p> <pre> <p>

Page 31: Rails Presentation - Technology Books, Tech Conferences

!nd$(“div pre”)$(“div”).find(“pre”)

dom

Page 32: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div pre”)

<body>

<div>

<p> <pre> <pre>

<div> <pre>

<p> <pre> <p>

Page 33: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”).!nd(“pre”)

<body>

<div>

<p> <pre> <pre>

<div> <pre>

<p> <pre> <p>

Page 34: Rails Presentation - Technology Books, Tech Conferences

!lter$(“div:contains(some text)”)$(“div”).filter(“:contains(some text)”)

$(“div”).filter(function() { return $(this).text().match(“some text”)})

dom

Page 35: Rails Presentation - Technology Books, Tech Conferences

andSelf()$(“div”).siblings().andSelf()$(“div”).parent().andSelf()

dom

Page 36: Rails Presentation - Technology Books, Tech Conferences

dom

$(“div”).siblings().andself()

<body>

<div id='foo'>

<p> <p> <p>

<div> <pre>

<p> <p> <p>

Page 37: Rails Presentation - Technology Books, Tech Conferences

dom

$(“p”).parent().andself()

<body>

<div id='foo'>

<p> <p> <p>

<div> <pre>

<p> <p> <p>

Page 38: Rails Presentation - Technology Books, Tech Conferences

Lab 2: Traversal

• Select any text areas and their labels

•Any span’s parent

•All of the form elements from a form that PUT’s

Page 39: Rails Presentation - Technology Books, Tech Conferences

attributes$(“div”).attr(“id”) // returns id

$(“div”).attr(“id”, “hello”) // sets id to hello

$(“div”).attr(“id”, function() { return this.name })

$(“div”).attr({id: “foo”, name: “bar”})

$(“div”).removeAttr(“id”);

dom

Page 40: Rails Presentation - Technology Books, Tech Conferences

classes$(“div”).addClass(“foo”)

$(“div”).removeClass(“foo”)

$(“div”).toggleClass(“foo”)

$(“div”).hasClass(“foo”)

dom

Page 41: Rails Presentation - Technology Books, Tech Conferences

other$(“div”).html()

$(“div”).html(“<p>Hello</p>”)

$(“div”).text()

$(“div”).text(“Hello”)

$(“div”).val()

$(“div”).val(“Hello”)

dom

Page 42: Rails Presentation - Technology Books, Tech Conferences

noticing a pattern?

Page 43: Rails Presentation - Technology Books, Tech Conferences

manipulation$(“div”).append(“<p>Hello</p>”)

$(“<p>Hello</p>”).appendTo(“div”)

$(“div”).after(“<p>Hello</p>”)

$(“<p>Hello</p>”).insertAfter(“div”)

dom

Page 44: Rails Presentation - Technology Books, Tech Conferences

way more...http://docs.jquery.com

http://api.jquery.com

dom

Page 45: Rails Presentation - Technology Books, Tech Conferences

Lab 3: Manipulation

•Add CSS4 to the list after CSS3

•Remove any images with Dogs

• Turn the ruby row red

•Add some default text to the input field

Note: Use the Lab 2 File again

Page 46: Rails Presentation - Technology Books, Tech Conferences

5 parts of jquerydom

events

effects

ajax

plugins

Page 47: Rails Presentation - Technology Books, Tech Conferences

document ready$(document).ready(function() { ... })

Alias: jQuery(function($) { ... })

Page 48: Rails Presentation - Technology Books, Tech Conferences

bind$(“div”).bind(“click”, function() { ... })

Alias: $(“div”).click(function() { ... })

Page 49: Rails Presentation - Technology Books, Tech Conferences

“this”refers to the element bound

Page 50: Rails Presentation - Technology Books, Tech Conferences

e$(“div”).click(function(e) { ... })

Page 51: Rails Presentation - Technology Books, Tech Conferences

corrected event objectProperty Correction

target The element that triggered the event (event delegation)

relatedTarget The element that the mouse is moving in (or out) of

pageX/Y The mouse cursor relative to the document

which mouse: 1 (left) 2 (middle) 3 (right)

keypress: The ASCII value of the text input

metaKey Control on Windows and Apple on OSX

Page 52: Rails Presentation - Technology Books, Tech Conferences

trigger$(“div”).trigger(“click”)Alias: $(“div”).click()

Page 53: Rails Presentation - Technology Books, Tech Conferences

triggerHandlerdoesn’t trigger the browser’s default actions

Page 54: Rails Presentation - Technology Books, Tech Conferences

custom events$(“div”).bind(“myEvent”, function() { ... })

$(“div”).trigger(“myEvent”)

Page 55: Rails Presentation - Technology Books, Tech Conferences

hover$(“div”).hover(function() { ... }, function() { ... })

Page 56: Rails Presentation - Technology Books, Tech Conferences

toggle$(“div”).toggle(function() { ... }, function() { ... })

Page 57: Rails Presentation - Technology Books, Tech Conferences

live$(“div”).live(“click”, function() { ... })

1.3

Page 58: Rails Presentation - Technology Books, Tech Conferences

5 parts of jquerydom

events

effects

ajax

plugins

Page 59: Rails Presentation - Technology Books, Tech Conferences

Fades$(“div”).fadeIn()

$(“div”).fadeOut(“slow”)

Page 60: Rails Presentation - Technology Books, Tech Conferences

slides$(“div”).slideUp(200)

$(“div”).slideDown(“slow”)

Page 61: Rails Presentation - Technology Books, Tech Conferences

animate$(“div”).animate({height: “toggle”, opacity: “toggle”})

$(“div”).animate({fontSize: “24px”, opacity: 0.5}, {easing: “expo”})

Page 62: Rails Presentation - Technology Books, Tech Conferences

Lab 4: Events and Effects

• Fade out all of the divs

•Make each img grow when you mouseover them (and shrink again after you leave)

•Make clicking an li collapse the sub list

Note: Use the Lab 2 File again

Page 63: Rails Presentation - Technology Books, Tech Conferences

5 parts of jquerydom

events

effects

ajax

plugins

Page 64: Rails Presentation - Technology Books, Tech Conferences

make easy things easy$(“div”).load(“some_url”);

$(“div”).load(“some_url”, {data: “foo”}, function(text) { ... });

Page 65: Rails Presentation - Technology Books, Tech Conferences

it’s easy to do it right$.getJSON(“some_url”, function(json) { ... })

$.getJSON(“some_url”, {data: “foo”}, function(json) { ... })

Page 66: Rails Presentation - Technology Books, Tech Conferences

it’s consistent$.get(“some_url”, function(text) { ... })

$.post(“some_url”, {data: “foo”}, function(text) { ... })

Page 67: Rails Presentation - Technology Books, Tech Conferences

and powerful

•async•beforeSend•cache•complete•contentType•data•dataType•error

•global• ifModi!ed•jsonp•processData•success•timeout•type

$.ajax Options

Page 68: Rails Presentation - Technology Books, Tech Conferences

and powerful/* No Ajax requests exist, and one starts */$(“div.progress”).ajaxStart(function() { $(this).show() });

/* The last Ajax request stops */$(“div.progress”).ajaxStop(function() { $(this).hide() });

/* Any Ajax request is sent */$(“p”).ajaxSend(function() { ... });

/* Any Ajax request completes (success or failure) */$(“div”).ajaxComplete(function() { ... });

/* Any Ajax request errors out */$(“div”).ajaxError(function() { ... });

/* Any Ajax request succeeds */$(“div”).ajaxSucccess(function() { ... });

global ajax settings

Page 69: Rails Presentation - Technology Books, Tech Conferences

5 parts of jquerydom

events

effects

ajax

plugins

Page 70: Rails Presentation - Technology Books, Tech Conferences

there are hundreds

Page 71: Rails Presentation - Technology Books, Tech Conferences

which are important?

Page 72: Rails Presentation - Technology Books, Tech Conferences

jquery ui•Draggables

•Droppables

• Sortables

• Selectables

• Resizables

•Accordion

•Date Picker

•Dialog

• Slider

• Tabs

Widgets

Primitives

http://ui.jquery.com

Page 73: Rails Presentation - Technology Books, Tech Conferences

jquery formsajaxify a form in one easy step:

$(“form.remote”).ajaxForm()

http://www.malsup.com/jquery/form/

Page 74: Rails Presentation - Technology Books, Tech Conferences

form validationspecify validation rules in your markup

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Page 75: Rails Presentation - Technology Books, Tech Conferences

metadata pluginspecify metadata for elements in markup

<div data=”{some: ‘data’}”>$(“div”).metadata().some // returns ‘data’

http://jqueryjs.googlecode.com/svn/trunk/plugins/metadata/

BASE

Page 76: Rails Presentation - Technology Books, Tech Conferences

Event DrivenJavaScript

Page 78: Rails Presentation - Technology Books, Tech Conferences

jQuery on Rails

Page 79: Rails Presentation - Technology Books, Tech Conferences

jQuery and RJS

Page 80: Rails Presentation - Technology Books, Tech Conferences

Rails 3

Page 81: Rails Presentation - Technology Books, Tech Conferences

Ajax and Rails$.getJSON(“/rails/action”)

Page 82: Rails Presentation - Technology Books, Tech Conferences

Ajax and Railsrespond_to do |format| format.json { render :json => obj }end

Page 83: Rails Presentation - Technology Books, Tech Conferences

link_to_remotelink_to_remote "Delete this post", :update => "posts", :url => { :action => "destroy", :id => post.id }

Page 84: Rails Presentation - Technology Books, Tech Conferences

link_to "Delete this post", url(:action => "destroy", :id => post.id), :rel => "#posts"

link_to_remote

Page 85: Rails Presentation - Technology Books, Tech Conferences

$(‘a.remote’).live(“click”, function() { $(this.rel).load(this.href) });

link_to_remote

Page 86: Rails Presentation - Technology Books, Tech Conferences

<% form_remote_tag :url => ..., :update => “res” do -%>

<% form_tag :url => ..., :rel => “#res” do -%>

form_remote_tag

Page 87: Rails Presentation - Technology Books, Tech Conferences

$(‘form’).each(function() { $(this).ajaxForm({ target: this.rel }) })

form_remote_tag

Page 88: Rails Presentation - Technology Books, Tech Conferences

observe_!eld<%=observe_field :suggest, :url => { :action => :find }, :frequency => 0.25, :update => :suggest, :with => 'q'%>

var lastTime = new Date;$('#suggest') .live(“keyup”, function() { if(new Date - lastTime > 250) { var field = $('#suggest'); var url = field.attr('rel'); field.load(url, {q: field.val()}); } lastTime = new Date;});

Page 89: Rails Presentation - Technology Books, Tech Conferences

periodically_call_remoteperiodically_call_remote( :url => { :action => 'avgs' }, :update => 'avg', :frequency => '20')

setInterval(function() { $('#avg') .load('/some/avgs');}, 20000);