From 9e3539d146ae9ab028130c5bf3ed1b51c00cc0c6 Mon Sep 17 00:00:00 2001
From: Chris Hallberg <crhallberg@gmail.com>
Date: Thu, 6 Mar 2014 13:33:41 -0500
Subject: [PATCH] VuDL updates.

---
 module/VuDL/src/VuDL/Connection/Fedora.php    |   4 +-
 .../src/VuDL/Controller/VudlController.php    |  20 ++-
 module/VuDL/src/VuDL/OutlineGenerator.php     |  15 +--
 themes/bootstrap/css/vudl.css                 |  29 +++--
 themes/bootstrap/images/vudl/default.png      | Bin 0 -> 7707 bytes
 themes/bootstrap/images/vudl/msexcel.png      | Bin 0 -> 5382 bytes
 themes/bootstrap/images/vudl/msword.png       | Bin 15146 -> 7064 bytes
 themes/bootstrap/js/common.js                 |  35 +++++-
 themes/bootstrap/js/vudl/grid.js              |  12 +-
 themes/bootstrap/js/vudl/record.js            | 117 ++++++++++++------
 themes/bootstrap/js/zoomy/zoomy.js            |  35 ++++--
 .../templates/breadcrumbs/default.phtml       |   4 +-
 .../templates/breadcrumbs/multi.phtml         |   8 +-
 .../templates/search/searchbox.phtml          |   2 +-
 themes/bootstrap/templates/vudl/details.phtml |  12 +-
 themes/bootstrap/templates/vudl/grid.phtml    |   2 +-
 themes/bootstrap/templates/vudl/home.phtml    |   2 +-
 .../bootstrap/templates/vudl/master-tab.phtml |  16 ++-
 themes/bootstrap/templates/vudl/record.phtml  |  27 ++--
 .../bootstrap/templates/vudl/techinfo.phtml   |  11 +-
 .../templates/vudl/views/audio.phtml          |   9 +-
 .../templates/vudl/views/download.phtml       |  33 +++--
 .../bootstrap/templates/vudl/views/page.phtml |  14 ++-
 .../templates/vudl/views/video.phtml          |  11 +-
 themes/bootstrap/theme.config.php             |   2 +-
 25 files changed, 285 insertions(+), 135 deletions(-)
 create mode 100644 themes/bootstrap/images/vudl/default.png
 create mode 100644 themes/bootstrap/images/vudl/msexcel.png

diff --git a/module/VuDL/src/VuDL/Connection/Fedora.php b/module/VuDL/src/VuDL/Connection/Fedora.php
index 118b45c371b..15a383ba455 100644
--- a/module/VuDL/src/VuDL/Connection/Fedora.php
+++ b/module/VuDL/src/VuDL/Connection/Fedora.php
@@ -408,7 +408,9 @@ class Fedora extends AbstractBase
                 $record['id'],
                 'MASTER-MD'
             );
-            $ret += $this->getSizeAndTypeInfo($record['techinfo']);
+            $info = $this->getSizeAndTypeInfo($record['techinfo']);
+            $ret['size']     = $info['size'];
+            $ret['type'] = $info['type'];
         }
         if ($renderer != null) {
             $ret['div'] = $renderer
diff --git a/module/VuDL/src/VuDL/Controller/VudlController.php b/module/VuDL/src/VuDL/Controller/VudlController.php
index 0f7bb48c0ed..49f06b571d1 100644
--- a/module/VuDL/src/VuDL/Controller/VudlController.php
+++ b/module/VuDL/src/VuDL/Controller/VudlController.php
@@ -85,7 +85,7 @@ class VudlController extends AbstractVuDL
     protected function getPage($parent, $child)
     {
         // GET LISTS
-        $lists = $this->getConnector()->getOrderedMembers($parent);
+        $lists = array_reverse($this->getConnector()->getOrderedMembers($parent));
         // GET LIST ITEMS
         foreach ($lists as $list=>$list_data) {
             $items = $this->getConnector()->getOrderedMembers($list_data);
@@ -117,6 +117,19 @@ class VudlController extends AbstractVuDL
         return $generator->getOutline($root, $start, $pageLength);
     }
 
+    /**
+     * Get the technical metadata for a record from POST
+     *
+     * @return array
+     */
+    protected function getTechInfo()
+    {
+        return $this->getConnector()->getTechInfo(
+            $this->params()->fromPost(),
+            $this->getViewRenderer()
+        );
+    }
+
     /**
      * Ajax function for the VuDL view
      * Return JSON encoding of pages
@@ -186,9 +199,6 @@ class VudlController extends AbstractVuDL
     {
         $renderer = $this->getViewRenderer();
         $data = $this->params()->fromPost();
-        if ($data == null) {
-            $data = $this->params()->fromPost();
-        }
         if ($data == null) {
             $id = $this->params()->fromQuery('id');
             $list = array();
@@ -200,7 +210,6 @@ class VudlController extends AbstractVuDL
             $data = array_flip($list[1]);
             $data['id'] = $id;
         }
-        $data['techinfo'] = $this->getConnector()->getTechInfo($data, $renderer);
         $data['keys'] = array_keys($data);
         try {
             $view = $renderer->render(
@@ -273,7 +282,6 @@ class VudlController extends AbstractVuDL
         // Get ids for all files
         $outline = $this->getOutline(
             $root,
-            $this->params()->fromQuery('cache'),
             max(0, $view->initPage-($this->getConnector()->getPageLength()/2))
         );
 
diff --git a/module/VuDL/src/VuDL/OutlineGenerator.php b/module/VuDL/src/VuDL/OutlineGenerator.php
index d83806c3fcb..8cf28dd0c8d 100644
--- a/module/VuDL/src/VuDL/OutlineGenerator.php
+++ b/module/VuDL/src/VuDL/OutlineGenerator.php
@@ -67,13 +67,6 @@ class OutlineGenerator
      */
     protected $cache;
 
-    /**
-     * Do we skip the cache for this outline?
-     *
-     * @var boolean
-     */
-    protected $skipCache;
-
     /**
      * Queues
      *
@@ -124,9 +117,7 @@ class OutlineGenerator
      */
     protected function getCache($key, $moddate = null)
     {
-        if (!$this->skipCache && $this->cache
-            && $cache_item = $this->cache->getItem($key)
-        ) {
+        if ($this->cache && $cache_item = $this->cache->getItem($key)) {
             if ($moddate == null || (isset($cache_item['moddate'])
                 && date_create($cache_item['moddate']) >= date_create($moddate))
             ) {
@@ -294,15 +285,13 @@ class OutlineGenerator
      * Generate an array of all child pages and their information/images
      *
      * @param string $root       record id to search under
-     * @param string $cache      'cache' get parameter for skipping the cache
      * @param string $start      page/doc to start with for the return
      * @param int    $pageLength page length (leave null to use default)
      *
      * @return associative array of the lists with their members
      */
-    public function getOutline($root, $cache = null, $start = 0, $pageLength = null)
+    public function getOutline($root, $start = 0, $pageLength = null)
     {
-        $this->skipCache = $cache == 'no';
         $this->loadLists($root);
         $this->loadPagesAndDocs($start, $pageLength);
         $this->injectUrls();
diff --git a/themes/bootstrap/css/vudl.css b/themes/bootstrap/css/vudl.css
index b328afebd5d..1f204f93549 100644
--- a/themes/bootstrap/css/vudl.css
+++ b/themes/bootstrap/css/vudl.css
@@ -1,15 +1,10 @@
-.inspector_container #side-nav {
-  margin:auto 0;
-}
-.inspector_container #view {
-  margin:auto 0 auto 1%;
-}
-.inspector_container .grid-view {
-  margin-left:1%;
-}
-.item-list {
-  height:600px;
-}
+.inspector_container #side-nav { margin:auto 0 }
+.inspector_container #view { margin:auto 0 auto 1% }
+.inspector_container .grid-view { margin-left:1% }
+.item-list { height:600px }
+.nav>li.opener>a { display:none }
+#view.wide { width:100% }
+
 .page_grid .audio {
   background:url('../images/small/mp3.png');
   box-shadow:none;
@@ -26,7 +21,15 @@
 }
 .page_grid .doc,
 .page_grid .msword {
-  background:url('../images/small/doc.png');
+  background:url('../images/small/msword.jpg');
+  box-shadow:none;
+  margin:auto;
+  width:116px;
+  height:85px;
+}
+.page_grid .xls,
+.page_grid .msexcel {
+  background:url('../images/small/msexcel.jpg');
   box-shadow:none;
   margin:auto;
   width:116px;
diff --git a/themes/bootstrap/images/vudl/default.png b/themes/bootstrap/images/vudl/default.png
new file mode 100644
index 0000000000000000000000000000000000000000..1776b6b4eaacdeb4ad9c57bf475c705b37185c70
GIT binary patch
literal 7707
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
VB~((V1)Tr@002ovPDHLkV1gtVof`lE

literal 0
HcmV?d00001

diff --git a/themes/bootstrap/images/vudl/msexcel.png b/themes/bootstrap/images/vudl/msexcel.png
new file mode 100644
index 0000000000000000000000000000000000000000..772539caadaa4608d134709f613887194df3412e
GIT binary patch
literal 5382
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
YFl;v~i3PVl5SsuERb7?pSJvVG14UeWbN~PV

literal 0
HcmV?d00001

diff --git a/themes/bootstrap/images/vudl/msword.png b/themes/bootstrap/images/vudl/msword.png
index 447826c011b97641ad5c51f6828eb61addc9de8c..3b207687c927b426a35672add18989ca30efa2a4 100644
GIT binary patch
literal 7064
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
Cp$y3Y

literal 15146
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
Y0Pzl7s>Lb1&j0`b07*qoM6N<$g2W8!vH$=8

diff --git a/themes/bootstrap/js/common.js b/themes/bootstrap/js/common.js
index 596a496ecf1..436d54ba9b3 100644
--- a/themes/bootstrap/js/common.js
+++ b/themes/bootstrap/js/common.js
@@ -116,7 +116,13 @@ $(document).ready(function() {
             }
           }
         });
-      }, 600); // Delay request submission
+      }, 500); // Delay request submission
+    },
+    updater : function(item) { // Submit on update
+      console.log(this.$element[0].form.submit);
+      this.$element[0].value = item;
+      this.$element[0].form.submit();
+      return item;
     }
   });
 
@@ -184,4 +190,29 @@ $(document).ready(function() {
   Lightbox.addFormCallback('emailSearch', function(x) {
     Lightbox.confirm(vufindString['bulk_email_success']);
   });
-});
\ No newline at end of file
+});
+
+/* --- BOOTSTRAP LIBRARY TWEAKS --- */
+// Prevent typeahead highlighting
+$.fn.typeahead.Constructor.prototype.render = function(items) {
+  var that = this
+
+  items = $(items).map(function (i, item) {
+    i = $(that.options.item).attr('data-value', item)
+    i.find('a').html(that.highlighter(item))
+    return i[0]
+  })
+
+  this.$menu.html(items)
+  return this
+};
+// Enter without highlight does not delete the query
+$.fn.typeahead.Constructor.prototype.select = function () {
+  var val = this.$menu.find('.active')
+  if(val.length > 0) val = val.attr('data-value')
+  else val = this.$element.val()
+  this.$element
+    .val(this.updater(val))
+    .change()
+  return this.hide()
+}
\ No newline at end of file
diff --git a/themes/bootstrap/js/vudl/grid.js b/themes/bootstrap/js/vudl/grid.js
index db91fdc72c8..7c88850176b 100644
--- a/themes/bootstrap/js/vudl/grid.js
+++ b/themes/bootstrap/js/vudl/grid.js
@@ -3,7 +3,6 @@
  */
 var loading_pages = true;
 function ajaxLoadPages(response) {
-//console.log(response);
   if(!loading_pages) return;
   // If we got any pages (length is set in the controller)
   if(response.data !== false && response.data.length > 0) {
@@ -11,22 +10,19 @@ function ajaxLoadPages(response) {
     var trueStart = response.data.start < 0 ? 0 : response.data.start;
     for(var i=0;i<response.data.length;i++) {
       var page = response.data.outline[response.data.start];
-      if(page == undefined) {
-        //console.log('done');
-        loading_pages = false;
-        continue;
-      }
+      if(page == undefined) continue;
       $('.page-grid#item'+response.data.start)
         .attr('href','../Item/'+page.id)
         .attr('title',page.id)
         .attr('id', 'item'+response.data.start)
         .html('<div class="imgc"><img src="'+page.thumbnail+'"/></div>'+page.label)
-        .removeClass('loading');
+        .removeClass('loading')
+        .removeClass('onscreen');
       response.data.start++;
     }
     // Call the next round of page loading
     if(loading_pages) {
-      console.log(trueStart,response.data.start-1);
+      //console.log(trueStart,response.data.start-1);
       var target = Math.min(counts[0], Math.floor($('#list0').scrollTop()/159));
       $.ajax({
         url:'../VuDL/ajax?method=pageAjax&record='+documentID+'&start='+response.data.start+'&end='+(response.data.start+response.data.length),
diff --git a/themes/bootstrap/js/vudl/record.js b/themes/bootstrap/js/vudl/record.js
index 017a876f84a..64a1cbc5217 100644
--- a/themes/bootstrap/js/vudl/record.js
+++ b/themes/bootstrap/js/vudl/record.js
@@ -2,9 +2,15 @@
 var currentType = 'imaginary';
 var currTab = 'medium-tab';
 var updateFunction;
+var lastID = false;
 function ajaxGetView(pageObject) {
+  console.log(pageObject);
   pageObject['counts'] = counts;
-  if(currentType != pageObject['filetype']) {
+  if (currTab == 'master-tab' && lastID == pageObject['id']) {
+    // Trigger file download
+    //alert('download');
+    $('#file-download').submit();
+  } else if (currentType != pageObject['filetype']) {
     $.ajax({
       type: 'POST',
       url : '../VuDL/ajax?method=viewLoad',
@@ -12,6 +18,14 @@ function ajaxGetView(pageObject) {
       success: function(e) {
         $('#view').html(e.data);
         currentType = pageObject['filetype'];
+        var tab = $('#'+currTab, e.data);
+        if(tab.length > 0) {
+          tab.click();
+        } else {
+          currTab = $('.nav-tabs li a:eq(0)')[0].id;
+        }
+        // Accordion size
+        resizeAccordions();
       },
       error: function(d,e){
         console.log(d.responseText);
@@ -23,14 +37,19 @@ function ajaxGetView(pageObject) {
     updateFunction(pageObject);
     $('#'+currTab).click();
   }
-  updateTechInfo(pageObject['id']);
+  updateTechInfo(pageObject);
+  lastID = pageObject['id'];
 }
-function updateTechInfo(id) {
+function updateTechInfo(record) {
   $.ajax({dataType:'json',
-    url:'../VuDL/ajax?method=getTechInfo&id='+id,        
+    type:'post',
+    url:path+'/VuDL/ajax?method=getTechInfo',
+    data:record,
     success:function(d){
       $('#techinfo').html(d.data.div);
+      $('#file-download').attr('action', path+'/files/'+record.id+'/MASTER?download=true');
       $('#download-button small').html(d.data.type+' ~ '+d.data.size);
+      $('#allFiles').addClass('in');
     },
     error:function(d,e){
       console.log(d.responseText);
@@ -44,11 +63,15 @@ var loadWait = false;
 // AJAX load all records flagged as on screen
 function findVisible() {
   var chunk = true,min = -1,max;
-  $('.page-link').each(function(index, value) {
-    if(chunk && $(value).hasClass('onscreen')) {
-      max = parseInt($(value).attr('title'));
+  // Flag pages on screen
+  $('.page-link').each(function(index, item) {
+    if($(item).offset().top > $('#collapse1').position().top-100
+    && $(item).offset().top < $('#collapse1').position().top+$('#collapse1').height()+300
+    && $(item).hasClass('loading')) {
+      $(item).removeClass('muted');
+      $(item).removeClass('loading');
+      max = parseInt($(item).attr('title'));
       if(min < 0) min = max;
-      $(value).removeClass('onscreen');
     } else {
       if(min > -1) chunk = false;
     }
@@ -63,30 +86,29 @@ function findVisible() {
 function ajaxLoadPages(min, max) {
   //console.log('ajax', min, max, counts);
   $.ajax({
-    url:'../VuDL/ajax?method=pageAjax&record='+documentID+'&start='+min+'&end='+max,
+    url:path+'/VuDL/ajax?method=pageAjax&record='+documentID+'&start='+min+'&end='+max,
     dataType:'json',
     success : function(response) {
       loadWait = false;
-      //console.log('return');
       // For each page
       for(var i=0;i<response.data.length;i++) {
         var page = response.data.outline[response.data.start];
         if(page == undefined) continue;
+        var img = $('<img src="'+page.thumbnail+'"/>');
         $('.page-link#item'+response.data.start)
           .attr('onClick','ajaxGetView('+JSON.stringify(page).replace(/"/g, "'")+', this)')
           .attr('title',page.id)
           .attr('alt',page.label)
           .attr('id', 'item'+response.data.start)
-          .html('<img class="img-polaroid" src="'+page.thumbnail+'"/><br/>'+page.label)
+          .html('<br/>'+page.label)
+          .prepend(img)
           .addClass('pointer')
           .removeClass('loading')
-          .removeClass('onscreen');
+          .removeClass('onscreen')
+          .removeClass('muted');
         response.data.start++;
       }
-      if($('.onscreen').length > 0) {
-         //console.log('go again');
-         findVisible();
-      }
+      findVisible();
     },
     error : function(d,e){
       console.log(d.responseText);
@@ -94,7 +116,7 @@ function ajaxLoadPages(min, max) {
     }
   });
 }
-
+// Pages
 function prevPage() {
   $('.page-link.alert-info').prev('.page-link').click();
   scrollToSelected();
@@ -104,34 +126,57 @@ function nextPage() {
   scrollToSelected();
 }
 function scrollToSelected() {
-  $('#list0').scrollTop($('#list0').scrollTop()+$('#list0 .alert-info').offset().top-320);
+  $('#collapse1').scrollTop($('#collapse1').scrollTop()+$('#collapse1 .alert-info').position().top-10);
 }
-
+// Accordion size
+function resizeAccordions(offset) {
+  var height = $(window).innerHeight()-40;
+  $('.tab-content').css('min-height',height-$('.tab-content').position().top-46);
+  var accordionHeight = height-160-($('#side-nav .accordion-heading').length-2)*30;
+  // All accordions
+  $('#side-nav .accordion-body').css({
+    'max-height':accordionHeight,
+    'overflow-y':'auto'
+  });
+  // Set height in the open accordion
+  $('#side-nav .accordion-body.in').css({
+    'height':accordionHeight
+  });
+  $('.zoomy-container').css('height',height-$('.zoomy-container').parent().position().top+2);
+}
+// Toggle side menu
+function toggleSideNav() {
+  $('#side-nav').toggle();
+  var opener = $('#view .nav-tabs li.opener a');
+  if(opener.is(":visible")) {
+    opener.hide();
+  } else {
+    opener.css('display','inherit');
+  }
+  $('#view').toggleClass('wide');
+  $('#zoom').zoomyResize();
+}
+// Ready? Let's go
 $(document).ready(function() {
   $('.page-link').click(function() {
     $('.page-link.alert-info').removeClass('alert-info');
     $(this).addClass('alert-info');
   });  
-  // Scroll Event
-  $('.item-list').scroll(function() {
-    // Flag pages on screen    
-    $('.page-link').removeClass('onscreen').each(function(index, value) {
-      if($(value).offset().top > 0
-      && $(value).offset().top < $('#list0').height()+300
-      && $(value).hasClass('loading')) {
-        $(value).addClass('onscreen').removeClass('muted');
-      }
+  // Load clicked items
+  $('.loading').click(function() {
+    scrollToSelected();
+    findVisible();
     });
+  // Scroll Event
+  $('.item-list').parent().scroll(function() {
     if(loadWait) return;
     loadWait = true;
     findVisible();
   });
-  // Accordion size  
-  $('.item-list').css({
-    'height':Math.max(200, $('#view').height()-$('#side-nav').position()-2),
-    'overflow-y':'auto'
-  })
-  // Initial events
+  setTimeout(findVisible, 1000);
   ajaxGetView(initPage);
-  scrollToSelected();
-});
\ No newline at end of file
+});
+// Initial alignment
+$( window ).load( scrollToSelected );
+// Accordion size
+$( window ).resize( resizeAccordions );
\ No newline at end of file
diff --git a/themes/bootstrap/js/zoomy/zoomy.js b/themes/bootstrap/js/zoomy/zoomy.js
index 8e1542a5a56..f13682967c6 100644
--- a/themes/bootstrap/js/zoomy/zoomy.js
+++ b/themes/bootstrap/js/zoomy/zoomy.js
@@ -126,6 +126,18 @@
           state.minimap.attr('src', src);
         }
       },
+      resize: function() {
+        // Update container size
+        state.container.width =   $('.zoomy-container').width();
+        state.container.height =  $('.zoomy-container').height();
+        state.container.left =    $('.zoomy-container').offset().left;
+        state.container.top =     $('.zoomy-container').offset().top;
+        state.container.centerx = $('.zoomy-container').width()/2;
+        state.container.centery = $('.zoomy-container').height()/2;
+        // Do it
+        core.zoom({init:state.page.zoom,setZoom:true},0);
+        //console.log(state.bounds.width());
+      },
       rotateLeft: function() {
         //drawCross(centerX+(centerY-mouseY)-boxHeight,centerY+(mouseX-centerX));
         core.rotate(state.page.theta + 90);
@@ -167,13 +179,13 @@
           state.map.elem.css({
               'width' :state.map.height, 'height':state.map.width,
               'right' :(state.map.size+state.map.margin-state.map.height)/2,
-              'bottom':(state.map.size+state.map.margin-state.map.width)/2-21
+              'bottom':(state.map.size+state.map.margin-state.map.width)/2
             });
         } else {
           state.map.elem.css({
               'width' :state.map.width, 'height':state.map.height,
               'right' :(state.map.size+state.map.margin-state.map.width)/2,
-              'bottom':(state.map.size+state.map.margin-state.map.height)/2-21
+              'bottom':(state.map.size+state.map.margin-state.map.height)/2
             });
         }
         var moffset = state.page.sideways && $.browser != "msie"
@@ -304,9 +316,9 @@
       toggleUI: function() {
         $('.zoomy-container .ui').toggle();
         if($('.zoomy-container .ui').is(':hidden')) {
-          $('.zoomy-container #toggle').html('<i class="icon-resize-full icon-rotate-90"></i>');
+          $('.zoomy-container #toggle').html('<span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-resize-full icon-rotate-90"></i></span>');
         } else {
-          $('.zoomy-container #toggle').html('<i class="icon-resize-small icon-rotate-90"></i>');
+          $('.zoomy-container #toggle').html('<span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-resize-small icon-rotate-90"></i></span>');
         }
       }
     };
@@ -315,19 +327,19 @@
     
     $('.zoomy-container .turn-left').unbind('click').bind('click', core.rotateLeft);
     $('.zoomy-container .turn-right').unbind('click').bind('click', core.rotateRight);
-    $('.zoomy-container .zoom-in').unbind('click').bind('click', function(){core.zoom({fake:1},1)});
-    $('.zoomy-container .zoom-out').unbind('click').bind('click', function(){core.zoom({fake:1},-1)});
+    $('.zoomy-container .zoom-in').unbind('click').bind('click', function(){core.zoom({fake:1},-1)});
+    $('.zoomy-container .zoom-out').unbind('click').bind('click', function(){core.zoom({fake:1},1)});
     $('.zoomy-container .zoom .level').unbind('keyup').bind('keyup', function(){core.zoom({setZoom:this.value/100},0)});
     $('.zoomy-container #toggle').unbind('click').bind('click', function(){core.toggleUI()});
     
-    return {'src':src,'load':core.load};
+    return {'src':src,'load':core.load,'resize':core.resize};
   };
   
   $.fn.zoomy = function(src, thumb) {
     var elem = this,
         instance = elem.data('zoomy');            
     if(!instance) { // init
-      $(this).html('<div class="bounds"></div><div class="page"><img src=""></div><div class="map ui"><img src="" class="mini_map"><div class="scope"></div></div><div class="loading-bar"><div class="progress progress-striped active" style="width:40%;margin:auto;border:1px solid #FFF"><div class="bar" style="width:100%;">Loading...</div></div></div><div class="control"><a class="turn-right ui"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-rotate-left"></i></span></i></a><a class="turn-left ui"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-rotate-right"></i></span></a><a id="toggle"><i class="icon-resize-small icon-rotate-90"></i></a></div><div class="zoom ui"><a class="zoom-out"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-plus"></i></span></a><input class="level">%<a class="zoom-in"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-minus"></i></span></a></div>');
+      $(this).html('<div class="bounds"></div><div class="page"><img src=""></div><div class="map ui"><img src="" class="mini_map"><div class="scope"></div></div><div class="loading-bar"><div class="progress progress-striped active" style="width:40%;margin:auto;border:1px solid #FFF"><div class="bar" style="width:100%;">Loading...</div></div></div><div class="control"><a class="turn-right ui"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-rotate-left"></i></span></i></a><a class="turn-left ui"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-rotate-right"></i></span></a><a id="toggle"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-resize-small icon-rotate-90"></i></span></a></div><div class="zoom ui"><a class="zoom-out"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-plus"></i></span></a><input class="level">%<a class="zoom-in"><span class="icon-stack"><i class="icon-sign-blank icon-muted icon-stack-base"></i><i class="icon-minus"></i></span></a></div>');
       $(this).addClass('zoomy-container');
       instance = new Zoomy(src, thumb);
       elem.data('zoomy', instance);
@@ -340,4 +352,11 @@
     }
     return this;
   }
+  
+  $.fn.zoomyResize = function() {
+      var instance = this.data('zoomy');
+      //console.log(instance);
+      instance['resize']();
+    
+  }
 })(jQuery);
diff --git a/themes/bootstrap/templates/breadcrumbs/default.phtml b/themes/bootstrap/templates/breadcrumbs/default.phtml
index beef0a381fb..0f31bec29db 100644
--- a/themes/bootstrap/templates/breadcrumbs/default.phtml
+++ b/themes/bootstrap/templates/breadcrumbs/default.phtml
@@ -5,8 +5,8 @@
   <li><a href="<?=$this->url('collection', array('id'=>$id)) ?>"><?=$parent ?></a> <span class="divider">&gt;</span></li>
 <? endforeach; ?>
 <? if(isset($this->layout()->end)): ?>
-  <li title="<?=$this->title ?>"><?=$this->truncate($this->title, 100) ?> <span class="divider">&gt;</span></li>
+  <li title="<?=$this->layout()->title ?>"><?=$this->truncate($this->layout()->title, 100) ?> <span class="divider">&gt;</span></li>
   <li class="active"><?=$this->layout()->end ?></li>
 <? else: ?>
-  <li class="active" title="<?=$this->title ?>"><?=$this->title ?></li>
+  <li class="active" title="<?=$this->layout()->title ?>"><?=$this->truncate($this->layout()->title, 100) ?></li>
 <? endif; ?>
\ No newline at end of file
diff --git a/themes/bootstrap/templates/breadcrumbs/multi.phtml b/themes/bootstrap/templates/breadcrumbs/multi.phtml
index eaf8ddced91..9819107c852 100644
--- a/themes/bootstrap/templates/breadcrumbs/multi.phtml
+++ b/themes/bootstrap/templates/breadcrumbs/multi.phtml
@@ -1,9 +1,9 @@
 <li><a href="<?=$this->url('home') ?>">Home</a> <span class="divider">&gt;</span></li>
 <li><a href="<?=$this->url('vudl-default-collection') ?>">Collections</a> <span class="divider">&gt;</span></li>
 <li class="dropdown">
-  <a class="dropdown-toggle pointer">In <?=count($this->parents) ?> Collections</a>
+  <a class="dropdown-toggle pointer">In <?=count($this->layout()->breadcrumbs) ?> Collections</a>
   <ul class="dropdown-menu" role="menu">
-    <? foreach ($this->parents as $trail): ?>
+    <? foreach ($this->layout()->breadcrumbs as $trail): ?>
       <ul class="inline" style="margin:0 .5em;white-space:nowrap">
       <? foreach (array_reverse($trail) as $id=>$title): ?>
         <li><span class="muted">&gt;</span> <a href="<?=$this->url('vudl-record', array('id'=>$id))?>"><?=$title ?></a></li>
@@ -14,9 +14,9 @@
   <span class="divider">&gt;</span>
 </li>
 <? if(isset($this->layout()->end)): ?>
-  <li title="<?=$this->title ?>"><?=$this->truncate($this->title, 100) ?> <span class="divider">&gt;</span></li>
+  <li title="<?=$this->layout()->title ?>"><?=$this->truncate($this->layout()->title, 100) ?> <span class="divider">&gt;</span></li>
   <li class="active"><?=$this->layout()->end ?></li>
 <? else: ?>
-  <li class="active" title="<?=$this->title ?>"><?=$this->title ?></li>
+  <li class="active" title="<?=$this->layout()->title ?>"><?=$this->truncate($this->layout()->title, 100) ?></li>
 <? endif; ?>
 <script>$('.dropdown-toggle').dropdown()</script>
diff --git a/themes/bootstrap/templates/search/searchbox.phtml b/themes/bootstrap/templates/search/searchbox.phtml
index a3ecfdb79eb..e2bed076f31 100644
--- a/themes/bootstrap/templates/search/searchbox.phtml
+++ b/themes/bootstrap/templates/search/searchbox.phtml
@@ -47,7 +47,7 @@
       <? elseif ($handlerCount == 1): ?>
         <input type="hidden" name="type" value="<?=$this->escapeHtml($handlers[0]['value'])?>" />
       <? endif; ?>
-      <button type="submit" name="submit" class="btn" value="<?=$this->transEsc("Find")?>"><i class="icon-search"></i> <?=$this->transEsc("Find")?></button>
+      <button type="submit" class="btn"><i class="icon-search"></i> <?=$this->transEsc("Find")?></button>
       <? if ($advSearch): ?>
         <a href="<?=$this->url($advSearch)?>" class="btn btn-link"><?=$this->transEsc("Advanced")?></a>
       <? endif; ?>
diff --git a/themes/bootstrap/templates/vudl/details.phtml b/themes/bootstrap/templates/vudl/details.phtml
index 77cf0ba8fc3..bf72a8be084 100644
--- a/themes/bootstrap/templates/vudl/details.phtml
+++ b/themes/bootstrap/templates/vudl/details.phtml
@@ -1,6 +1,6 @@
 <?php
   $skip = array(
-    'license', 'special_license', 'description', 'title', 'title_alt'
+    'license', 'special_license', 'description', 'title'
   );
   $no_link = array('title', 'description');
 ?>
@@ -11,7 +11,9 @@
     </a>
   </div>
   <div id="collapse0" class="accordion-body collapse">
-    <table class="table table-striped small details">
+    <div class="accordion-inner">
+      <table class="table small details">
+        <tr><td><?=$this->transEsc('Full Title') ?></td><td><?=$this->details['title']['value'] ?></td></tr>
       <? foreach ($this->details as $attr=>$val):
         // Skip items not placed in this table
         if(in_array($attr, $skip)) continue; ?>
@@ -63,6 +65,7 @@
         <? endif; ?>
       <? endif; ?>
     </table>
+    </div>
     <div class="pad text-center small">
       <? if(isset($this->details['license'])): ?>
         <div class="block text-center">
@@ -81,9 +84,10 @@
         </div>
         <br/><br/>
       <? endif; ?>
-      <a href="<?=$this->url('vudl-record', array('id'=>$this->id))?>"><i class="icon-link"></i> Permanent Link</a>
+      <a href="<?=$this->url('record', array('id'=>$this->id))?>"><i class="icon-link"></i> <?=$this->transEsc('More Details') ?></a><br/>
+      <a href="<?=$this->url('vudl-record', array('id'=>$this->id))?>"><i class="icon-save"></i> <?=$this->transEsc('Permanent Link') ?></a><br/>
       <br/><br/>
-      <? if(isset($this->details['description'])): ?><p class="text-left"><?=html_entity_decode($this->details['description']['value']) ?></p><? endif ?>
+      <? if(isset($this->details['description'])): ?><p class="text-left"><?=html_entity_decode($this->details['description']['value'],  ENT_COMPAT|ENT_HTML401, 'UTF-8') ?></p><? endif ?>
     </div>
   </div>
 </div>
\ No newline at end of file
diff --git a/themes/bootstrap/templates/vudl/grid.phtml b/themes/bootstrap/templates/vudl/grid.phtml
index b1324357ca7..2763bb35d36 100644
--- a/themes/bootstrap/templates/vudl/grid.phtml
+++ b/themes/bootstrap/templates/vudl/grid.phtml
@@ -48,7 +48,7 @@
         <? endfor; ?>
         <!-- LOADED ITEMS -->
         <? foreach($list as $i=>$item): ?>
-          <a href="<?=$this->url('vudl-record', array('id'=>$item['id'])) ?>" class="span3 pull-left well text-center page-grid pointer" title="<?=$item['id'] ?>" id="item<?=$j?>">
+          <a href="<?=$this->url('vudl-record', array('id'=>$item['id'])) ?>" class="span3 pull-left well text-center page-grid pointer" title="<?=$item['id'] ?>" id="item<?=$index?>">
           <? if(isset($item['thumbnail'])): ?>
             <img class="img-polaroid" src="<?=$item['thumbnail'] ?>" alt="<?=$item['label'] ?>"/>
           <? else: ?>
diff --git a/themes/bootstrap/templates/vudl/home.phtml b/themes/bootstrap/templates/vudl/home.phtml
index 5374d3acdf2..d76a743584c 100644
--- a/themes/bootstrap/templates/vudl/home.phtml
+++ b/themes/bootstrap/templates/vudl/home.phtml
@@ -1,6 +1,6 @@
 <?
   // Set page title.
-  $this->headTitle($this->translate($this->title) .' - '. $this->translate('Search Home'));
+  $this->headTitle($this->translate($this->translate($this->title)));
 
   // Set default value if necessary:
   if (!isset($this->searchClassId)) {
diff --git a/themes/bootstrap/templates/vudl/master-tab.phtml b/themes/bootstrap/templates/vudl/master-tab.phtml
index a964aff56a4..5496c549326 100644
--- a/themes/bootstrap/templates/vudl/master-tab.phtml
+++ b/themes/bootstrap/templates/vudl/master-tab.phtml
@@ -1,10 +1,14 @@
 <? if(isset($this->master)): ?>
-  <a id="download-button" class="btn btn-large btn-primary" href="<?=$this->url('files', array('id'=>$this->id, 'type'=>'MASTER')) ?>?download=true" style="width:300px;margin-top:12px">
-    <i class="icon-download-alt icon-2x pull-left"></i> Download Master File<br>
-    <small><?=$this->mimetype ?><?if(isset($this->techinfo['size'])):?> ~ <?=$this->techinfo['size'] ?><? endif ?></small>
-  </a>
+  <form method="get" id="file-download" action="<?=$this->url('files', array('id'=>$this->id, 'type'=>'MASTER')) ?>?download=true">
+    <button id="download-button" class="btn btn-large btn-primary" style="width:300px;margin-top:12px">
+      <i class="icon-download-alt icon-2x pull-left"></i> <?=$this->transEsc('Download File') ?><br>
+      <small><?=$this->techinfo['type'] ?><?if(isset($this->techinfo['size'])):?> ~ <?=$this->techinfo['size'] ?><? endif ?></small>
+    </button>
+  </form>
 <? else: ?>
-  <p class="big">Original Image File Not Available.</p>
+  <br/><br/>
+  <p>Original Image File Not Available.</p>
+  <p>See below for all available downloads.</p>
 <? endif; ?>
-<br/><br/>
+<br/>
 <div class="accordion" id="techinfo"><?=$this->techinfo['div'] ?></div>
\ No newline at end of file
diff --git a/themes/bootstrap/templates/vudl/record.phtml b/themes/bootstrap/templates/vudl/record.phtml
index d9b4aa3a3ce..0ede159ec3d 100644
--- a/themes/bootstrap/templates/vudl/record.phtml
+++ b/themes/bootstrap/templates/vudl/record.phtml
@@ -43,12 +43,14 @@
   
   function json_php_encode($op, $quotes = false) {
     if($quotes) {
-      return str_replace('"', "'", str_replace('&apos;', "\'", str_replace('\/', '/', json_encode($op))));
+      return str_replace('"', "'", str_replace("'", "\\'", str_replace('\/', '/', json_encode($op))));
     } else {
       return str_replace('\/', '/', json_encode($op));
     }
   }
 ?>
+  <? var_dump($this->initList) ?>
+  <? var_dump($this->initPage) ?>
 <script>
   google.load("swfobject", "2.2");
   var documentID = '<?=$this->id ?>';
@@ -79,21 +81,28 @@
   <? else: ?>
     <input type="hidden" name="trail" value="<?=current(array_keys($this->parents[0]))?>"/>
   <? endif; ?>
-  <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
   <button class="btn" type="submit" name="next_x" value="1" title="<?=$this->transEsc('Next Item in Collection')?>"><?=$this->transEsc('Next Item')?> &rarr;</button>
 </form>
 <div class="inspector_container row-fluid">
   <div id="side-nav" class="accordion span3">
+    <div class="accordion-group closer">
+      <div class="accordion-heading">
+        <a class="accordion-toggle" onClick="toggleSideNav()">
+          <i class="icon-caret-left"></i>
+          <i class="icon-caret-left"></i>
+          <i class="icon-caret-left"></i>
+        </a>
+      </div>
+    </div>
     <?=$this->context($this)->renderInContext('vudl/details.phtml', array())?>
-    <? $i=0; ?>
     <? foreach($this->outline['lists'] as $key=>$list): ?>
       <div class="accordion-group">
         <div class="accordion-heading">
-          <a class="accordion-toggle" data-toggle="collapse" data-parent="#side-nav" href="#collapse<?=($i+1)?>">
+          <a class="accordion-toggle" data-toggle="collapse" data-parent="#side-nav" href="#collapse<?=$key+1 ?>">
             <?=$this->outline['names'][$key] ?>
           </a>
         </div>
-        <div id="collapse<?=($i+1)?>" class="accordion-body collapse<? if($i==0): ?> in<? endif; ?>">
+        <div id="collapse<?=$key+1 ?>" class="accordion-body collapse<? if($key==$this->initList): ?> in<? endif; ?>">
           <div class="accordion-inner item-list" id="list<?=$key ?>">
             <!-- PRE LOADING PLACEHOLDERS -->
             <? for($i=0;$i<current(array_keys($list))-1;$i++): ?>
@@ -101,12 +110,14 @@
             <? endfor; ?>
             <!-- LOADED ITEMS -->
             <? foreach($list as $j=>$item): ?>
-              <a title="<?=$item['id'] ?>" onClick="ajaxGetView(<?=json_php_encode($item, true) ?>, this)" class="well well-small block text-center page-link pointer<?=$key == 0 && $j == $this->initPage ?' alert-info':''?>" id="item<?=$j?>">
+              <a title="<?=$item['id'] ?>" onClick="ajaxGetView(<?=json_php_encode($item, true) ?>, this)" class="well well-small block text-center page-link pointer<?=$key == $this->initList && $j == $this->initPage ?' alert-info':''?>" id="item<?=$j?>">
               <? if(isset($item['thumbnail'])): ?>
                 <img src="<?=$item['thumbnail'] ?>" alt="<?=$item['label'] ?>"/><br/>
               <? else: ?>
-                <? $imgSrc = $item['filetype'] == 'download' ? $item['fulltype'] : $item['filetype']; ?>
-                <img src="<?=$this->imageLink('vudl/'.$imgSrc.'.png') ?>" alt="<?=$imgSrc ?>"/><br/>
+                <? $imgType = $item['filetype'] == 'download' ? $item['fulltype'] : $item['filetype'];
+                   $imgSrc = $this->imageLink('vudl/'.$imgType.'.png');
+                   if(empty($imgSrc)) $imgSrc = $this->imageLink('vudl/'.$imgType.'.jpg'); ?>
+                <img src="<?=$imgSrc ?>" alt="<?=$imgType ?>" style="max-width:100px"/><br/>
               <? endif; ?>
                 <?=$item['label'] ?>
               </a>
diff --git a/themes/bootstrap/templates/vudl/techinfo.phtml b/themes/bootstrap/templates/vudl/techinfo.phtml
index 104699cf7ee..2e4ea6c1586 100644
--- a/themes/bootstrap/templates/vudl/techinfo.phtml
+++ b/themes/bootstrap/templates/vudl/techinfo.phtml
@@ -8,8 +8,14 @@
   <div id="allFiles" class="accordion-body collapse">
     <div class="accordion-inner">
       <? foreach ($this->record as $key=>$link): ?>
-        <? if (is_array($this->record[$key]) || strpos($key, '-') !== false
-        || $link == $this->record['id']|| $key == 'techinfo') continue; ?>
+        <? $mtKey = array_search(strToUpper($key), $this->record['datastreams']); ?>
+        <? if (
+          is_array($this->record[$key])
+          || strpos($this->record['mimetypes'][$mtKey], 'text') !== false
+          || strpos($this->record['mimetypes'][$mtKey], 'xml') !== false
+          || strpos($key, '-') !== false
+          || $key == 'techinfo'
+        ) continue; ?>
         <a class="btn btn-block" href="<?=$this->url(
           'files',
           array(
@@ -19,7 +25,6 @@
         )?>?download=true">
           <?=strToUpper($this->transEsc($key)) ?>
           <? if (isset($this->record['mimetypes'])): ?>
-            <? $mtKey = array_search(strToUpper($key), $this->record['datastreams']); ?>
             <span class="pull-right small"><?=$this->record['mimetypes'][$mtKey] ?></span>
           <? endif; ?>
         </a>
diff --git a/themes/bootstrap/templates/vudl/views/audio.phtml b/themes/bootstrap/templates/vudl/views/audio.phtml
index 75f929f6289..677c52e6753 100644
--- a/themes/bootstrap/templates/vudl/views/audio.phtml
+++ b/themes/bootstrap/templates/vudl/views/audio.phtml
@@ -39,7 +39,14 @@
   </div>
 <? endif; ?>
 <ul class="nav nav-tabs">
-  <li class="active"><a>Original</a></li>
+  <li class="opener">
+    <a onClick="toggleSideNav()">
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+    </a>
+  </li>
+  <li class="active"><a>Player and Downloads</a></li>
   <? if($this->counts[0] > 1): ?>
     <div class="btn-group pull-right hidden-phone">
       <a href="javascript:prevPage()" class="btn btn-small">Prev Page</a>
diff --git a/themes/bootstrap/templates/vudl/views/download.phtml b/themes/bootstrap/templates/vudl/views/download.phtml
index 3c8ca9af5de..e93a2d18f7a 100644
--- a/themes/bootstrap/templates/vudl/views/download.phtml
+++ b/themes/bootstrap/templates/vudl/views/download.phtml
@@ -5,20 +5,29 @@
   };
 </script>
 <? if($this->counts[0] > 1): ?>
-	<div class="row-fluid btn-group visible-phone text-center">
-		<a href="javascript:prevPage()" class="btn">Prev Page</a>
-		<a href="javascript:nextPage()" class="btn">Next Page</a>
-		<br/><br/>
-	</div>
+  <div class="row-fluid btn-group visible-phone text-center">
+    <a href="javascript:prevPage()" class="btn">Prev Page</a>
+    <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
+    <a href="javascript:nextPage()" class="btn">Next Page</a>
+    <br/><br/>
+  </div>
 <? endif; ?>
 <ul class="nav nav-tabs">
-  <li class="active"><a href="#master" id="master-tab">Original</a></li>
-	<? if($this->counts[0] > 1): ?>
-		<div class="btn-group pull-right hidden-phone">
-			<a href="javascript:prevPage()" class="btn btn-small">Prev Page</a>
-			<a href="javascript:nextPage()" class="btn btn-small">Next Page</a>
-		</div>
-	<? endif; ?>
+  <li class="opener">
+    <a onClick="toggleSideNav()">
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+    </a>
+  </li>
+  <li class="active"><a href="#master" id="master-tab">Downloads</a></li>
+  <? if($this->counts[0] > 1): ?>
+    <div class="btn-group pull-right hidden-phone">
+      <a href="javascript:prevPage()" class="btn btn-small">Prev Page</a>
+      <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
+      <a href="javascript:nextPage()" class="btn btn-small">Next Page</a>
+    </div>
+  <? endif; ?>
 </ul>
 <div class="tab-container text-center tab-content">  
   <?=$this->context($this)->renderInContext('vudl/master-tab.phtml', array())?>
diff --git a/themes/bootstrap/templates/vudl/views/page.phtml b/themes/bootstrap/templates/vudl/views/page.phtml
index 47ed4703031..5e8fa4b3b98 100644
--- a/themes/bootstrap/templates/vudl/views/page.phtml
+++ b/themes/bootstrap/templates/vudl/views/page.phtml
@@ -35,7 +35,7 @@
   }
   
   $(document).ready(function() {
-    $('#view .nav-tabs li a').click(function (e) {
+    $('#view .nav-tabs li:not(.opener) a').click(function (e) {
       e.preventDefault();
       $(this).tab('show');
       currTab = $(this).attr('id');
@@ -51,24 +51,32 @@
       'mimetype' :'<?=$this->mimetype ?>'
     };
     updateFunction(pageData, 'medium-tab');
-    updateTechInfo(pageData['id'])
   });
 </script>
 <? if($this->counts[0] > 1): ?>
   <div class="row-fluid btn-group visible-phone text-center">
     <a href="javascript:prevPage()" class="btn">Prev Page</a>
+    <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
     <a href="javascript:nextPage()" class="btn">Next Page</a>
     <br/><br/>
   </div>
 <? endif; ?>
 <ul class="nav nav-tabs">
+  <li class="opener">
+    <a onClick="toggleSideNav()">
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+    </a>
+  </li>
   <li><a href="#image" id="medium-tab" onClick="showPreview('medium', this)">Medium</a></li>
   <li class="hidden-phone"><a href="#image" id="large-tab" onClick="showPreview('large', this)">Large</a></li>
   <li><a href="#zoom" id="zoom-tab" onClick="showZoom(this)">Zoom</a></li>
-  <li><a href="#master" id="master-tab">Original</a></li>
+  <li><a href="#master" id="master-tab">Downloads</a></li>
   <? if($this->counts[0] > 1): ?>
     <div class="btn-group pull-right hidden-phone">
       <a href="javascript:prevPage()" class="btn btn-small">Prev Page</a>
+      <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn btn-small grid-btn"><i class="icon-th"></i></a>
       <a href="javascript:nextPage()" class="btn btn-small">Next Page</a>
     </div>
   <? endif; ?>
diff --git a/themes/bootstrap/templates/vudl/views/video.phtml b/themes/bootstrap/templates/vudl/views/video.phtml
index 344c1683b94..50c283013ce 100644
--- a/themes/bootstrap/templates/vudl/views/video.phtml
+++ b/themes/bootstrap/templates/vudl/views/video.phtml
@@ -119,15 +119,24 @@
 <? if($this->counts[0] > 1): ?>
 	<div class="row-fluid btn-group visible-phone text-center">
 		<a href="javascript:prevPage()" class="btn">Prev Page</a>
+    <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
 		<a href="javascript:nextPage()" class="btn">Next Page</a>
 		<br/><br/>
 	</div>
 <? endif; ?>
 <ul class="nav nav-tabs">
-  <li class="active"><a>Original</a></li>
+  <li class="opener">
+    <a onClick="toggleSideNav()">
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+      <i class="icon-caret-right"></i>
+    </a>
+  </li>
+  <li class="active"><a>Downloads</a></li>
 	<? if($this->counts[0] > 1): ?>
 		<div class="btn-group pull-right hidden-phone">
 			<a href="javascript:prevPage()" class="btn btn-small">Prev Page</a>
+      <a href="<?=$this->url('vudl-grid', array('id'=>$this->id)) ?>" class="btn grid-btn"><i class="icon-th"></i></a>
 			<a href="javascript:nextPage()" class="btn btn-small">Next Page</a>
 		</div>
 	<? endif; ?>
diff --git a/themes/bootstrap/theme.config.php b/themes/bootstrap/theme.config.php
index b4d6fdfde0d..3ecae90a741 100644
--- a/themes/bootstrap/theme.config.php
+++ b/themes/bootstrap/theme.config.php
@@ -12,7 +12,7 @@ return array(
     ),
     'js' => array(
         'core/jquery.min.js',
-        'core/bootstrap.js',
+        'core/bootstrap.min.js',
         'common.js',
         'lightbox.js',
         'rc4.js'
-- 
GitLab