SlideShare a Scribd company logo
1 of 36
Download to read offline
DR. STRANGELOVE OR:
           HOW I LEARNED TO STOP
            WORRYING AND LOVE
          HTML, CSS, AND JAVASCRIPT
Friday, September 10, 2010
POP QUIZ!!!!


Friday, September 10, 2010
Friday, September 10, 2010
git clone git://github.com/BJClark/Dr.-Strangelove.git




Friday, September 10, 2010
A LOVE STORY IN 3 PARTS


    • Writing                Beautiful HTML

    • CSS           for fun and profit

    • Javascript              like you give a shit Professional Javascript




Friday, September 10, 2010
Why?




Friday, September 10, 2010
Friday, September 10, 2010
SEMANTIC = MEANINGFUL


    • Know   your HTML elements
        (<samp> <abbr> <cite> <ol>)

    • Tables             for tables, lists for lists.

    • HTML5




Friday, September 10, 2010
IDS AND CLASSES

                                              <% div_for photo, :class => "hmedia" do %>
                                                  ...
                                              <% end -%>

                                              <div class="photo hmedia" id="photo_1">
                                                  . . .
    • IDs         are for identification       </div>



    • Classes                are categories   <%= dom_id @photo %>

                                              "photo_1"




Friday, September 10, 2010
MICROFORMATS

    • microformats.org                  <% div_for photo, :class => "hmedia" do %>
                                            <%= content_tag :h2, photo.title, :class => "fn"
                                        %>
    • Sensible               Defaults       <a rel="enclosure" type="image/jpeg" href="<%=
                                        url_for photo -%>">
                                                 <%= image_tag "strangelove.jpg", :alt => "Dr.
                                        Strangelove", :class => "photo" %>
    • Specific   HTML with                   </a>
                                            <div class="attribution">
        specific classes                          by <span class="contributor vcard">
                                                     <%= link_to photo.user, "http://
                                        example.com", :class => "url fn" %>

    • mofo, xoxo                                 </span>
                                            </div>
                                        <% end -%>




Friday, September 10, 2010
MICROFORMATS
                     XOXO - Microformat for Navigation Outlines
                                  <ol class='xoxo'>
                                    <li>Subject 1
                                      <ol>
                                           <li>subpoint a</li>
                                           <li>subpoint b</li>
                                      </ol>
                                    </li>
                                    <li>Subject 2
                                      <ol compact="compact">
                                           <li>subpoint c</li>
                                           <li>subpoint d</li>
                                      </ol>
                                    </li>
                                    <li>Subject 3
                                      <ol>
                                           <li>subpoint e</li>
                                      </ol>
                                    </li>
                                  </ol>



Friday, September 10, 2010
RESOURCEFUL VIEWS


    • Self-contained

    • Microformatted*

    • Matching               our domain
        objects



Friday, September 10, 2010
Cascading Style Sheets




Friday, September 10, 2010
WEBKIT




Friday, September 10, 2010
WEBKIT




Friday, September 10, 2010
WEBKIT



                      http://www.quirksmode.org/compatibility.html




Friday, September 10, 2010
CAN I USE. . .




Friday, September 10, 2010
CSS FRAMEWORKS

                                    • Sensible
                                            defaults! DRY!
                                     Convention over creativity.

                                    • Resets

                                    • Clearfix

                                    • Josef   Muller Brockman


Friday, September 10, 2010
GRACEFUL DEGRADATION




Friday, September 10, 2010
IT’S A SECRET




                             IE7              Webkit

Friday, September 10, 2010
GRACEFUL DEGRADATION
                     .editable_tag {
                       padding: 5px 10px;
                       margin: 5px 10px 0 0;
                       background: #bfbfbf; /* lowest common denominator */
                       float: left;
                       background: -webkit-gradient(linear, left top, left
                     bottom, from(#bfbfbf), to(#e4e4e4));
                       background: -moz-linear-gradient(top, #bfbfbf, #e4e4e4);
                       -webkit-border-radius: 4px; /* Safari 4 */
                       -moz-border-radius: 4px; /* Firefox */
                       border-radius: 4px; /* Safari 5 & Chrome */
                       box-shadow: rgba(0,0,0,1) 0 1px 0;
                     }




Friday, September 10, 2010
OBJECT ORIENTED CSS

    • CSS isn’t that different than
        OOP in other languages             .photo_navigation div.empty_photo{
                                             width: 60px;
                                             height: 60px;
                                             padding: 10px;
    • IDs         are singletons             background: silver;
                                             color: white;
                                             font-size: .8em;
    • Classes                are Objects   }
                                           .photo_navigation
                                           img, .photo_navigation
    • Inheritance and                      div.empty_photo {

        Composition                          float: left;
                                             padding-right: 10px;
                                           }

    • Namespacing

Friday, September 10, 2010
OBJECT ORIENTED CSS

   .photo_navigation div.empty_photo{
     width: 60px;                             class PhotoNavigation::EmptyPhoto
     height: 60px;                                width "60px"
                                                  height "60px"
     padding: 10px;
                                                  padding "10px"
     background: silver;                      end
     color: white;
     font-size: .8em;                         class PhotoNavigation::OtherOptions
   }                                            float "left"
                                                padding_right "10px"
   .photo_navigation img, .photo_navigation
                                              end
   div.empty_photo {
     float: left;                             empty_photo = PhotoNavigation::EmptyPhoto.new
     margin-right: 10px;                      empty_photo.extend(PhotoNavigation::OtherOptions)
   }




Friday, September 10, 2010
PROFESSIONAL JAVASCRIPT


    • Build           page to work without Javascript?

    • Inline           JS = Legacy code

    • Writing                reusable Javascript




Friday, September 10, 2010
WITHOUT JAVASCRIPT?




Friday, September 10, 2010
WITHOUT JAVASCRIPT?



    • Do    your users turn off
        javascript?




Friday, September 10, 2010
WITHOUT JAVASCRIPT?



    • Do    your users turn off
        javascript?

    • Do          you like testing?




Friday, September 10, 2010
WITHOUT JAVASCRIPT?



    • Do    your users turn off
        javascript?

    • Do          you like testing?




Friday, September 10, 2010
THE CASE FOR UJS

                                        <a href="#" onclick="new
                                        Ajax.Updater('foo', 'http://
    • Very            painful to test   strangelove.local/tags/1',
                                        {asynchronous:true,
                                        evalScripts:true,
    • Impossible             to reuse   parameters:'authenticity_token=' +
                                        encodeURIComponent('xXnuBemPMRAar/
    • Hard             to debug         EUBB9GbcXD/
                                        +HUhOaUxoAnkm5KSy8=')}); return
                                        false;">Zip</a>




Friday, September 10, 2010
WRITING REUSABLE
                                JAVASCRIPT
     var Photor = {};

     Photor.Tags = (function($){

        return {
          init: function(){
                                     • Namespaced
            }
        }

     })(jQuery);
                                     • Public   vs Private Methods
     $(document).ready(function(){
       Photor.Tags.init();

     });




Friday, September 10, 2010
INIT METHOD
     return {
         init: function(){
           $('.edit_tags').live('click', function(event){
              event.preventDefault();
              editTags(event.target);
           });

                 $('.destroy_tag').live('click', function(event){
                   event.preventDefault();
                   removeTag(event.target);
                 });

                 $('.add_tags').live('submit', function(event){
                   event.preventDefault();
                   addTags(event.target);
                 });

             }
         }



Friday, September 10, 2010
REMOVING A TAG

        var removeTag = function(tag){
          var editable_tag = $(tag).closest('.editable_tag');
          $(editable_tag).hide(); //instant user feedback
          $.ajax({url: $(tag).attr('href'),
                type: "POST",
                data: {"_method": 'delete'},
                success: function(data){
                   $(editable_tag).remove();
                   hideErrors(editable_tag);
                },
                error: function(data){
                   $(editable_tag).show();
                   handleError(data, editable_tag);
                }
          });
        }




Friday, September 10, 2010
SHOWING ADD TAGS
     //INCORRECT (and how every jQuery tutorial out there tells you how to do it)
     $('.edit_tags').click(function(event){
       event.preventDefault();
       $('.add_tags').show();
       $(event.target).hide();
     });




        var editTags = function(target){
          var parent_div = $(target).closest('.tags');
          $('.add_tags', parent_div).show();
          $(target).hide();
        }




Friday, September 10, 2010
ADDING TAGS

        var addTags = function(form) {
          $.ajax({url: $(form).attr('action') + ".js",
                type: "POST",
                data: $(form).serialize(),
                dataType: "html",
                success: function(data){
                   var tags_div = $(form).closest('.tags');
                   $('.editable_tag', tags_div).remove();
                   $('.error_messages', tags_div).after(data);
                   hideErrors();
                   $(form).find('input[type=text]').val("");
                },
                error: function(data){
                   handleError(data, form);
                }
          });




Friday, September 10, 2010
THINGS TO NOTE


    • No          use of “this”

    • Not           using IDs

    • Closures  allow for multiples of the same elements to act
        independently



Friday, September 10, 2010
BJ CLARK
                             UX Developer @ http://goldstar.com


                                    @RobotDeathSquad
                                   http://github.com/BJClark
                                       http://bjclark.me



Friday, September 10, 2010

More Related Content

Similar to Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript

Html5/CSS3 in shanghai 2010
Html5/CSS3 in shanghai 2010Html5/CSS3 in shanghai 2010
Html5/CSS3 in shanghai 2010
Zi Bin Cheah
 
BDD and Cucumber at barcampGZ
BDD and Cucumber at barcampGZBDD and Cucumber at barcampGZ
BDD and Cucumber at barcampGZ
leondu
 

Similar to Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript (20)

HTML5 - getting started
HTML5 - getting startedHTML5 - getting started
HTML5 - getting started
 
lecture2_public
lecture2_publiclecture2_public
lecture2_public
 
lecture2_public
lecture2_publiclecture2_public
lecture2_public
 
WordPress Front End Optimizations
WordPress Front End OptimizationsWordPress Front End Optimizations
WordPress Front End Optimizations
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo Toolkit
 
CSS Bloat!
CSS Bloat!CSS Bloat!
CSS Bloat!
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
A Primer on HTML 5 - By Nick Armstrong
A Primer on HTML 5 - By Nick ArmstrongA Primer on HTML 5 - By Nick Armstrong
A Primer on HTML 5 - By Nick Armstrong
 
Html5/CSS3 in shanghai 2010
Html5/CSS3 in shanghai 2010Html5/CSS3 in shanghai 2010
Html5/CSS3 in shanghai 2010
 
Topsy Turvy Design
Topsy Turvy DesignTopsy Turvy Design
Topsy Turvy Design
 
BDD and Cucumber at barcampGZ
BDD and Cucumber at barcampGZBDD and Cucumber at barcampGZ
BDD and Cucumber at barcampGZ
 
HTML5: Building for a Faster Web
HTML5: Building for a Faster WebHTML5: Building for a Faster Web
HTML5: Building for a Faster Web
 
Look ma! No images!
Look ma! No images!Look ma! No images!
Look ma! No images!
 
Hardcore CSS
Hardcore CSSHardcore CSS
Hardcore CSS
 
Http _css-tricks
Http  _css-tricksHttp  _css-tricks
Http _css-tricks
 
HTML5 & CSS3 Flag
HTML5 & CSS3 FlagHTML5 & CSS3 Flag
HTML5 & CSS3 Flag
 
Html5 coredevsummit
Html5 coredevsummitHtml5 coredevsummit
Html5 coredevsummit
 
Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~
 
Slow kinda sucks
Slow kinda sucksSlow kinda sucks
Slow kinda sucks
 
RWD in the Wild
RWD in the WildRWD in the Wild
RWD in the Wild
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript

  • 1. DR. STRANGELOVE OR: HOW I LEARNED TO STOP WORRYING AND LOVE HTML, CSS, AND JAVASCRIPT Friday, September 10, 2010
  • 5. A LOVE STORY IN 3 PARTS • Writing Beautiful HTML • CSS for fun and profit • Javascript like you give a shit Professional Javascript Friday, September 10, 2010
  • 8. SEMANTIC = MEANINGFUL • Know your HTML elements (<samp> <abbr> <cite> <ol>) • Tables for tables, lists for lists. • HTML5 Friday, September 10, 2010
  • 9. IDS AND CLASSES <% div_for photo, :class => "hmedia" do %> ... <% end -%> <div class="photo hmedia" id="photo_1"> . . . • IDs are for identification </div> • Classes are categories <%= dom_id @photo %> "photo_1" Friday, September 10, 2010
  • 10. MICROFORMATS • microformats.org <% div_for photo, :class => "hmedia" do %> <%= content_tag :h2, photo.title, :class => "fn" %> • Sensible Defaults <a rel="enclosure" type="image/jpeg" href="<%= url_for photo -%>"> <%= image_tag "strangelove.jpg", :alt => "Dr. Strangelove", :class => "photo" %> • Specific HTML with </a> <div class="attribution"> specific classes by <span class="contributor vcard"> <%= link_to photo.user, "http:// example.com", :class => "url fn" %> • mofo, xoxo </span> </div> <% end -%> Friday, September 10, 2010
  • 11. MICROFORMATS XOXO - Microformat for Navigation Outlines <ol class='xoxo'> <li>Subject 1 <ol> <li>subpoint a</li> <li>subpoint b</li> </ol> </li> <li>Subject 2 <ol compact="compact"> <li>subpoint c</li> <li>subpoint d</li> </ol> </li> <li>Subject 3 <ol> <li>subpoint e</li> </ol> </li> </ol> Friday, September 10, 2010
  • 12. RESOURCEFUL VIEWS • Self-contained • Microformatted* • Matching our domain objects Friday, September 10, 2010
  • 13. Cascading Style Sheets Friday, September 10, 2010
  • 16. WEBKIT http://www.quirksmode.org/compatibility.html Friday, September 10, 2010
  • 17. CAN I USE. . . Friday, September 10, 2010
  • 18. CSS FRAMEWORKS • Sensible defaults! DRY! Convention over creativity. • Resets • Clearfix • Josef Muller Brockman Friday, September 10, 2010
  • 20. IT’S A SECRET IE7 Webkit Friday, September 10, 2010
  • 21. GRACEFUL DEGRADATION .editable_tag { padding: 5px 10px; margin: 5px 10px 0 0; background: #bfbfbf; /* lowest common denominator */ float: left; background: -webkit-gradient(linear, left top, left bottom, from(#bfbfbf), to(#e4e4e4)); background: -moz-linear-gradient(top, #bfbfbf, #e4e4e4); -webkit-border-radius: 4px; /* Safari 4 */ -moz-border-radius: 4px; /* Firefox */ border-radius: 4px; /* Safari 5 & Chrome */ box-shadow: rgba(0,0,0,1) 0 1px 0; } Friday, September 10, 2010
  • 22. OBJECT ORIENTED CSS • CSS isn’t that different than OOP in other languages .photo_navigation div.empty_photo{ width: 60px; height: 60px; padding: 10px; • IDs are singletons background: silver; color: white; font-size: .8em; • Classes are Objects } .photo_navigation img, .photo_navigation • Inheritance and div.empty_photo { Composition float: left; padding-right: 10px; } • Namespacing Friday, September 10, 2010
  • 23. OBJECT ORIENTED CSS .photo_navigation div.empty_photo{ width: 60px; class PhotoNavigation::EmptyPhoto height: 60px; width "60px" height "60px" padding: 10px; padding "10px" background: silver; end color: white; font-size: .8em; class PhotoNavigation::OtherOptions } float "left" padding_right "10px" .photo_navigation img, .photo_navigation end div.empty_photo { float: left; empty_photo = PhotoNavigation::EmptyPhoto.new margin-right: 10px; empty_photo.extend(PhotoNavigation::OtherOptions) } Friday, September 10, 2010
  • 24. PROFESSIONAL JAVASCRIPT • Build page to work without Javascript? • Inline JS = Legacy code • Writing reusable Javascript Friday, September 10, 2010
  • 26. WITHOUT JAVASCRIPT? • Do your users turn off javascript? Friday, September 10, 2010
  • 27. WITHOUT JAVASCRIPT? • Do your users turn off javascript? • Do you like testing? Friday, September 10, 2010
  • 28. WITHOUT JAVASCRIPT? • Do your users turn off javascript? • Do you like testing? Friday, September 10, 2010
  • 29. THE CASE FOR UJS <a href="#" onclick="new Ajax.Updater('foo', 'http:// • Very painful to test strangelove.local/tags/1', {asynchronous:true, evalScripts:true, • Impossible to reuse parameters:'authenticity_token=' + encodeURIComponent('xXnuBemPMRAar/ • Hard to debug EUBB9GbcXD/ +HUhOaUxoAnkm5KSy8=')}); return false;">Zip</a> Friday, September 10, 2010
  • 30. WRITING REUSABLE JAVASCRIPT var Photor = {}; Photor.Tags = (function($){ return { init: function(){ • Namespaced } } })(jQuery); • Public vs Private Methods $(document).ready(function(){ Photor.Tags.init(); }); Friday, September 10, 2010
  • 31. INIT METHOD return { init: function(){ $('.edit_tags').live('click', function(event){ event.preventDefault(); editTags(event.target); }); $('.destroy_tag').live('click', function(event){ event.preventDefault(); removeTag(event.target); }); $('.add_tags').live('submit', function(event){ event.preventDefault(); addTags(event.target); }); } } Friday, September 10, 2010
  • 32. REMOVING A TAG var removeTag = function(tag){ var editable_tag = $(tag).closest('.editable_tag'); $(editable_tag).hide(); //instant user feedback $.ajax({url: $(tag).attr('href'), type: "POST", data: {"_method": 'delete'}, success: function(data){ $(editable_tag).remove(); hideErrors(editable_tag); }, error: function(data){ $(editable_tag).show(); handleError(data, editable_tag); } }); } Friday, September 10, 2010
  • 33. SHOWING ADD TAGS //INCORRECT (and how every jQuery tutorial out there tells you how to do it) $('.edit_tags').click(function(event){ event.preventDefault(); $('.add_tags').show(); $(event.target).hide(); }); var editTags = function(target){ var parent_div = $(target).closest('.tags'); $('.add_tags', parent_div).show(); $(target).hide(); } Friday, September 10, 2010
  • 34. ADDING TAGS var addTags = function(form) { $.ajax({url: $(form).attr('action') + ".js", type: "POST", data: $(form).serialize(), dataType: "html", success: function(data){ var tags_div = $(form).closest('.tags'); $('.editable_tag', tags_div).remove(); $('.error_messages', tags_div).after(data); hideErrors(); $(form).find('input[type=text]').val(""); }, error: function(data){ handleError(data, form); } }); Friday, September 10, 2010
  • 35. THINGS TO NOTE • No use of “this” • Not using IDs • Closures allow for multiples of the same elements to act independently Friday, September 10, 2010
  • 36. BJ CLARK UX Developer @ http://goldstar.com @RobotDeathSquad http://github.com/BJClark http://bjclark.me Friday, September 10, 2010