javascript in plone

72
JavaScript in Plone: What’s available; how to use it Steve McMahon (SteveM) [email protected] Plone Conference 2011

Upload: steve-mcmahon

Post on 21-May-2015

1.828 views

Category:

Technology


2 download

DESCRIPTION

Javascript in Plone: What's available, how to use it. (Bling My Plone!)

TRANSCRIPT

Page 1: Javascript in Plone

JavaScript in Plone:What’s available; how to use it

Steve McMahon (SteveM)[email protected]

Plone Conference 2011

Page 2: Javascript in Plone

JavaScript in Plone:What’s available; how to use it

Steve McMahon (SteveM)[email protected]

Plone Conference 2011

Bling My CMS!

Page 3: Javascript in Plone

You Are:

Page 4: Javascript in Plone

Integrators &

Themers

You Are:

Page 5: Javascript in Plone

You Want:

Page 6: Javascript in Plone

Widgets

You Want:

Page 7: Javascript in Plone

WidgetsValidation

You Want:

Page 8: Javascript in Plone

Widgets

Popups

Validation

You Want:

Page 9: Javascript in Plone

Widgets

Popups

Validation

Tabs ‘nAccordions

You Want:

Page 10: Javascript in Plone

Widgets

Popups

DragNDrop

Validation

Tabs ‘nAccordions

You Want:

Page 11: Javascript in Plone

But first …

Page 12: Javascript in Plone

But first …

Nuts & Bolts

Page 13: Javascript in Plone

JS & CSS Injection

Browser Resources❦

Resource Registries

Page 14: Javascript in Plone

Two Ways

Add-OnPackaging

Page 15: Javascript in Plone

Two Ways

Themes

Add-OnPackaging

Page 16: Javascript in Plone

Two Ways

Themes

BrowserLayers

Add-OnPackaging

Page 17: Javascript in Plone

Browser Layers

BrowserLayers<?xml version="1.0"?>

<layers> <layer name="example.customization.layer" interface="…browser.interfaces.IExampleCustomization" /></layers>

Page 18: Javascript in Plone

zopeskel.browserlayer[buildout]parts = zopeskel

[zopeskel]recipe = zc.recipe.eggeggs = ZopeSkel zopeskel.browserlayer …

Page 19: Javascript in Plone

zopeskel.browserlayer[buildout]parts = zopeskel

[zopeskel]recipe = zc.recipe.eggeggs = ZopeSkel zopeskel.browserlayer …

../bin/zopeskel browserlayer

Page 20: Javascript in Plone

zopeskel.browserlayer[buildout]parts = zopeskel

[zopeskel]recipe = zc.recipe.eggeggs = ZopeSkel zopeskel.browserlayer …

../bin/zopeskel browserlayer

Page 21: Javascript in Plone

Widgets

HTML5 Widgets

Page 22: Javascript in Plone

Widgets

HTML5 Widgets(Without HTML5)

Page 23: Javascript in Plone

Widgets

HTML5 Widgets(Without HTML5)

jQuery Toolsplone.app.jquerytools

Page 24: Javascript in Plone

Widgets

HTML5 Widgets(Without HTML5)

jQuery Toolsplone.app.jquerytools

dateinput

Page 25: Javascript in Plone

Widgets

HTML5 Widgets(Without HTML5)

jQuery Toolsplone.app.jquerytools

dateinputvalidation

Page 26: Javascript in Plone

Activating Optionals

profiles/default/jsregistry.xml

<javascript id="++resource++plone.app.jquerytools.validator.js" enabled="True" /> <javascript id="++resource++plone.app.jquerytools.dateinput.js" enabled="True" />

profiles/default/cssregistry.xml

<stylesheet id="++resource++plone.app.jquerytools.dateinput.css" enabled="1" />

Validation

Page 27: Javascript in Plone

Munging Old StuffValidation

Validation

Page 28: Javascript in Plone

Munging Old Stuff

jQuery(function ($) {

// doc read code here; // using $ alias for jQuery

});

Validation

Validation

Page 29: Javascript in Plone

Munging Old Stuff

jQuery(function ($) {

$('form.fgBaseEditForm span.required') .parents('div.field') .children(':input') .attr('required','required'); });

Validation

Validation

Page 30: Javascript in Plone

Munging Old Stuff

jQuery(function ($) {

$('form.fgBaseEditForm span.required') .parents('div.field') .children(':input') .attr('required','required'); });

Validation

Validation

Page 31: Javascript in Plone

Munging Old Stuff

jQuery(function ($) {

$('form.fgBaseEditForm span.required') .parents('div.field') .children(':input') .attr('required','required'); });

Validation

Validation

Page 32: Javascript in Plone

Munging Old StuffValidation

Validation

Page 33: Javascript in Plone

Munging Old Stuff

jQuery(function ($) {

$('form.fgBaseEditForm span.required') .parents('div.field') .children(':input') .attr('required','required'); $('form.fgBaseEditForm') .validator();

});

Validation

Validation

Page 34: Javascript in Plone

Munging Old StuffValidation

Validation

Page 35: Javascript in Plone

Popups (Overlays)

Popups

Page 36: Javascript in Plone

Popups (Overlays)

Popups

Page 37: Javascript in Plone

Popups (Overlays)

Popups

Page 38: Javascript in Plone

Popups (Overlays)

Popups

Page 39: Javascript in Plone

Popups (Overlays)

Popups

Page 40: Javascript in Plone

Popups (Overlays)

Popups

Page 41: Javascript in Plone

Popups (Overlays)

Popups

Page 42: Javascript in Plone

Popups (Overlays)

Popups

Page 43: Javascript in Plone

Popups (Overlays)

Popups

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

Page 44: Javascript in Plone

Popups (Overlays)

Popups

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

Page 45: Javascript in Plone

Popups (Overlays)

Popups

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

<div class="photoAlbumEntry"> <a href="http://anon:8080/p1/gallery/chapel/view" title=""> <span class="photoAlbumEntryWrapper"> <img src="http://anon:8080/p1/gallery/chapel/image_thumb" alt="Chapel" title="" height="128" width="95" /> </span> <span class="photoAlbumEntryTitle">Chapel</span> </a></div>

Page 46: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 47: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 48: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 49: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 50: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 51: Javascript in Plone

Popups (Overlays)

Popups

jQuery(function ($) {

$('.photoAlbumEntry a').prepOverlay({ subtype: 'image', urlmatch: '/view$', urlreplace: '/image_large' });

});

Page 52: Javascript in Plone

Popups (Overlays)

Popups

Page 53: Javascript in Plone

Popups (Overlays)

Popups

Page 54: Javascript in Plone

Popups (Overlays)

Popups

Page 55: Javascript in Plone

Popups (Overlays)

Popups

Subtypes: Images AJAX iframeExtensive Form Support!

Page 56: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

Tabs and Accordions:Pretty much the same thing!

Page 57: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

Tabs and Accordions:Pretty much the same thing!

jQuery Tools .tab()handles both.

Page 58: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

Tabs and Accordions:Pretty much the same thing!

jQuery Tools .tab()handles both.

http://flowplayer.org/tools/

Page 59: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$(‘container).tabs(‘pane selector’, { tabs : ‘tab selector’, effect: ‘slide’});

Page 60: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$(‘container’).tabs(‘pane selector’, { tabs : ‘tab selector’, effect: ‘slide’});

Page 61: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$(‘container).tabs(‘pane selector’, { tabs : ‘tab selector’, effect: ‘slide’});

Page 62: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$(‘container).tabs(‘pane selector’, { tabs : ‘tab selector’, effect: ‘slide’});

Page 63: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$(‘container).tabs(‘pane selector’, { tabs : ‘tab selector’, effect: ‘slide’});

Page 64: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

Page 65: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

Page 66: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$('#portal-column-two dl.portlet') .each(function() { $(this) .children('dd') .wrapAll( '<dd class="portletContent"><dl /></dd>' );});

Fixing a Typical Gotcha

Page 67: Javascript in Plone

Tabs ’N Accordions

Tabs ‘nAccordions

$('#portal-column-two') .tabs( '#portal-column-two dd.portletContent', { tabs: 'dl.portlet dt.portletHeader a', effect: 'slide' } );

Activating the Accordion

Page 68: Javascript in Plone

Drag ’N Drop

DragNDrop

Page 69: Javascript in Plone

Drag ’N Drop

DragNDrop

Page 70: Javascript in Plone

Drag ’N Drop

DragNDrop

jQuery UI• draggable• droppable• sortable

Page 71: Javascript in Plone

Drag ’N Drop

DragNDrop collective.js.jqueryui

jQuery UI• draggable• droppable• sortable

Page 72: Javascript in Plone

Credits

bling_guy: by-nc-sa/2.0 http://www.flickr.com/photos/prawnpie/

bling_camera: by-nc-sa/2.0 http://www.flickr.com/photos/eleven/

bling_calculator: by-nc-sa/2.0 http://www.flickr.com/photos/mundoo/

bling_tshirt: by-nc-sa/2.0 http://www.flickr.com/photos/thewavingcat/

bling_dog: by-nc-sa/2.0 http://www.flickr.com/photos/splat/

bling_sunglasses: by-nc/2.0 http://www.flickr.com/photos/red-bubble/

bling_beer: by-nc-sa/2.0 http://www.flickr.com/photos/johnandchristina/

bling_dummy: by-nc-sa/2.0 http://www.flickr.com/photos/mark_w/

bling_cycle: by/2.0 http://www.flickr.com/photos/ketaiblogger/

bling_vespa: by-nc-sa/2.0 http://www.flickr.com/photos/lorena-david/

bling_mouse: by-nc-sa/2.0 kelly onassis

bling_desktop: by-nc-sa/2.0 http://www.flickr.com/photos/marblegravy/

bling_cat: by-nc-sa/2.0 http://www.flickr.com/photos/nicora/

bling_engine: by-nc-sa/2.0 http://www.flickr.com/photos/rpt/