SlideShare a Scribd company logo
1 of 45
Download to read offline
jQuery UI in Drupal 7
              Darren Mothersele @mothersele
             http://www.darrenmothersele.com




Ivan Sutherland's Sketchpad system is demonstrated on the console of the TX-2 at MIT (1963)
jQuery UI in Drupal 7

• Using Javascript to improve UI
• Javascript in Drupal 7
• jQuery UI widgets
• Building complex interactions
HTML + Javascript

• HTML defines a set of standard form elements
• Javascript allows us to build new interactive widgets
• jQuery UI provides widgets, interactions and effects
Javascript widgets

• Reduce errors in data entry
• Quicker/more efficient
• More engaging/fun
• ...
Progressive Enhancement

 • Create widget using jQuery
 • Hide old widget
 • Fill in value in the background
 • Transparent to Drupal, nice and safe
 • Non-js friendly
Before Active Tags


• Multiple tagging methodologies
• Some people just expect to use spaces
• http://drupal.org/node/91074
• Character-delimited system
Active Tags


•   Action-delimited system
•   Autocomplete
•   Original widget hidden
•   http://drupal.org/project/active_tags
Javascript in Drupal 7

• Theme or Module?
• Scope?
• Module specific or reuseable?
  (Javascript Library)
• How and where to include code?
theme.info
name = My theme
description = Theme developed by me.
core = 7.x
engine = phptemplate
scripts[] = my_script.js
drupal_add_js($data, $options)

 $data is either:
  • path to Javascript file to include
  • Javascript code to include ‘inline’
  • absolute path to external JS code
  • array of settings for Javascript
 $options includes type, location, caching, ...
hook_preprocess_page()
function mytheme_preprocess_page(&$vars, $hook) {

    if (true) {

        drupal_add_js(
          drupal_get_path('theme', 'mytheme') . '/scriptname.js',
          'theme');

        $vars['scripts'] = drupal_get_js();

    }

}
hook_library()

• Used in Core for jQuery UI
• Use to include other third-party plugins
• Define your own reusable Javascript
jQuery UI Buttons
Dialog Example
function dproj_form_user_login_block_alter(&$form, $form_state) {

    drupal_add_library('system', 'ui.dialog');

    $dialog_js =
      '$("#block-user-login").dialog({title: "User login"});';

    $dialog_js =
      'jQuery(document).ready(function () { (function ($) {' .
      $dialog_js . '}(jQuery)); });';

    drupal_add_js($dialog_js,
      array('type' => 'inline', 'scope' => 'footer',
        'weight' => 5));

}
id="edit-field-issue-type-und"



$("#edit-field-issue-type-und").buttonset();
drupal_add_library()
function dproj_form_issue_node_form_alter(&$form, $form_state,
$form_id) {
    $language = $form['#node']->language;
    $form['field_issue_type'][$language]['#after_build'][] =
                                         '_dproj_button_helper';
}

function _dproj_button_helper($element, &$form_state) {
    $button_js = '$("#'. $element['#id'] .'").buttonset();';
    $button_js = JS_PREFIX . $button_js . JS_SUFFIX;
    drupal_add_library('system', 'ui.button');
  drupal_add_js($button_js, array('type' => 'inline', 'scope' =>
'footer', 'weight' => 5));
    return $element;
}
https://github.com/padolsey/jQuery.fn.autoResize
hook_library()
function dproj_library() {

    $path = drupal_get_path('module', 'dproj');

    return array('autoresize' =>     array(

      'title' => 'AutoResize',

      'website' => 'https://github.com/...'

      'version' => '1.14',

      'js' => array(

           $path .'/jquery.autoresize.js' => array(),

      ),

    ));

}
id="edit-field-project-desc-und-0-value"




$("#edit-field-project-desc-und-0-value").autoResize();
function dproj_form_project_node_form_alter(&$form,
$form_state, $form_id) {

    $language = $form['#node']->language;

    $form['field_project_desc'][$language]['#after_build'][]

      = '_dproj_autoresize_helper';

}

function _dproj_autoresize_helper($element, &$form_state) {

    $id = $element[0]['value']['#id']

    $autoresize_js = '$("#'. $id .'").autoResize();';

    $autoresize_js = JS_PREFIX . $autoresize_js . JS_SUFFIX;

    drupal_add_library('dproj', 'autoresize');

    drupal_add_js($autoresize_js, array('type' => 'inline',
      'scope' => 'footer', 'weight' => 5));

    return $element;

}
Building a more
  complex interaction
• Drupal Behaviors
• jQuery ui.draggable
• jQuery ui.droppable
• jQuery AJAX
• Contrib modules:
  Page manager (ctools), Rules, Relation
Behaviors
• Replacement for $(document).ready();
• Use attach function:
   (function ($) {

     Drupal.behaviors.exampleModule = {
       attach: function (context, settings) {

              $('.dproj', context).draggable();

          }
     };

   }(jQuery));

• AJAX safe
• Detachable
Drag and Drop
Draggable


                          Droppable




               $.ajax()
    Callback
.dproj-draggable




              .dproj-droppable



$('.dproj-draggable').draggable();
$('.dproj-droppable').droppable();
path1 =
      add-attendee/[uid]




           path2 =
            /[nid]



     callback = path1 + path2
callback = add-attendee/[uid]/[nid]
Callback argument
inserted into header
<span class='callback'>
  add-attendee/1
</span>




   <span class='callback'>/20</span>




callback = add-attendee/1/20
Drupal.behaviors.dprojdrag = {
  attach: function (context, settings) {
    $('.dproj-draggable', context).draggable({revert: 'invalid'});
    $('.dproj-droppable', context).droppable({
      hoverClass: 'drop-hover',      accept: '.dproj-draggable',
      drop: function (e, ui) {
        $(ui.draggable).hide();
        $(e.target).fadeTo('fast', 0.5);
        var view_id = '.' +
          $(e.target).attr('class').match(/view-dom-id-d+/)[0];
        var href = Drupal.settings.basePath +
          $('.callback', ui.draggable).html()
          + $('.callback', e.target).html();
        $.ajax({ url: href,
                 success: function (data) {
                 $(view_id).html($(view_id, $(data)));
                  $(view_id).fadeTo('fast', 1);
}});}});}};
Resources
•   jQuery UI                 •   Contrib Modules
    http://jqueryui.com/
    demos                         •   Views

•   Managing Javascript in        •   Relation
    Drupal 7
    http://drupal.org/node/
    756722
                                  •   Page manager

                                  •   Rules

More Related Content

What's hot

What's hot (18)

Jquery In Rails
Jquery In RailsJquery In Rails
Jquery In Rails
 
15. CodeIgniter editarea inregistrarilor
15. CodeIgniter editarea inregistrarilor15. CodeIgniter editarea inregistrarilor
15. CodeIgniter editarea inregistrarilor
 
DrupalCamp Foz - Novas APIs Drupal 7
DrupalCamp Foz - Novas APIs Drupal 7DrupalCamp Foz - Novas APIs Drupal 7
DrupalCamp Foz - Novas APIs Drupal 7
 
Magento Dependency Injection
Magento Dependency InjectionMagento Dependency Injection
Magento Dependency Injection
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
8. vederea inregistrarilor
8. vederea inregistrarilor8. vederea inregistrarilor
8. vederea inregistrarilor
 
Coding website
Coding websiteCoding website
Coding website
 
HirshHorn theme: how I created it
HirshHorn theme: how I created itHirshHorn theme: how I created it
HirshHorn theme: how I created it
 
Command-Oriented Architecture
Command-Oriented ArchitectureCommand-Oriented Architecture
Command-Oriented Architecture
 
Propel sfugmd
Propel sfugmdPropel sfugmd
Propel sfugmd
 
Mysocial databasequeries
Mysocial databasequeriesMysocial databasequeries
Mysocial databasequeries
 
Mysocial databasequeries
Mysocial databasequeriesMysocial databasequeries
Mysocial databasequeries
 
Pagination in PHP
Pagination in PHPPagination in PHP
Pagination in PHP
 
Add edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHPAdd edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHP
 
Daily notes
Daily notesDaily notes
Daily notes
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
 

Similar to jQuery UI Widgets, Drag and Drop, Drupal 7 Javascript

JQuery In Drupal
JQuery In DrupalJQuery In Drupal
JQuery In Drupalkatbailey
 
What's new in the Drupal 7 API?
What's new in the Drupal 7 API?What's new in the Drupal 7 API?
What's new in the Drupal 7 API?Alexandru Badiu
 
Drupal Javascript for developers
Drupal Javascript for developersDrupal Javascript for developers
Drupal Javascript for developersDream Production AG
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsJarod Ferguson
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your CodeDrupalDay
 
Learning the basics of the Drupal API
Learning the basics of the Drupal APILearning the basics of the Drupal API
Learning the basics of the Drupal APIAlexandru Badiu
 
Drupal Module Development - OSI Days 2010
Drupal Module Development - OSI Days 2010Drupal Module Development - OSI Days 2010
Drupal Module Development - OSI Days 2010Siva Epari
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module Developmentipsitamishra
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8Allie Jones
 
Routing in Drupal 8
Routing in Drupal 8Routing in Drupal 8
Routing in Drupal 8kgoel1
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascriptAlmog Baku
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretssmueller_sandsmedia
 
Php on the desktop and php gtk2
Php on the desktop and php gtk2Php on the desktop and php gtk2
Php on the desktop and php gtk2Elizabeth Smith
 
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011camp_drupal_ua
 
Building Large jQuery Applications
Building Large jQuery ApplicationsBuilding Large jQuery Applications
Building Large jQuery ApplicationsRebecca Murphey
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)David Giard
 

Similar to jQuery UI Widgets, Drag and Drop, Drupal 7 Javascript (20)

JQuery In Drupal
JQuery In DrupalJQuery In Drupal
JQuery In Drupal
 
What's new in the Drupal 7 API?
What's new in the Drupal 7 API?What's new in the Drupal 7 API?
What's new in the Drupal 7 API?
 
Drupal 8 migrate!
Drupal 8 migrate!Drupal 8 migrate!
Drupal 8 migrate!
 
Drupal Javascript for developers
Drupal Javascript for developersDrupal Javascript for developers
Drupal Javascript for developers
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Learning the basics of the Drupal API
Learning the basics of the Drupal APILearning the basics of the Drupal API
Learning the basics of the Drupal API
 
Drupal Module Development - OSI Days 2010
Drupal Module Development - OSI Days 2010Drupal Module Development - OSI Days 2010
Drupal Module Development - OSI Days 2010
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module Development
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8
 
Routing in Drupal 8
Routing in Drupal 8Routing in Drupal 8
Routing in Drupal 8
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascript
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
 
Jquery fundamentals
Jquery fundamentalsJquery fundamentals
Jquery fundamentals
 
Php on the desktop and php gtk2
Php on the desktop and php gtk2Php on the desktop and php gtk2
Php on the desktop and php gtk2
 
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
 
Building Large jQuery Applications
Building Large jQuery ApplicationsBuilding Large jQuery Applications
Building Large jQuery Applications
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
 

Recently uploaded

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
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.pptxMalak Abu Hammad
 
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 MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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 RobisonAnna Loughnan Colquhoun
 
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 WorkerThousandEyes
 
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.pptxHampshireHUG
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
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...Miguel Araújo
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 

Recently uploaded (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
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
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
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
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
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...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

jQuery UI Widgets, Drag and Drop, Drupal 7 Javascript

  • 1. jQuery UI in Drupal 7 Darren Mothersele @mothersele http://www.darrenmothersele.com Ivan Sutherland's Sketchpad system is demonstrated on the console of the TX-2 at MIT (1963)
  • 2. jQuery UI in Drupal 7 • Using Javascript to improve UI • Javascript in Drupal 7 • jQuery UI widgets • Building complex interactions
  • 3. HTML + Javascript • HTML defines a set of standard form elements • Javascript allows us to build new interactive widgets • jQuery UI provides widgets, interactions and effects
  • 4. Javascript widgets • Reduce errors in data entry • Quicker/more efficient • More engaging/fun • ...
  • 5.
  • 6. Progressive Enhancement • Create widget using jQuery • Hide old widget • Fill in value in the background • Transparent to Drupal, nice and safe • Non-js friendly
  • 7. Before Active Tags • Multiple tagging methodologies • Some people just expect to use spaces • http://drupal.org/node/91074 • Character-delimited system
  • 8. Active Tags • Action-delimited system • Autocomplete • Original widget hidden • http://drupal.org/project/active_tags
  • 9. Javascript in Drupal 7 • Theme or Module? • Scope? • Module specific or reuseable? (Javascript Library) • How and where to include code?
  • 10. theme.info name = My theme description = Theme developed by me. core = 7.x engine = phptemplate scripts[] = my_script.js
  • 11. drupal_add_js($data, $options) $data is either: • path to Javascript file to include • Javascript code to include ‘inline’ • absolute path to external JS code • array of settings for Javascript $options includes type, location, caching, ...
  • 12. hook_preprocess_page() function mytheme_preprocess_page(&$vars, $hook) { if (true) { drupal_add_js( drupal_get_path('theme', 'mytheme') . '/scriptname.js', 'theme'); $vars['scripts'] = drupal_get_js(); } }
  • 13. hook_library() • Used in Core for jQuery UI • Use to include other third-party plugins • Define your own reusable Javascript
  • 15.
  • 16. Dialog Example function dproj_form_user_login_block_alter(&$form, $form_state) { drupal_add_library('system', 'ui.dialog'); $dialog_js = '$("#block-user-login").dialog({title: "User login"});'; $dialog_js = 'jQuery(document).ready(function () { (function ($) {' . $dialog_js . '}(jQuery)); });'; drupal_add_js($dialog_js, array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)); }
  • 17.
  • 19. drupal_add_library() function dproj_form_issue_node_form_alter(&$form, $form_state, $form_id) { $language = $form['#node']->language; $form['field_issue_type'][$language]['#after_build'][] = '_dproj_button_helper'; } function _dproj_button_helper($element, &$form_state) { $button_js = '$("#'. $element['#id'] .'").buttonset();'; $button_js = JS_PREFIX . $button_js . JS_SUFFIX; drupal_add_library('system', 'ui.button'); drupal_add_js($button_js, array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)); return $element; }
  • 20.
  • 22. hook_library() function dproj_library() { $path = drupal_get_path('module', 'dproj'); return array('autoresize' => array( 'title' => 'AutoResize', 'website' => 'https://github.com/...' 'version' => '1.14', 'js' => array( $path .'/jquery.autoresize.js' => array(), ), )); }
  • 24. function dproj_form_project_node_form_alter(&$form, $form_state, $form_id) { $language = $form['#node']->language; $form['field_project_desc'][$language]['#after_build'][] = '_dproj_autoresize_helper'; } function _dproj_autoresize_helper($element, &$form_state) { $id = $element[0]['value']['#id'] $autoresize_js = '$("#'. $id .'").autoResize();'; $autoresize_js = JS_PREFIX . $autoresize_js . JS_SUFFIX; drupal_add_library('dproj', 'autoresize'); drupal_add_js($autoresize_js, array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)); return $element; }
  • 25.
  • 26. Building a more complex interaction • Drupal Behaviors • jQuery ui.draggable • jQuery ui.droppable • jQuery AJAX • Contrib modules: Page manager (ctools), Rules, Relation
  • 27. Behaviors • Replacement for $(document).ready(); • Use attach function: (function ($) { Drupal.behaviors.exampleModule = { attach: function (context, settings) { $('.dproj', context).draggable(); } }; }(jQuery)); • AJAX safe • Detachable
  • 28. Drag and Drop Draggable Droppable $.ajax() Callback
  • 29.
  • 30. .dproj-draggable .dproj-droppable $('.dproj-draggable').draggable(); $('.dproj-droppable').droppable();
  • 31. path1 = add-attendee/[uid] path2 = /[nid] callback = path1 + path2 callback = add-attendee/[uid]/[nid]
  • 32.
  • 34.
  • 35. <span class='callback'> add-attendee/1 </span> <span class='callback'>/20</span> callback = add-attendee/1/20
  • 36. Drupal.behaviors.dprojdrag = { attach: function (context, settings) { $('.dproj-draggable', context).draggable({revert: 'invalid'}); $('.dproj-droppable', context).droppable({ hoverClass: 'drop-hover', accept: '.dproj-draggable', drop: function (e, ui) { $(ui.draggable).hide(); $(e.target).fadeTo('fast', 0.5); var view_id = '.' + $(e.target).attr('class').match(/view-dom-id-d+/)[0]; var href = Drupal.settings.basePath + $('.callback', ui.draggable).html() + $('.callback', e.target).html(); $.ajax({ url: href, success: function (data) { $(view_id).html($(view_id, $(data))); $(view_id).fadeTo('fast', 1); }});}});}};
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45. Resources • jQuery UI • Contrib Modules http://jqueryui.com/ demos • Views • Managing Javascript in • Relation Drupal 7 http://drupal.org/node/ 756722 • Page manager • Rules