]> Shamusworld >> Repos - ardour-manual-diverged/blobdiff - _plugins/manual.rb
copy-edit chapter 19
[ardour-manual-diverged] / _plugins / manual.rb
index cde76c4b94504bfac0cfc455511f768dfef01b63..2a5d905b9ef590f41e33ac1f515cd1e78e53e773 100644 (file)
@@ -22,7 +22,7 @@ module Manual
 
   def self.traverse(path, directory_sort = false, paths = [], key_paths = [], &block)
 
-      entries = Dir.glob(File.join(path,'*'))
+      entries = Dir.glob(File.join(path,'*')).sort
 
       entries.sort_by! { |e| File.directory?(e) ? 1 : 0  } if directory_sort
 
@@ -63,7 +63,7 @@ module Manual
           end
 
           block_given? ? block.call(h) : h
-      end
+      end.compact
     end
 
     def self.extract_data(filename)
@@ -131,7 +131,13 @@ module Manual
           "<li><a href='#{child[:url]}'>#{child[:title]}</a></li>"
         end.uniq
 
-        "<ul>#{entries.join}</ul>"
+        "<div id='subtopics'>
+        <h2>This chapter covers the following topics:</h2>
+        <ul>
+          #{entries.join}
+        </ul>
+        </div>
+        "
       end
     end
   end
@@ -177,12 +183,16 @@ module Manual
       current_a = current.split('/').reject(&:empty?)
 
       tree = Manual.traverse_data(@@data_tree) do |entry|
-
+      
           url = entry[:url]
 
           url_a = url.split('/').reject(&:empty?)
 
+          depth = url_a.length
           is_current, position, level = *process_hierarchy(current_a, url_a)
+          
+          # this massively speeds up build time by not including the whole menu tree for each page
+          next if depth > 1 && current_a[0] != url_a[0]
 
           css_classes = []
           css_classes << 'active' if is_current
@@ -190,19 +200,21 @@ module Manual
           css_classes << "#{position}-#{level}" if position && level
           css_classes << 'other' unless is_current || position || level
 
-          css_classes << "level-#{url_a.length}"
+          css_classes << "level-#{depth}"
           css_classes = css_classes.join(' ')
 
           if entry[:type] == 'directory'
 
               erb = ::ERB.new <<-HTML
                   <dt class="<%= css_classes %>">
-                      <a name="<%= entry[:url] %>" href="<%= entry[:url] %>"><%= entry[:menu_title] %></a>
+                      <a href="<%= entry[:url] %>"><%= entry[:menu_title] %></a>
                   </dt>
                   <dd class="<%= css_classes %>">
-                      <dl>
-                          <%= entry[:children].join %> 
-                      </dl>
+                      <% if entry[:children].any? %>
+                        <dl>
+                            <%= entry[:children].join %> 
+                        </dl>
+                      <% end %>
                   </dd>
               HTML
 
@@ -215,7 +227,7 @@ module Manual
 
                 erb = ::ERB.new <<-HTML
                     <dt class="<%= css_classes %>">
-                        <a name="<%= entry[:url] %>" href="<%= entry[:url] %>"><%= entry[:menu_title] %></a>
+                        <a href="<%= entry[:url] %>"><%= entry[:menu_title] %></a>
                     </dt>
                     <dd class="<%= css_classes %>">
                     </dd>
@@ -224,9 +236,20 @@ module Manual
                 erb.result(binding)
              end
           end
+          
+         
       end
 
-      "<dl>#{tree.join}</dl>"
+      "<dl>#{tree.join}</dl>
+      <script type='text/javascript'>
+      //<![CDATA[
+        offset = document.getElementsByClassName('active')[0].offsetTop;
+        height = document.getElementById('tree').clientHeight;
+        if (offset > (height * .7)) {
+          tree.scrollTop = offset - height * .3;
+        }
+      //]]>
+      </script>"
 
     end