SlideShare una empresa de Scribd logo
1 de 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?

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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 a 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
 
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 SitesSteve 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 '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
 

Similar a 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 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
 
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
 

Último

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Último (20)

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

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.

Notas del editor

  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