SlideShare une entreprise Scribd logo
1  sur  88
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?

Contenu connexe

Tendances

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 #xapicampMegan Bowe
 
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
 
WordPress Standardized Loop API
WordPress Standardized Loop APIWordPress Standardized Loop API
WordPress Standardized Loop APIChris Jean
 
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 InteractivityEric 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 componentsIgnacio 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 2014Peter Martin
 
jAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonjAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonWilliam 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 1Byrne Reese
 

Tendances (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
 

Similaire à An introduction to juice

Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NETgoodfriday
 
Fast Loading JavaScript
Fast Loading JavaScriptFast Loading JavaScript
Fast Loading JavaScriptAaron 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 2Max 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 VictoriaJeff 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 CreationWildan Maulana
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsRicardo Varela
 
SXSW: Even Faster Web Sites
SXSW: Even Faster Web SitesSXSW: Even Faster Web Sites
SXSW: Even Faster Web SitesSteve Souders
 
Google在Web前端方面的经验
Google在Web前端方面的经验Google在Web前端方面的经验
Google在Web前端方面的经验yiditushe
 
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 '09Steve Souders
 
Evolution of API With Blogging
Evolution of API With BloggingEvolution of API With Blogging
Evolution of API With BloggingTakatsugu Shigeta
 
Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1Web 2.0 Lessonplan Day1
Web 2.0 Lessonplan Day1Jesse Thomas
 

Similaire à 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
 
Sxsw 20090314
Sxsw 20090314Sxsw 20090314
Sxsw 20090314
 
SXSW: Even Faster Web Sites
SXSW: Even Faster Web SitesSXSW: Even Faster Web Sites
SXSW: Even Faster Web Sites
 
Google在Web前端方面的经验
Google在Web前端方面的经验Google在Web前端方面的经验
Google在Web前端方面的经验
 
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
 

Dernier

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Dernier (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 

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.

Notes de l'éditeur

  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