SlideShare a Scribd company logo
An Introduction to Juice Matt  Machell , Juice Project & Talis ,  June  2010 talis.com juice-project.org
In the beginning...  Photo: National Media Museum, http://www.flickr.com/photos/nationalmediamuseum/3588906094
Next  Generation  OPACs
Lots of nice functionality, great user experience improvements
but ...
[object Object],[object Object],[object Object]
Lots of byte-sized bits of extra code to add extra functionality.
Examples
 
 
but ...
But... ,[object Object],[object Object],[object Object]
What if we could make it easy for  everybody  to do this? Photo: National Library of New Zealand, http://www.flickr.com/photos/nationallibrarynz_commons
[object Object],[object Object],[object Object],[object Object],What if?
Juice
Juice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Examples
 
 
Why? ,[object Object],[object Object],[object Object],[object Object]
Key things ,[object Object],[object Object],[object Object]
Aside - The Web Stack ,[object Object],[object Object],[object Object]
How it all fits together
How it all fits together
Really easy to add to a page: <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
Getting Juice ,[object Object],[object Object],More advanced – checkout SVN at  http://juice-project.googlecode.com/svn/trunk/
Files in the Download
Juicing a site
Vufind example ,[object Object],[object Object]
 
Vufind example ,[object Object]
Vufind example ,[object Object],[object Object]
Vufind example ,[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;{$url}/interface/themes/default/juice/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;{$url}/interface/themes/default/juice/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=“{$url}/interface/themes/default/juice/extend.js&quot;></script>
Vufind example ,[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot; {$url} / interface/themes/default/juice/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot; {$url} /interface/themes/default/juice/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=“ {$url} /interface/themes/default/juice/extend.js&quot;></script>
Vufind example ,[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;{$url}/interface/themes/ default / juice/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;{$url}/interface/themes/ default /juice/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=“{$url}/interface/themes/ default / juice/extend.js&quot;></script>
Vufind example ,[object Object],[object Object],[object Object]
Vufind example ,[object Object],<IfModule mod_rewrite.c> RewriteEngine Off </IfModule>
Vufind example ,[object Object],[object Object],[object Object],[object Object]
extend.js
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); } );   function runExtensions(){  new extendedbyJuice(juice); }
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
 
Prism 3 Example
Prism 3 Example ,[object Object],[object Object]
 
Prism 3 Example ,[object Object]
 
Prism 3 Example ,[object Object],[object Object]
Adding the files ,[object Object],[object Object],[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
Adding the files ,[object Object],[object Object],[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
Adding the files ,[object Object],[object Object],[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
Adding the files ,[object Object],[object Object],[object Object],[object Object],<script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); } );   function runExtensions(){  new extendedbyJuice(juice); }
Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
Prism 3 Example ,[object Object],[object Object],[object Object]
Prism 3 Example ,[object Object],[object Object],[object Object],[object Object]
 
A Note on Demo Tenancies function prismTenancy(){ var prism = &quot;&quot;; var urlParts = window.location.href.split('/'); if(urlParts[2] == &quot;prism.talis.com&quot;){ prism = urlParts[3]; if (prism == 'demo') { prism += '/' + urlParts[4]; } } return prism; }  jQuery(function () { juice.setDebug(true); var tenant=prismTenancy() juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;,  tenant ); juice.onAllLoaded(runExtensions); });   function runExtensions(){  new extendedbyJuice(juice); }
A Sample Recipe
Google Books Preview ,[object Object],[object Object],[object Object]
Google Books Preview ,[object Object]
Google Books Preview ,[object Object],[object Object],[object Object]
Google Books Preview ,[object Object],[object Object],[object Object]
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: // add code for item page here break; } }
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break; } }
extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break;
extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break;
extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break;
extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break;
extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){  switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' +  '<h2 class=&quot;title&quot;>Look Inside</h2>' +  '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' +  '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;);   new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;);  break; } }
Google Books Preview ,[object Object],[object Object],[object Object],[object Object]
Google Books Preview ,[object Object],[object Object],[object Object],[object Object],[object Object]
 
As Easy as That!
juice-project.org ,[object Object],[object Object],[object Object],[object Object]
http://juice-project.org
Common Issues ,[object Object],[object Object],[object Object]
Questions?

More Related Content

What's hot

Fast by Default
Fast by DefaultFast by Default
Fast by Default
Abhay Kumar
 
JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)
Steve Souders
 
Sean Putman - eLearning State of the State #xapicamp
Sean Putman - eLearning State of the State #xapicampSean Putman - eLearning State of the State #xapicamp
Sean Putman - eLearning State of the State #xapicamp
Megan Bowe
 
JSConf US 2010
JSConf US 2010JSConf US 2010
JSConf US 2010
Steve Souders
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Joao Lucas Santana
 
PHP
PHPPHP
WordPress Standardized Loop API
WordPress Standardized Loop APIWordPress Standardized Loop API
WordPress Standardized Loop API
Chris Jean
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
Ralph Whitbeck
 
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
Christian Heilmann
 
Meetup django common_problems(1)
Meetup django common_problems(1)Meetup django common_problems(1)
Meetup django common_problems(1)
Eric Satterwhite
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
Eric Steele
 
Comparative Display Technologies
Comparative Display TechnologiesComparative Display Technologies
Comparative Display Technologiesjiali zhang
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
Ignacio Coloma
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web DevelopersNathan Buggia
 
Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalMax Pronko
 
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Peter Martin
 
jAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonjAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer Comparison
William Ghelfi
 
Plugins at WordCamp Phoenix
Plugins at WordCamp PhoenixPlugins at WordCamp Phoenix
Plugins at WordCamp PhoenixAndrew Ryno
 
Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1
Byrne Reese
 

What's hot (20)

Fast by Default
Fast by DefaultFast by Default
Fast by Default
 
JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)
 
Sean Putman - eLearning State of the State #xapicamp
Sean Putman - eLearning State of the State #xapicampSean Putman - eLearning State of the State #xapicamp
Sean Putman - eLearning State of the State #xapicamp
 
JSConf US 2010
JSConf US 2010JSConf US 2010
JSConf US 2010
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 
PHP
PHPPHP
PHP
 
WordPress Standardized Loop API
WordPress Standardized Loop APIWordPress Standardized Loop API
WordPress Standardized Loop API
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
 
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
JavaScript Promises and the issue of Progress - SmashingConf Freiburg Jam Ses...
 
Meetup django common_problems(1)
Meetup django common_problems(1)Meetup django common_problems(1)
Meetup django common_problems(1)
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Comparative Display Technologies
Comparative Display TechnologiesComparative Display Technologies
Comparative Display Technologies
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web Developers
 
Html5
Html5Html5
Html5
 
Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_Final
 
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
 
jAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonjAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer Comparison
 
Plugins at WordCamp Phoenix
Plugins at WordCamp PhoenixPlugins at WordCamp Phoenix
Plugins at WordCamp Phoenix
 
Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1Hacking Movable Type Training - Day 1
Hacking Movable Type Training - Day 1
 

Similar to An introduction to juice

Rich faces
Rich facesRich faces
Rich faces
BG Java EE Course
 
Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NET
goodfriday
 
Fast Loading JavaScript
Fast Loading JavaScriptFast Loading JavaScript
Fast Loading JavaScript
Aaron Peters
 
Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2
Max Katz
 
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp VictoriaWidgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Jeff Richards
 
Krazykoder struts2 plugins
Krazykoder struts2 pluginsKrazykoder struts2 plugins
Krazykoder struts2 pluginsKrazy Koder
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page Creation
Wildan Maulana
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile Widgets
Ricardo Varela
 
Google在Web前端方面的经验
Google在Web前端方面的经验Google在Web前端方面的经验
Google在Web前端方面的经验yiditushe
 
SXSW: Even Faster Web Sites
SXSW: Even Faster Web SitesSXSW: Even Faster Web Sites
SXSW: Even Faster Web Sites
Steve Souders
 
GTAC: AtomPub, testing your server implementation
GTAC: AtomPub, testing your server implementationGTAC: AtomPub, testing your server implementation
GTAC: AtomPub, testing your server implementationDavid Calavera
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09
Steve Souders
 
Evolution of API With Blogging
Evolution of API With BloggingEvolution of API With Blogging
Evolution of API With Blogging
Takatsugu Shigeta
 
Widgets Tools Keynote
Widgets Tools KeynoteWidgets Tools Keynote
Widgets Tools Keynote
Michael Mahemoff
 
Struts Portlet
Struts PortletStruts Portlet
Struts Portlet
Saikrishna Basetti
 
Retrofitting
RetrofittingRetrofitting
Retrofitting
Ted Husted
 
Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1
Jesse Thomas
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
EPiServer Meetup Oslo
 

Similar to An introduction to juice (20)

Rich faces
Rich facesRich faces
Rich faces
 
Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NET
 
Fast Loading JavaScript
Fast Loading JavaScriptFast Loading JavaScript
Fast Loading JavaScript
 
Jsp
JspJsp
Jsp
 
Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2
 
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp VictoriaWidgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
 
Krazykoder struts2 plugins
Krazykoder struts2 pluginsKrazykoder struts2 plugins
Krazykoder struts2 plugins
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page Creation
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile Widgets
 
Google在Web前端方面的经验
Google在Web前端方面的经验Google在Web前端方面的经验
Google在Web前端方面的经验
 
SXSW: Even Faster Web Sites
SXSW: Even Faster Web SitesSXSW: Even Faster Web Sites
SXSW: Even Faster Web Sites
 
Sxsw 20090314
Sxsw 20090314Sxsw 20090314
Sxsw 20090314
 
GTAC: AtomPub, testing your server implementation
GTAC: AtomPub, testing your server implementationGTAC: AtomPub, testing your server implementation
GTAC: AtomPub, testing your server implementation
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09
 
Evolution of API With Blogging
Evolution of API With BloggingEvolution of API With Blogging
Evolution of API With Blogging
 
Widgets Tools Keynote
Widgets Tools KeynoteWidgets Tools Keynote
Widgets Tools Keynote
 
Struts Portlet
Struts PortletStruts Portlet
Struts Portlet
 
Retrofitting
RetrofittingRetrofitting
Retrofitting
 
Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
 

Recently uploaded

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
ViralQR
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 

Recently uploaded (20)

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 

An introduction to juice

  • 1. An Introduction to Juice Matt Machell , Juice Project & Talis , June 2010 talis.com juice-project.org
  • 2. In the beginning... Photo: National Media Museum, http://www.flickr.com/photos/nationalmediamuseum/3588906094
  • 4. Lots of nice functionality, great user experience improvements
  • 6.
  • 7. Lots of byte-sized bits of extra code to add extra functionality.
  • 9.  
  • 10.  
  • 12.
  • 13. What if we could make it easy for everybody to do this? Photo: National Library of New Zealand, http://www.flickr.com/photos/nationallibrarynz_commons
  • 14.
  • 15. Juice
  • 16.
  • 18.  
  • 19.  
  • 20.
  • 21.
  • 22.
  • 23. How it all fits together
  • 24. How it all fits together
  • 25. Really easy to add to a page: <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/jquery-1.3.2.min.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/juice.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;assets/-/js/extend.js&quot;></script>
  • 26. Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
  • 27. Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
  • 28. Metadefs function myopac_metadef(){ juice.findMeta( &quot;isbn&quot;,&quot;.item #details .table .ISBN&quot; ); juice.findMeta(&quot;author&quot;,&quot;.item .summary .author .author&quot;); }
  • 29.
  • 30. Files in the Download
  • 32.
  • 33.  
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 43. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 44. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); } );   function runExtensions(){ new extendedbyJuice(juice); }
  • 45. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 46. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 47. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(path+&quot;/interface/themes/default/juice/extensions/extendedbyJuice.js&quot;) juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 48.  
  • 50.
  • 51.  
  • 52.
  • 53.  
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59. Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 60. Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); } );   function runExtensions(){ new extendedbyJuice(juice); }
  • 61. Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 62. Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 63. Create extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 64.
  • 65.
  • 66.  
  • 67. A Note on Demo Tenancies function prismTenancy(){ var prism = &quot;&quot;; var urlParts = window.location.href.split('/'); if(urlParts[2] == &quot;prism.talis.com&quot;){ prism = urlParts[3]; if (prism == 'demo') { prism += '/' + urlParts[4]; } } return prism; } jQuery(function () { juice.setDebug(true); var tenant=prismTenancy() juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;, tenant ); juice.onAllLoaded(runExtensions); });   function runExtensions(){ new extendedbyJuice(juice); }
  • 69.
  • 70.
  • 71.
  • 72.
  • 73. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });
  • 74. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: // add code for item page here break; } }
  • 75. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break; } }
  • 76. extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break;
  • 77. extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break;
  • 78. extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break;
  • 79. extend.js case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break;
  • 80. extend.js jQuery(function () { juice.setDebug(true); juice.loadJs(&quot;/assets/-/js/extensions/extendedbyJuice.js&quot;); juice.loadJs(&quot;/assets/-/js/extensions/GBSEmbed.js&quot;); juice.onAllLoaded(runExtensions); });   function runExtensions(){ switch(jQuery(&quot;body&quot;).attr(&quot;id&quot;)){ case &quot;renderitem&quot;: var div = '<div id=&quot;GBSPanel&quot; style=&quot;display: block; width: 100%&quot;>' + '<h2 class=&quot;title&quot;>Look Inside</h2>' + '<div id=&quot;GBSViewer&quot; style=&quot;width: 100%; height: 800px&quot;></div>' + '</div>'; var insert = new JuiceInsert(div,&quot;#details .table&quot;,&quot;after&quot;); new GBSEmbedJuice(juice,insert,&quot;GBSViewer&quot;); break; } }
  • 81.
  • 82.
  • 83.  
  • 84. As Easy as That!
  • 85.
  • 87.

Editor's Notes

  1. Hello, I’m Matt.... |(check who’s here) Can hear us. Raise hands. Opportunity for questions at the end, but raise hands as we go along if anything crops up... This is a fairly broad intro, we’ll cover reasons, architecture and a bit of practical. There will be code!
  2. New systems. More web native in approach. Bookmarkable. Improved faceted search. Better User Experience.
  3. People have come to expect these extra little bits from the websites they frequent. Services like Google Maps have made these services pervasive.
  4. And people are doing this. Lots of mashups and hackery going on out there. See the code4Lib mailing list and the various mashed library events... People are waking up to the fact that the OPAC doesn’t exists in a bubble, it’s a web app like any other... So what are people doing?
  5. National Library of Australia
  6. Seattle Public Library
  7. So there’s lots of cool stuff going on. But its pockets of work, by enthusiastic individuals with the right skills.
  8. Which is a bit of a mouthful. But what if we could reuse all these ideas and share them and make them easy for everybody else.
  9. Easy to use - we do the hard stuff so you don’t have to, you can just copy and paste Reuse and share innovation – we don’t have to work in isolation Extensible – it’s easy to build new options on top of it Product-independent – you could use it on any website that needs extensions, not just OPACs, we already have people using it on Aspire. Open Source – which means you can take it and modify it, improve it, rework it and contribute back
  10. Enough talk, show me some example already?
  11. Show some live demos if available: http://prism.talis.com/sandbox-gov/
  12. Go to http://prism.talis.com/northampton-ac/items/501787
  13. Created by richard Wallis to help make his life easier Easy for non-techies.
  14. Mention client side only (protects the server side code from problems...) How easy?
  15. Getting back to
  16. Metadefs are a key concept. It’s telling Juice where to look for information on a page. Finding metadata.
  17. Knows how to parse out particular types of text and so on. Hey it’s a 13 digit ISBN!
  18. Easy – download it from the Juice Project download page. Show the process! Show the files you get! Warning over Windows build in zip... More advanced – check out the SVN version
  19. Show unzipped folder, show what’s in each folder. Mention the key bits
  20. Break this down in next few slides. What does each bit do!
  21. This says, when the document has finished loading, run this bit of code.
  22. Set debug true, so we can see any errors
  23. Load an extension. Loading can take some time...
  24. We wait for all those extra scripts to load and then run this code.
  25. Remind them to use the sandbox tenancy which is there as a playground to try out themes and so on before going live.
  26. Go to preloaded admin window and show this. Mentioned about askign support for admin access if you don’t yet have it.
  27. Show the unzipped folder, add a new juice folder and add the files
  28. Show opening the footer.html in notepad. At the base of the file is best!
  29. There’s jquery. This tells the browse to look for a JavaScript file in this location. Prism has a base url set, so it assumes its beneath that.
  30. There’s juice itself.
  31. There’s our extend file. We need to write one specifically for our OPAC, just like we did with vufind. There’s an exampel to base it off if you want.
  32. Create this in the juice folder. It’s the file that tells the browser what to do. Show creating the file in notepad. Mention that other editors are available!
  33. Create this in the juice folder. It’s the file that tells the browser what to do.
  34. Zip up the folder, check the zip and then upload over the top of the existing theme
  35. Go to the tenancy and check the powered by juice works
  36. We run a parallel install at /demo/ to
  37. http://code.google.com/apis/books/branding.html
  38. Have juice working – we did this already!
  39. (not needed if you got the full Juice). Show going to the website anyway to show them what it looks like.
  40. We want to only add it to the right page and need the new extension file.
  41. Same as earlier process in Prism or Vufind
  42. http://prism.talis.com/sandbox-ac/items/1833592 for example
  43. http://prism.talis.com/sandbox-ac/items/1833592
  44. Show website Show videos Show documentation Show mailing list
  45. Conflicts with the jQuery of the app. – If you add in jquery and it’s already there, there may be issues. (We sandbox Prism’s jquery for exactly this reason) Mixed content - https/http – be careful could make people distrust your OPAC! Particularly an issue with plugins loading Google apis. Plugins firing on pages they shouldn’t – Add scripts to only load a