gollum-lib 5.0.a.4-java → 5.0.1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/README.md +12 -7
- data/Rakefile +7 -7
- data/adapter_dependencies.rb +7 -0
- data/gemspec.rb +18 -10
- data/gollum-lib.gemspec +2 -6
- data/gollum-lib_java.gemspec +2 -2
- data/lib/gollum-lib.rb +9 -9
- data/lib/gollum-lib/blob_entry.rb +2 -8
- data/lib/gollum-lib/committer.rb +22 -60
- data/lib/gollum-lib/file.rb +105 -82
- data/lib/gollum-lib/file_view.rb +8 -4
- data/lib/gollum-lib/filter.rb +12 -0
- data/lib/gollum-lib/filter/code.rb +9 -13
- data/lib/gollum-lib/filter/critic_markup.rb +97 -0
- data/lib/gollum-lib/filter/emoji.rb +10 -8
- data/lib/gollum-lib/filter/macro.rb +5 -2
- data/lib/gollum-lib/filter/plantuml.rb +1 -1
- data/lib/gollum-lib/filter/remote_code.rb +3 -2
- data/lib/gollum-lib/filter/render.rb +25 -2
- data/lib/gollum-lib/filter/sanitize.rb +1 -8
- data/lib/gollum-lib/filter/tags.rb +57 -47
- data/lib/gollum-lib/filter/toc.rb +17 -21
- data/lib/gollum-lib/filter/yaml.rb +1 -1
- data/lib/gollum-lib/git_access.rb +0 -25
- data/lib/gollum-lib/helpers.rb +13 -3
- data/lib/gollum-lib/macro/audio.rb +9 -0
- data/lib/gollum-lib/macro/global_toc.rb +2 -1
- data/lib/gollum-lib/macro/navigation.rb +8 -6
- data/lib/gollum-lib/macro/note.rb +19 -0
- data/lib/gollum-lib/macro/octicon.rb +12 -0
- data/lib/gollum-lib/macro/warn.rb +11 -0
- data/lib/gollum-lib/markup.rb +17 -32
- data/lib/gollum-lib/markups.rb +11 -7
- data/lib/gollum-lib/page.rb +79 -165
- data/lib/gollum-lib/pagination.rb +7 -6
- data/lib/gollum-lib/redirects.rb +38 -0
- data/lib/gollum-lib/sanitization.rb +32 -357
- data/lib/gollum-lib/version.rb +1 -1
- data/lib/gollum-lib/wiki.rb +216 -404
- metadata +125 -79
- data/ROADMAP +0 -6
| @@ -21,15 +21,14 @@ class Gollum::Filter::TOC < Gollum::Filter | |
| 21 21 | 
             
                    next if (i == 0 && header.name =~ /[Hh]1/) && @markup.wiki && @markup.wiki.h1_title
         | 
| 22 22 |  | 
| 23 23 | 
             
                    anchor_name = generate_anchor_name(header)
         | 
| 24 | 
            -
                    
         | 
| 25 24 | 
             
                    add_anchor_to_header header, anchor_name
         | 
| 26 25 | 
             
                    add_entry_to_toc     header, anchor_name
         | 
| 27 26 | 
             
                  end
         | 
| 28 27 | 
             
                  if not @toc_doc.nil?
         | 
| 29 | 
            -
                    toc_str = @toc_doc.to_xml(@markup.to_xml_opts)
         | 
| 28 | 
            +
                    toc_str = @toc_doc.to_xml(@markup.class.to_xml_opts)
         | 
| 30 29 | 
             
                  end
         | 
| 31 30 |  | 
| 32 | 
            -
                  data  = @doc.to_xml(@markup.to_xml_opts)
         | 
| 31 | 
            +
                  data  = @doc.to_xml(@markup.class.to_xml_opts)
         | 
| 33 32 | 
             
                end
         | 
| 34 33 |  | 
| 35 34 | 
             
                @markup.toc = toc_str
         | 
| @@ -51,7 +50,7 @@ class Gollum::Filter::TOC < Gollum::Filter | |
| 51 50 | 
             
                        e.remove
         | 
| 52 51 | 
             
                      end
         | 
| 53 52 | 
             
                    end
         | 
| 54 | 
            -
                    toc_clone.to_xml(@markup.to_xml_opts)
         | 
| 53 | 
            +
                    toc_clone.to_xml(@markup.class.to_xml_opts)
         | 
| 55 54 | 
             
                  end
         | 
| 56 55 | 
             
                end
         | 
| 57 56 |  | 
| @@ -60,9 +59,9 @@ class Gollum::Filter::TOC < Gollum::Filter | |
| 60 59 |  | 
| 61 60 | 
             
              private
         | 
| 62 61 |  | 
| 63 | 
            -
              # Generates the anchor name from the given header element | 
| 62 | 
            +
              # Generates the anchor name from the given header element
         | 
| 64 63 | 
             
              # removing all non alphanumeric characters, replacing them
         | 
| 65 | 
            -
              # with single dashes. | 
| 64 | 
            +
              # with single dashes.
         | 
| 66 65 | 
             
              #
         | 
| 67 66 | 
             
              # Generates heading ancestry prefixing the headings
         | 
| 68 67 | 
             
              # ancestor names to the generated name.
         | 
| @@ -70,31 +69,28 @@ class Gollum::Filter::TOC < Gollum::Filter | |
| 70 69 | 
             
              # Prefixes duplicate anchors with an index
         | 
| 71 70 | 
             
              def generate_anchor_name(header)
         | 
| 72 71 | 
             
                name = header.content
         | 
| 73 | 
            -
                level = header.name | 
| 72 | 
            +
                level = header.name[1..-1].to_i
         | 
| 74 73 |  | 
| 75 74 | 
             
                # normalize the header name
         | 
| 76 | 
            -
                name.gsub!(/[^\d\w\u00C0-\u1FFF\u2C00-\uD7FF]/,  | 
| 77 | 
            -
                name.gsub!(/-+/,  | 
| 78 | 
            -
                name.gsub!(/^-/,  | 
| 79 | 
            -
                name.gsub!(/-$/,  | 
| 75 | 
            +
                name.gsub!(/[^\d\w\u00C0-\u1FFF\u2C00-\uD7FF]/, '-')
         | 
| 76 | 
            +
                name.gsub!(/-+/, '-')
         | 
| 77 | 
            +
                name.gsub!(/^-/, '')
         | 
| 78 | 
            +
                name.gsub!(/-$/, '')
         | 
| 80 79 | 
             
                name.downcase!
         | 
| 81 80 |  | 
| 82 | 
            -
                @current_ancestors[level - 1] = name
         | 
| 83 | 
            -
                @current_ancestors = @current_ancestors.take(level)
         | 
| 84 | 
            -
                anchor_name = @current_ancestors.compact.join("_")
         | 
| 85 | 
            -
             | 
| 86 81 | 
             
                # Ensure duplicate anchors have a unique prefix or the toc will break
         | 
| 87 | 
            -
                index = increment_anchor_index( | 
| 88 | 
            -
                 | 
| 89 | 
            -
             | 
| 90 | 
            -
                anchor_name
         | 
| 82 | 
            +
                index = increment_anchor_index(name)
         | 
| 83 | 
            +
                index.zero? ? name : "#{name}-#{index}"
         | 
| 91 84 | 
             
              end
         | 
| 92 85 |  | 
| 93 86 | 
             
              # Creates an anchor element with the given name and adds it before
         | 
| 94 87 | 
             
              # the given header element.
         | 
| 95 88 | 
             
              def add_anchor_to_header(header, name)
         | 
| 96 | 
            -
                 | 
| 97 | 
            -
                 | 
| 89 | 
            +
                a = Nokogiri::XML::Node.new('a', @doc)
         | 
| 90 | 
            +
                a['class'] = 'anchor'
         | 
| 91 | 
            +
                a['id'] = name
         | 
| 92 | 
            +
                a['href'] = "##{name}"
         | 
| 93 | 
            +
                header.children.before(a) # Add anchor element before the header
         | 
| 98 94 | 
             
              end
         | 
| 99 95 |  | 
| 100 96 | 
             
              # Adds an entry to the TOC for the given header.  The generated entry
         | 
| @@ -10,7 +10,7 @@ class Gollum::Filter::YAML < Gollum::Filter | |
| 10 10 | 
             
                data.gsub!(YAML_FRONT_MATTER_REGEXP) do
         | 
| 11 11 | 
             
                  @markup.metadata ||= {}
         | 
| 12 12 | 
             
                  begin
         | 
| 13 | 
            -
                    frontmatter = ::YAML.safe_load( | 
| 13 | 
            +
                    frontmatter = ::YAML.safe_load(sanitize(Regexp.last_match[1]))
         | 
| 14 14 | 
             
                    @markup.metadata.merge!(frontmatter) if frontmatter.respond_to?(:keys) && frontmatter.respond_to?(:values)
         | 
| 15 15 | 
             
                  rescue ::Psych::SyntaxError, ::Psych::DisallowedClass, ::Psych::BadAlias => error
         | 
| 16 16 | 
             
                    @markup.metadata['errors'] ||= []
         | 
| @@ -218,30 +218,5 @@ module Gollum | |
| 218 218 | 
             
                  cache      = instance_variable_get("@#{name}_map")
         | 
| 219 219 | 
             
                  cache[key] = value || :_nil
         | 
| 220 220 | 
             
                end
         | 
| 221 | 
            -
             | 
| 222 | 
            -
                # Parses a line of output from the `ls-tree` command.
         | 
| 223 | 
            -
                #
         | 
| 224 | 
            -
                # line - A String line of output:
         | 
| 225 | 
            -
                #          "100644 blob 839c2291b30495b9a882c17d08254d3c90d8fb53  Home.md"
         | 
| 226 | 
            -
                #
         | 
| 227 | 
            -
                # Returns an Array of BlobEntry instances.
         | 
| 228 | 
            -
                def parse_tree_line(line)
         | 
| 229 | 
            -
                  mode, _type, sha, size, *name = line.split(/\s+/)
         | 
| 230 | 
            -
                  BlobEntry.new(sha, name.join(' '), size.to_i, mode.to_i(8))
         | 
| 231 | 
            -
                end
         | 
| 232 | 
            -
             | 
| 233 | 
            -
                # Decode octal sequences (\NNN) in tree path names.
         | 
| 234 | 
            -
                #
         | 
| 235 | 
            -
                # path - String path name.
         | 
| 236 | 
            -
                #
         | 
| 237 | 
            -
                # Returns a decoded String.
         | 
| 238 | 
            -
                def decode_git_path(path)
         | 
| 239 | 
            -
                  if path[0] == ?" && path[-1] == ?"
         | 
| 240 | 
            -
                    path = path[1...-1]
         | 
| 241 | 
            -
                    path.gsub!(/\\\d{3}/) { |m| m[1..-1].to_i(8).chr }
         | 
| 242 | 
            -
                  end
         | 
| 243 | 
            -
                  path.gsub!(/\\[rn"\\]/) { |m| eval(%("#{m}")) }
         | 
| 244 | 
            -
                  path
         | 
| 245 | 
            -
                end
         | 
| 246 221 | 
             
              end
         | 
| 247 222 | 
             
            end
         | 
    
        data/lib/gollum-lib/helpers.rb
    CHANGED
    
    | @@ -1,13 +1,23 @@ | |
| 1 1 | 
             
            # ~*~ encoding: utf-8 ~*~
         | 
| 2 | 
            +
             | 
| 2 3 | 
             
            module Gollum
         | 
| 3 4 | 
             
              module Helpers
         | 
| 4 | 
            -
             | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 5 | 
            +
                
         | 
| 6 | 
            +
                # If url starts with a leading slash, trim down its number of leading slashes to 1. Else, return url unchanged.
         | 
| 7 | 
            +
                def trim_leading_slashes(url)
         | 
| 8 | 
            +
                  return nil if url.nil?
         | 
| 7 9 | 
             
                  url.gsub!('%2F', '/')
         | 
| 8 10 | 
             
                  return '/' + url.gsub(/^\/+/, '') if url[0, 1] == '/'
         | 
| 9 11 | 
             
                  url
         | 
| 10 12 | 
             
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                # Take a link path and turn it into a string for display as link text.
         | 
| 15 | 
            +
                # For example:
         | 
| 16 | 
            +
                # '/opt/local/bin/ruby.ext' -> 'ruby'
         | 
| 17 | 
            +
                def path_to_link_text(str)
         | 
| 18 | 
            +
                  return nil unless str
         | 
| 19 | 
            +
                  ::File.basename(str, ::File.extname(str))
         | 
| 20 | 
            +
                end
         | 
| 11 21 |  | 
| 12 22 | 
             
              end
         | 
| 13 23 | 
             
            end
         | 
| @@ -3,7 +3,8 @@ module Gollum | |
| 3 3 | 
             
                class GlobalTOC < Gollum::Macro
         | 
| 4 4 | 
             
                  def render(title = "Global Table of Contents")
         | 
| 5 5 | 
             
                    if @wiki.pages.size > 0
         | 
| 6 | 
            -
                       | 
| 6 | 
            +
                      prepath = @wiki.base_path.sub(/\/$/, '')
         | 
| 7 | 
            +
                      result  = '<ul>' + @wiki.pages.map { |p| "<li><a href=\"#{prepath}/#{p.escaped_url_path}\">#{p.url_path}</a></li>" }.join + '</ul>'
         | 
| 7 8 | 
             
                    end
         | 
| 8 9 | 
             
                    "<div class=\"toc\"><div class=\"toc-title\">#{title}</div>#{result}</div>"
         | 
| 9 10 | 
             
                  end
         | 
| @@ -2,12 +2,14 @@ module Gollum | |
| 2 2 | 
             
              class Macro
         | 
| 3 3 | 
             
                class Navigation < Gollum::Macro
         | 
| 4 4 |  | 
| 5 | 
            -
                  def render(title = "Navigate  | 
| 6 | 
            -
                     | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 5 | 
            +
                  def render(title = "Navigate this directory", toc_root_path = ::File.dirname(@page.url_path), full_path = false)
         | 
| 6 | 
            +
                    pages = @wiki.pages
         | 
| 7 | 
            +
                    if pages.size > 0
         | 
| 8 | 
            +
                      prepath=@wiki.base_path.sub(/\/$/, '')
         | 
| 9 | 
            +
                      list_items = pages.map do |page|
         | 
| 10 | 
            +
                        if toc_root_path == '.' || page.url_path =~ /^#{toc_root_path}\//
         | 
| 11 | 
            +
                          path_display = (full_path || toc_root_path == '.') ? page.url_path  : page.url_path.sub(/^#{toc_root_path}\//,"").sub(/^\//,'')
         | 
| 12 | 
            +
                          "<li><a href=\"#{prepath}/#{page.escaped_url_path}\">#{path_display}</a></li>"
         | 
| 11 13 | 
             
                        end
         | 
| 12 14 | 
             
                      end
         | 
| 13 15 | 
             
                      result = "<ul>#{list_items.join}</ul>"
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Gollum
         | 
| 2 | 
            +
              class Macro
         | 
| 3 | 
            +
                class Note < Gollum::Macro
         | 
| 4 | 
            +
                  def render(notice, octicon = 'info')
         | 
| 5 | 
            +
                    icon = ""
         | 
| 6 | 
            +
                    unless octicon.empty?
         | 
| 7 | 
            +
                      begin
         | 
| 8 | 
            +
                        icon = Octicons::Octicon.new(octicon, {width: 24, height: 24})
         | 
| 9 | 
            +
                      rescue RuntimeError
         | 
| 10 | 
            +
                        icon = Octicons::Octicon.new('info', {width: 24, height: 24})
         | 
| 11 | 
            +
                      end
         | 
| 12 | 
            +
                      icon.options[:class] << ' mr-2'
         | 
| 13 | 
            +
                      icon = icon.to_svg
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                    "<div class='flash'>#{icon}#{notice}</div>"
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            module Gollum
         | 
| 2 | 
            +
              class Macro
         | 
| 3 | 
            +
                class Octicon < Gollum::Macro
         | 
| 4 | 
            +
                  def render(symbol, height = nil, width = nil)
         | 
| 5 | 
            +
                    parameters = {}
         | 
| 6 | 
            +
                    parameters[:height] = height if height
         | 
| 7 | 
            +
                    parameters[:width]  = width if width
         | 
| 8 | 
            +
                    "<div>#{Octicons::Octicon.new(symbol, parameters).to_svg}</div>"
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module Gollum
         | 
| 2 | 
            +
              class Macro
         | 
| 3 | 
            +
                class Warn < Gollum::Macro
         | 
| 4 | 
            +
                  def render(warning)
         | 
| 5 | 
            +
                    icon = Octicons::Octicon.new('alert', {width: 24, height: 24})
         | 
| 6 | 
            +
                    icon.options[:class] << ' mr-2'
         | 
| 7 | 
            +
                    "<div class='flash flash-warn'>#{icon.to_svg}#{warning}</div>"
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
    
        data/lib/gollum-lib/markup.rb
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            # ~*~ encoding: utf-8 ~*~
         | 
| 2 2 | 
             
            require 'digest/sha1'
         | 
| 3 | 
            -
            require 'cgi'
         | 
| 4 3 | 
             
            require 'rouge'
         | 
| 5 4 | 
             
            require 'base64'
         | 
| 6 5 |  | 
| @@ -23,6 +22,10 @@ module Gollum | |
| 23 22 |  | 
| 24 23 | 
             
                class << self
         | 
| 25 24 |  | 
| 25 | 
            +
                  def to_xml_opts
         | 
| 26 | 
            +
                    { :save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML ^ 1, :indent => 0, :encoding => 'UTF-8' }
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 26 29 | 
             
                  # Only use the formats that are specified in config.rb
         | 
| 27 30 | 
             
                  def formats
         | 
| 28 31 | 
             
                    if defined? Gollum::Page::FORMAT_NAMES
         | 
| @@ -66,7 +69,6 @@ module Gollum | |
| 66 69 | 
             
                attr_accessor :toc
         | 
| 67 70 | 
             
                attr_accessor :metadata
         | 
| 68 71 | 
             
                attr_reader :encoding
         | 
| 69 | 
            -
                attr_reader :sanitize
         | 
| 70 72 | 
             
                attr_reader :format
         | 
| 71 73 | 
             
                attr_reader :wiki
         | 
| 72 74 | 
             
                attr_reader :page
         | 
| @@ -74,8 +76,8 @@ module Gollum | |
| 74 76 | 
             
                attr_reader :sub_page
         | 
| 75 77 | 
             
                attr_reader :name
         | 
| 76 78 | 
             
                attr_reader :include_levels
         | 
| 77 | 
            -
                attr_reader :to_xml_opts
         | 
| 78 79 | 
             
                attr_reader :dir
         | 
| 80 | 
            +
                attr_reader :historical
         | 
| 79 81 |  | 
| 80 82 | 
             
                # Initialize a new Markup object.
         | 
| 81 83 | 
             
                #
         | 
| @@ -91,9 +93,8 @@ module Gollum | |
| 91 93 | 
             
                  @sub_page    = page.sub_page
         | 
| 92 94 | 
             
                  @parent_page = page.parent_page
         | 
| 93 95 | 
             
                  @page        = page
         | 
| 94 | 
            -
                  @dir         = ::File.dirname(page. | 
| 96 | 
            +
                  @dir         = ::File.dirname("/#{@page.url_path}")
         | 
| 95 97 | 
             
                  @metadata    = nil
         | 
| 96 | 
            -
                  @to_xml_opts = { :save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML ^ 1, :indent => 0, :encoding => 'UTF-8' }
         | 
| 97 98 | 
             
                end
         | 
| 98 99 |  | 
| 99 100 | 
             
                # Whether or not this markup's format uses reversed-order links ([description | url] rather than [url | description]). Defaults to false.
         | 
| @@ -124,6 +125,11 @@ module Gollum | |
| 124 125 | 
             
                    data = filter.extract(data)
         | 
| 125 126 | 
             
                  end
         | 
| 126 127 |  | 
| 128 | 
            +
                  # Since the last 'extract' action in our chain *should* be the markup
         | 
| 129 | 
            +
                  # to HTML converter, we now have HTML which we can parse and yield, for
         | 
| 130 | 
            +
                  # anyone who wants it
         | 
| 131 | 
            +
                  yield Nokogiri::HTML::DocumentFragment.parse(data) if block_given?
         | 
| 132 | 
            +
             | 
| 127 133 | 
             
                  # Then we process the data through the chain *backwards*
         | 
| 128 134 | 
             
                  filter_chain.reverse.each do |filter|
         | 
| 129 135 | 
             
                    data = filter.process(data)
         | 
| @@ -133,48 +139,27 @@ module Gollum | |
| 133 139 | 
             
                end
         | 
| 134 140 |  | 
| 135 141 | 
             
                # Render the content with Gollum wiki syntax on top of the file's own
         | 
| 136 | 
            -
                # markup language.
         | 
| 142 | 
            +
                # markup language. Takes an optional block that will be executed after
         | 
| 143 | 
            +
                # the markup rendering step in the filter chain.
         | 
| 137 144 | 
             
                #
         | 
| 138 145 | 
             
                # no_follow - Boolean that determines if rel="nofollow" is added to all
         | 
| 139 146 | 
             
                #             <a> tags.
         | 
| 140 147 | 
             
                # encoding  - Encoding Constant or String.
         | 
| 141 148 | 
             
                #
         | 
| 142 149 | 
             
                # Returns the formatted String content.
         | 
| 143 | 
            -
                def render(no_follow = false, encoding = nil, include_levels = 10)
         | 
| 144 | 
            -
                  @ | 
| 145 | 
            -
             | 
| 150 | 
            +
                def render(no_follow = false, encoding = nil, include_levels = 10, &block)
         | 
| 151 | 
            +
                  @historical     = no_follow
         | 
| 146 152 | 
             
                  @encoding       = encoding
         | 
| 147 153 | 
             
                  @include_levels = include_levels
         | 
| 148 154 |  | 
| 149 | 
            -
                  data | 
| 155 | 
            +
                  data = @data.dup
         | 
| 150 156 |  | 
| 151 157 | 
             
                  filter_chain = @wiki.filter_chain.reject {|filter| skip_filter?(filter)}
         | 
| 152 158 | 
             
                  filter_chain.map! do |filter_sym|
         | 
| 153 159 | 
             
                    Gollum::Filter.const_get(filter_sym).new(self)
         | 
| 154 160 | 
             
                  end
         | 
| 155 161 |  | 
| 156 | 
            -
                   | 
| 157 | 
            -
                  # to HTML converter, we now have HTML which we can parse and yield, for
         | 
| 158 | 
            -
                  # anyone who wants it
         | 
| 159 | 
            -
                  if block_given?
         | 
| 160 | 
            -
                    yield Nokogiri::HTML::DocumentFragment.parse(data)
         | 
| 161 | 
            -
                  end
         | 
| 162 | 
            -
             | 
| 163 | 
            -
                  process_chain data, filter_chain
         | 
| 164 | 
            -
                end
         | 
| 165 | 
            -
             | 
| 166 | 
            -
                # Find the given file in the repo.
         | 
| 167 | 
            -
                #
         | 
| 168 | 
            -
                # name - The String absolute or relative path of the file.
         | 
| 169 | 
            -
                #
         | 
| 170 | 
            -
                # Returns the Gollum::File or nil if none was found.
         | 
| 171 | 
            -
                def find_file(name, version=@version)
         | 
| 172 | 
            -
                  if name =~ /^\//
         | 
| 173 | 
            -
                    @wiki.file(name[1..-1], version)
         | 
| 174 | 
            -
                  else
         | 
| 175 | 
            -
                    path = @dir == '.' ? name : ::File.join(@dir, name)
         | 
| 176 | 
            -
                    @wiki.file(path, version)
         | 
| 177 | 
            -
                  end
         | 
| 162 | 
            +
                  process_chain(data, filter_chain, &block)
         | 
| 178 163 | 
             
                end
         | 
| 179 164 |  | 
| 180 165 | 
             
                # Hook for getting the formatted value of extracted tag data.
         | 
    
        data/lib/gollum-lib/markups.rb
    CHANGED
    
    | @@ -55,12 +55,16 @@ end | |
| 55 55 |  | 
| 56 56 | 
             
            module Gollum
         | 
| 57 57 | 
             
              class Markup
         | 
| 58 | 
            -
                 | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
                 | 
| 58 | 
            +
                if gem_exists?('pandoc-ruby')
         | 
| 59 | 
            +
                  GitHub::Markup::Markdown::MARKDOWN_GEMS.delete('kramdown')
         | 
| 60 | 
            +
                  GitHub::Markup::Markdown::MARKDOWN_GEMS['pandoc-ruby'] = proc { |content|
         | 
| 61 | 
            +
                      PandocRuby.convert(content, :from => :markdown, :to => :html, :filter => 'pandoc-citeproc')
         | 
| 62 | 
            +
                  }
         | 
| 63 | 
            +
                else
         | 
| 64 | 
            +
                  GitHub::Markup::Markdown::MARKDOWN_GEMS['kramdown'] = proc { |content|
         | 
| 65 | 
            +
                      Kramdown::Document.new(content, :input => "GFM", :hard_wrap => 'false', :auto_ids => false, :math_engine => nil, :smart_quotes => ["'", "'", '"', '"'].map{|char| char.codepoints.first}).to_html
         | 
| 66 | 
            +
                  }
         | 
| 67 | 
            +
                end
         | 
| 64 68 |  | 
| 65 69 | 
             
                # markdown, rdoc, and plain text are always supported.
         | 
| 66 70 | 
             
                register(:markdown, "Markdown", :extensions => ['md','mkd','mkdn','mdown','markdown'])
         | 
| @@ -76,7 +80,7 @@ module Gollum | |
| 76 80 | 
             
                register(:creole, "Creole",
         | 
| 77 81 | 
             
                         :enabled => MarkupRegisterUtils::gem_exists?("creole"),
         | 
| 78 82 | 
             
                         :reverse_links => true)
         | 
| 79 | 
            -
                register(: | 
| 83 | 
            +
                register(:rst, "reStructuredText",
         | 
| 80 84 | 
             
                         :enabled => MarkupRegisterUtils::executable_exists?("python2"),
         | 
| 81 85 | 
             
                         :extensions => ['rest', 'rst'])
         | 
| 82 86 | 
             
                register(:asciidoc, "AsciiDoc",
         | 
    
        data/lib/gollum-lib/page.rb
    CHANGED
    
    | @@ -1,21 +1,28 @@ | |
| 1 1 | 
             
            # ~*~ encoding: utf-8 ~*~
         | 
| 2 2 | 
             
            module Gollum
         | 
| 3 | 
            -
              class Page
         | 
| 3 | 
            +
              class Page < Gollum::File
         | 
| 4 4 | 
             
                include Pagination
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                Wiki.page_class = self
         | 
| 7 5 |  | 
| 8 6 | 
             
                SUBPAGENAMES = [:header, :footer, :sidebar]
         | 
| 9 | 
            -
                
         | 
| 10 | 
            -
                # Sets a Boolean determing whether this page is a historical version.
         | 
| 11 | 
            -
                #
         | 
| 12 | 
            -
                # Returns nothing.
         | 
| 13 | 
            -
                attr_writer :historical
         | 
| 14 7 |  | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 8 | 
            +
                class << self
         | 
| 9 | 
            +
                  # For use with self.find: returns true if the given query corresponds to the in-repo path of the BlobEntry. 
         | 
| 10 | 
            +
                  #
         | 
| 11 | 
            +
                  # query     - The String path to match.
         | 
| 12 | 
            +
                  # entry     - The BlobEntry to check against.
         | 
| 13 | 
            +
                  # global_match - If true, find a File matching path's filename, but not its directory (so anywhere in the repo)
         | 
| 14 | 
            +
                  def path_match(query, entry, global_match = false, hyphened_tags = false, case_insensitive = false)
         | 
| 15 | 
            +
                    return false if "#{entry.name}".empty?
         | 
| 16 | 
            +
                    return false unless valid_extension?(entry.name)
         | 
| 17 | 
            +
                    entry_name = valid_extension?(query) ? entry.name : strip_filename(entry.name)     
         | 
| 18 | 
            +
                    match_path = ::File.join([
         | 
| 19 | 
            +
                      '/',
         | 
| 20 | 
            +
                      global_match ? nil : entry.dir,
         | 
| 21 | 
            +
                    entry_name
         | 
| 22 | 
            +
                    ].compact)
         | 
| 23 | 
            +
                    path_compare(query, match_path, hyphened_tags, case_insensitive)
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 19 26 |  | 
| 20 27 | 
             
                # Checks if a filename has a valid, registered extension
         | 
| 21 28 | 
             
                #
         | 
| @@ -27,14 +34,14 @@ module Gollum | |
| 27 34 | 
             
                end
         | 
| 28 35 |  | 
| 29 36 | 
             
                # Checks if a filename has a valid extension understood by GitHub::Markup.
         | 
| 30 | 
            -
                # Also, checks if the filename  | 
| 31 | 
            -
                # _Footer.md).
         | 
| 37 | 
            +
                # Also, checks if the filename is subpages (such as _Footer.md).
         | 
| 32 38 | 
             
                #
         | 
| 33 39 | 
             
                # filename - String filename, like "Home.md".
         | 
| 34 40 | 
             
                #
         | 
| 35 41 | 
             
                # Returns true or false.
         | 
| 36 42 | 
             
                def self.valid_page_name?(filename)
         | 
| 37 | 
            -
                   | 
| 43 | 
            +
                  subpage_names = SUBPAGENAMES.map(&:capitalize).join("|")
         | 
| 44 | 
            +
                  filename =~ /^_(#{subpage_names})/ ? false : self.valid_extension?(filename)
         | 
| 38 45 | 
             
                end
         | 
| 39 46 |  | 
| 40 47 | 
             
                # Public: The format of a given filename.
         | 
| @@ -59,32 +66,27 @@ module Gollum | |
| 59 66 | 
             
                  ::File.basename(filename.to_s, ::File.extname(filename.to_s))
         | 
| 60 67 | 
             
                end
         | 
| 61 68 |  | 
| 62 | 
            -
                # Public: Initialize a  | 
| 69 | 
            +
                # Public: Initialize a Page.
         | 
| 63 70 | 
             
                #
         | 
| 64 | 
            -
                # wiki - The Gollum::Wiki | 
| 71 | 
            +
                # wiki - The Gollum::Wiki
         | 
| 72 | 
            +
                # blob - The Gollum::Git::Blob
         | 
| 73 | 
            +
                # path - The String path
         | 
| 74 | 
            +
                # version - The String SHA or Gollum::Git::Commit version
         | 
| 75 | 
            +
                # try_on_disk - If true, try to get an on disk reference for this page.
         | 
| 65 76 | 
             
                #
         | 
| 66 77 | 
             
                # Returns a newly initialized Gollum::Page.
         | 
| 67 | 
            -
                def initialize(wiki)
         | 
| 68 | 
            -
                   | 
| 69 | 
            -
                  @blob           = nil
         | 
| 78 | 
            +
                def initialize(wiki, blob, path, version, try_on_disk = false)
         | 
| 79 | 
            +
                  super
         | 
| 70 80 | 
             
                  @formatted_data = nil
         | 
| 71 81 | 
             
                  @doc            = nil
         | 
| 72 82 | 
             
                  @parent_page    = nil
         | 
| 83 | 
            +
                  @historical     = @version.to_s == version.to_s
         | 
| 73 84 | 
             
                end
         | 
| 74 85 |  | 
| 75 | 
            -
                #  | 
| 76 | 
            -
                #
         | 
| 77 | 
            -
                # Returns the String SHA.
         | 
| 78 | 
            -
                def sha
         | 
| 79 | 
            -
                  @blob && @blob.id
         | 
| 80 | 
            -
                end
         | 
| 81 | 
            -
             | 
| 82 | 
            -
                # Public: The on-disk filename of the page including extension.
         | 
| 86 | 
            +
                # Parent page if this is a sub page
         | 
| 83 87 | 
             
                #
         | 
| 84 | 
            -
                # Returns  | 
| 85 | 
            -
                 | 
| 86 | 
            -
                  @blob && @blob.name
         | 
| 87 | 
            -
                end
         | 
| 88 | 
            +
                # Returns a Page
         | 
| 89 | 
            +
                attr_accessor :parent_page
         | 
| 88 90 |  | 
| 89 91 | 
             
                # Public: The on-disk filename of the page with extension stripped.
         | 
| 90 92 | 
             
                #
         | 
| @@ -105,7 +107,7 @@ module Gollum | |
| 105 107 | 
             
                #
         | 
| 106 108 | 
             
                # Returns the fully sanitized String title.
         | 
| 107 109 | 
             
                def title
         | 
| 108 | 
            -
                   | 
| 110 | 
            +
                  @wiki.sanitizer.clean(name).strip
         | 
| 109 111 | 
             
                end
         | 
| 110 112 |  | 
| 111 113 | 
             
                # Public: Determines if this is a sub-page
         | 
| @@ -116,30 +118,11 @@ module Gollum | |
| 116 118 | 
             
                  filename =~ /^_/
         | 
| 117 119 | 
             
                end
         | 
| 118 120 |  | 
| 119 | 
            -
                # Public: The path of the page within the repo.
         | 
| 120 | 
            -
                #
         | 
| 121 | 
            -
                # Returns the String path.
         | 
| 122 | 
            -
                attr_reader :path
         | 
| 123 | 
            -
             | 
| 124 | 
            -
                # Public: The url path required to reach this page within the repo.
         | 
| 125 | 
            -
                #
         | 
| 126 | 
            -
                # Returns the String url_path
         | 
| 127 | 
            -
                def url_path
         | 
| 128 | 
            -
                  construct_path(filename)
         | 
| 129 | 
            -
                end
         | 
| 130 | 
            -
             | 
| 131 121 | 
             
                # Public: Defines title for page.rb
         | 
| 132 122 | 
             
                #
         | 
| 133 123 | 
             
                # Returns the String title
         | 
| 134 124 | 
             
                def url_path_title
         | 
| 135 | 
            -
                  metadata_title ||  | 
| 136 | 
            -
                end
         | 
| 137 | 
            -
             | 
| 138 | 
            -
                # Public: The url_path, but CGI escaped.
         | 
| 139 | 
            -
                #
         | 
| 140 | 
            -
                # Returns the String url_path
         | 
| 141 | 
            -
                def escaped_url_path
         | 
| 142 | 
            -
                  CGI.escape(self.url_path).gsub('%2F', '/')
         | 
| 125 | 
            +
                  metadata_title || name
         | 
| 143 126 | 
             
                end
         | 
| 144 127 |  | 
| 145 128 | 
             
                # Public: Metadata title
         | 
| @@ -148,35 +131,16 @@ module Gollum | |
| 148 131 | 
             
                #
         | 
| 149 132 | 
             
                # Returns the String title or nil if not defined
         | 
| 150 133 | 
             
                def metadata_title
         | 
| 151 | 
            -
                   | 
| 152 | 
            -
                    title = metadata['title']
         | 
| 153 | 
            -
                    return title unless title.nil?
         | 
| 154 | 
            -
                  end
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                  nil
         | 
| 134 | 
            +
                  metadata ? metadata['title'] : nil
         | 
| 157 135 | 
             
                end
         | 
| 158 136 |  | 
| 159 137 | 
             
                # Public: Whether or not to display the metadata
         | 
| 160 138 | 
             
                def display_metadata?
         | 
| 161 | 
            -
                  return false if  | 
| 139 | 
            +
                  return false if (metadata.keys - ['title', 'header_enum']).empty?
         | 
| 162 140 | 
             
                  return false if metadata['display_metadata'] == false
         | 
| 163 141 | 
             
                  @wiki.display_metadata
         | 
| 164 142 | 
             
                end
         | 
| 165 143 |  | 
| 166 | 
            -
                # Public: The raw contents of the page.
         | 
| 167 | 
            -
                #
         | 
| 168 | 
            -
                # Returns the String data.
         | 
| 169 | 
            -
                def raw_data
         | 
| 170 | 
            -
                  return nil unless @blob
         | 
| 171 | 
            -
             | 
| 172 | 
            -
                  if !@wiki.repo.bare && @blob.is_symlink
         | 
| 173 | 
            -
                    new_path = @blob.symlink_target(::File.join(@wiki.repo.path, '..', self.path))
         | 
| 174 | 
            -
                    return IO.read(new_path) if new_path
         | 
| 175 | 
            -
                  end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                  @blob.data
         | 
| 178 | 
            -
                end
         | 
| 179 | 
            -
             | 
| 180 144 | 
             
                # Public: A text data encoded in specified encoding.
         | 
| 181 145 | 
             
                #
         | 
| 182 146 | 
             
                # encoding - An Encoding or nil
         | 
| @@ -225,8 +189,12 @@ module Gollum | |
| 225 189 | 
             
                #
         | 
| 226 190 | 
             
                # Returns Hash of metadata.
         | 
| 227 191 | 
             
                def metadata
         | 
| 228 | 
            -
                   | 
| 229 | 
            -
             | 
| 192 | 
            +
                  unless @metadata
         | 
| 193 | 
            +
                    formatted_data if markup.metadata == nil
         | 
| 194 | 
            +
                    @metadata = @wiki.metadata.merge(markup.metadata || {})
         | 
| 195 | 
            +
                  else
         | 
| 196 | 
            +
                    @metadata
         | 
| 197 | 
            +
                  end
         | 
| 230 198 | 
             
                end
         | 
| 231 199 |  | 
| 232 200 | 
             
                # Public: The format of the page.
         | 
| @@ -240,20 +208,15 @@ module Gollum | |
| 240 208 | 
             
                #
         | 
| 241 209 | 
             
                # Returns a Gollum::Markup instance.
         | 
| 242 210 | 
             
                def markup
         | 
| 243 | 
            -
                  @markup ||=  | 
| 211 | 
            +
                  @markup ||= ::Gollum::Markup.new(self)
         | 
| 244 212 | 
             
                end
         | 
| 245 213 |  | 
| 246 | 
            -
                # Public: The current version of the page.
         | 
| 247 | 
            -
                #
         | 
| 248 | 
            -
                # Returns the Gollum::Git::Commit.
         | 
| 249 | 
            -
                attr_reader :version
         | 
| 250 | 
            -
             | 
| 251 214 | 
             
                # Public: All of the versions that have touched the Page.
         | 
| 252 215 | 
             
                #
         | 
| 253 216 | 
             
                # options - The options Hash:
         | 
| 254 | 
            -
                #           : | 
| 255 | 
            -
                #           :per_page | 
| 256 | 
            -
                #           :follow | 
| 217 | 
            +
                #           :page_num  - The Integer page number (default: 1).
         | 
| 218 | 
            +
                #           :per_page  - The Integer max count of items to return.
         | 
| 219 | 
            +
                #           :follow    - Follow's a file across renames, slower.  (default: false)
         | 
| 257 220 | 
             
                #
         | 
| 258 221 | 
             
                # Returns an Array of Gollum::Git::Commit.
         | 
| 259 222 | 
             
                def versions(options = {})
         | 
| @@ -317,77 +280,11 @@ module Gollum | |
| 317 280 | 
             
                  format == :markdown ? "md" : format.to_s
         | 
| 318 281 | 
             
                end
         | 
| 319 282 |  | 
| 320 | 
            -
                #########################################################################
         | 
| 321 | 
            -
                #
         | 
| 322 | 
            -
                # Internal Methods
         | 
| 323 | 
            -
                #
         | 
| 324 | 
            -
                #########################################################################
         | 
| 325 | 
            -
             | 
| 326 283 | 
             
                # The underlying wiki repo.
         | 
| 327 284 | 
             
                #
         | 
| 328 285 | 
             
                # Returns the Gollum::Wiki containing the page.
         | 
| 329 286 | 
             
                attr_reader :wiki
         | 
| 330 287 |  | 
| 331 | 
            -
                # Set the Gollum::Git::Commit version of the page.
         | 
| 332 | 
            -
                #
         | 
| 333 | 
            -
                # Returns nothing.
         | 
| 334 | 
            -
                attr_writer :version
         | 
| 335 | 
            -
             | 
| 336 | 
            -
                # Find a page in the given Gollum repo.
         | 
| 337 | 
            -
                #
         | 
| 338 | 
            -
                # name    - The human or canonical String page name to find.
         | 
| 339 | 
            -
                # version - The String version ID to find.
         | 
| 340 | 
            -
                #
         | 
| 341 | 
            -
                # Returns a Gollum::Page or nil if the page could not be found.
         | 
| 342 | 
            -
                def find(name, version, dir = nil, exact = false)
         | 
| 343 | 
            -
                  map = @wiki.tree_map_for(version.to_s)
         | 
| 344 | 
            -
                  if (page = find_page_in_tree(map, name, dir, exact))
         | 
| 345 | 
            -
                    page.version    = version.is_a?(Gollum::Git::Commit) ?
         | 
| 346 | 
            -
                        version : @wiki.commit_for(version)
         | 
| 347 | 
            -
                    page.historical = page.version.to_s == version.to_s
         | 
| 348 | 
            -
                    page
         | 
| 349 | 
            -
                  end
         | 
| 350 | 
            -
                rescue Gollum::Git::NoSuchShaFound
         | 
| 351 | 
            -
                end
         | 
| 352 | 
            -
             | 
| 353 | 
            -
                # Find a page in a given tree.
         | 
| 354 | 
            -
                #
         | 
| 355 | 
            -
                # map         - The Array tree map from Wiki#tree_map.
         | 
| 356 | 
            -
                # name        - The canonical String page name.
         | 
| 357 | 
            -
                # checked_dir - Optional String of the directory a matching page needs
         | 
| 358 | 
            -
                #               to be in.  The string should
         | 
| 359 | 
            -
                #
         | 
| 360 | 
            -
                # Returns a Gollum::Page or nil if the page could not be found.
         | 
| 361 | 
            -
                def find_page_in_tree(map, name, checked_dir = nil, exact = false)
         | 
| 362 | 
            -
                  return nil if !map || name.to_s.empty?
         | 
| 363 | 
            -
             | 
| 364 | 
            -
                  checked_dir = BlobEntry.normalize_dir(checked_dir)
         | 
| 365 | 
            -
                  checked_dir = '' if exact && checked_dir.nil?
         | 
| 366 | 
            -
                  query       = checked_dir ? ::File.join(checked_dir, name) : name
         | 
| 367 | 
            -
             | 
| 368 | 
            -
                  map.each do |entry|
         | 
| 369 | 
            -
                    next if entry.name.to_s.empty? || !self.class.valid_extension?(entry.name)
         | 
| 370 | 
            -
                    entry_name =  ::File.extname(name).empty? ? ::Gollum::Page.strip_filename(entry.name) : entry.name
         | 
| 371 | 
            -
                    path = checked_dir ? ::File.join(entry.dir, entry_name) : entry_name
         | 
| 372 | 
            -
                    next unless query.downcase == path.downcase
         | 
| 373 | 
            -
                    return entry.page(@wiki, @version)
         | 
| 374 | 
            -
                  end
         | 
| 375 | 
            -
             | 
| 376 | 
            -
                  return nil # nothing was found
         | 
| 377 | 
            -
                end
         | 
| 378 | 
            -
             | 
| 379 | 
            -
                # Populate the Page with information from the Blob.
         | 
| 380 | 
            -
                #
         | 
| 381 | 
            -
                # blob - The Gollum::Git::Blob that contains the info.
         | 
| 382 | 
            -
                # path - The String directory path of the page file.
         | 
| 383 | 
            -
                #
         | 
| 384 | 
            -
                # Returns the populated Gollum::Page.
         | 
| 385 | 
            -
                def populate(blob, path=nil)
         | 
| 386 | 
            -
                  @blob = blob
         | 
| 387 | 
            -
                  @path = "#{path}/#{blob.name}"[1..-1]
         | 
| 388 | 
            -
                  self
         | 
| 389 | 
            -
                end
         | 
| 390 | 
            -
             | 
| 391 288 | 
             
                # The full directory path for the given tree.
         | 
| 392 289 | 
             
                #
         | 
| 393 290 | 
             
                # treemap - The Hash treemap containing parentage information.
         | 
| @@ -396,7 +293,7 @@ module Gollum | |
| 396 293 | 
             
                # Returns the String path.
         | 
| 397 294 | 
             
                def tree_path(treemap, tree)
         | 
| 398 295 | 
             
                  if (ptree = treemap[tree])
         | 
| 399 | 
            -
                    tree_path(treemap, ptree) | 
| 296 | 
            +
                    "#{tree_path(treemap, ptree)}#{::File::SEPARATOR}#{tree.name}"
         | 
| 400 297 | 
             
                  else
         | 
| 401 298 | 
             
                    ''
         | 
| 402 299 | 
             
                  end
         | 
| @@ -409,7 +306,7 @@ module Gollum | |
| 409 306 | 
             
                def find_sub_pages(subpagenames = SUBPAGENAMES, map = nil)
         | 
| 410 307 | 
             
                  subpagenames.each{|subpagename| instance_variable_set("@#{subpagename}", nil)}
         | 
| 411 308 | 
             
                  return nil if self.filename =~ /^_/ || ! self.version
         | 
| 412 | 
            -
             | 
| 309 | 
            +
             | 
| 413 310 | 
             
                  map ||= @wiki.tree_map_for(@wiki.ref, true)
         | 
| 414 311 | 
             
                  valid_names = subpagenames.map(&:capitalize).join("|")
         | 
| 415 312 | 
             
                  # From Ruby 2.2 onwards map.select! could be used
         | 
| @@ -425,34 +322,51 @@ module Gollum | |
| 425 322 | 
             
                        searchpath = dir == Pathname.new('.') ? Pathname.new(filename) : dir + filename
         | 
| 426 323 | 
             
                        entrypath = ::Pathname.new(blob_entry.path)
         | 
| 427 324 | 
             
                        # Ignore extentions
         | 
| 428 | 
            -
                        entrypath = entrypath.dirname + entrypath.basename(entrypath.extname) | 
| 325 | 
            +
                        entrypath = entrypath.dirname + entrypath.basename(entrypath.extname)
         | 
| 429 326 | 
             
                        entrypath == searchpath
         | 
| 430 327 | 
             
                      end
         | 
| 431 | 
            -
             | 
| 328 | 
            +
             | 
| 432 329 | 
             
                      if subpageblob
         | 
| 433 330 | 
             
                        instance_variable_set("@#{subpagename}", subpageblob.page(@wiki, @version) )
         | 
| 331 | 
            +
                        instance_variable_get("@#{subpagename}").parent_page = self
         | 
| 434 332 | 
             
                        break
         | 
| 435 333 | 
             
                      end
         | 
| 436 334 |  | 
| 437 335 | 
             
                      break if dir == Pathname.new('.')
         | 
| 438 336 | 
             
                    end
         | 
| 439 | 
            -
                  end | 
| 337 | 
            +
                  end
         | 
| 440 338 | 
             
                end
         | 
| 441 339 |  | 
| 442 340 | 
             
                def inspect
         | 
| 443 341 | 
             
                  %(#<#{self.class.name}:#{object_id} #{name} (#{format}) @wiki=#{@wiki.repo.path.inspect}>)
         | 
| 444 342 | 
             
                end
         | 
| 445 343 |  | 
| 446 | 
            -
             | 
| 344 | 
            +
              end
         | 
| 447 345 |  | 
| 448 | 
            -
             | 
| 449 | 
            -
             | 
| 450 | 
            -
             | 
| 451 | 
            -
             | 
| 452 | 
            -
             | 
| 453 | 
            -
             | 
| 454 | 
            -
                   | 
| 346 | 
            +
              class PreviewPage < Gollum::Page
         | 
| 347 | 
            +
                include Pagination
         | 
| 348 | 
            +
             | 
| 349 | 
            +
                SUBPAGENAMES.each do |subpage|
         | 
| 350 | 
            +
                  define_method(subpage) do
         | 
| 351 | 
            +
                    instance_variable_get("@#{subpage}")
         | 
| 352 | 
            +
                  end
         | 
| 353 | 
            +
                  define_method("set_#{subpage}") do |val|
         | 
| 354 | 
            +
                    instance_variable_set("@#{subpage}", PreviewPage.new(@wiki, "_#{subpage.to_s.capitalize}.md", val, @version, self))
         | 
| 355 | 
            +
                  end
         | 
| 356 | 
            +
                end
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                attr_accessor :path
         | 
| 359 | 
            +
             | 
| 360 | 
            +
                def initialize(wiki, name, data, version, parent_page = nil)
         | 
| 361 | 
            +
                  @wiki           = wiki 
         | 
| 362 | 
            +
                  @path           = name
         | 
| 363 | 
            +
                  @blob           = OpenStruct.new(:name => name, :data => data, :is_symlink => false)
         | 
| 364 | 
            +
                  @version        = version
         | 
| 365 | 
            +
                  @formatted_data = nil
         | 
| 366 | 
            +
                  @doc            = nil
         | 
| 367 | 
            +
                  @parent_page    = parent_page
         | 
| 368 | 
            +
                  @historical     = false
         | 
| 455 369 | 
             
                end
         | 
| 456 | 
            -
                
         | 
| 457 370 | 
             
              end
         | 
| 371 | 
            +
             | 
| 458 372 | 
             
            end
         |