Module: Jekyll::AwesomeNav::Utils

Defined in:
lib/jekyll/awesome_nav/utils.rb

Class Method Summary collapse

Class Method Details

.external_url?(value) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/jekyll/awesome_nav/utils.rb', line 41

def external_url?(value)
  value.to_s.match?(%r{\A([a-z][a-z0-9+\-.]*:)?//}i)
end

.index_page?(page) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/jekyll/awesome_nav/utils.rb', line 65

def index_page?(page)
  File.basename(page.path, File.extname(page.path)) == "index"
end

.last_segment(path) ⇒ Object



23
24
25
# File 'lib/jekyll/awesome_nav/utils.rb', line 23

def last_segment(path)
  path_segments(path).last.to_s
end

.normalize_dir(dir) ⇒ Object



8
9
10
# File 'lib/jekyll/awesome_nav/utils.rb', line 8

def normalize_dir(dir)
  dir.to_s.strip.sub(%r{\A/+}, "").sub(%r{/+\z}, "")
end

.normalize_url(url) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/jekyll/awesome_nav/utils.rb', line 45

def normalize_url(url)
  value = url.to_s.strip
  return "/" if value.empty?
  return value if external_url?(value)

  value = "/#{value}" unless value.start_with?("/")
  value = value.sub(/index\.html\z/, "")
  value = value.gsub(%r{/+}, "/")
  value = "#{value}/" if File.extname(value).empty? && !value.end_with?("/")
  value
end

.page_title(page, basename) ⇒ Object



89
90
91
# File 'lib/jekyll/awesome_nav/utils.rb', line 89

def page_title(page, basename)
  page.data["nav_title"] || page.data["title"] || titleize(basename)
end

.parent_dir(dir) ⇒ Object



16
17
18
19
20
21
# File 'lib/jekyll/awesome_nav/utils.rb', line 16

def parent_dir(dir)
  segments = path_segments(dir)
  return "" if segments.length <= 1

  segments[0...-1].join("/")
end

.path_segments(dir) ⇒ Object



12
13
14
# File 'lib/jekyll/awesome_nav/utils.rb', line 12

def path_segments(dir)
  normalize_dir(dir).split("/").reject(&:empty?)
end

.relative_dir(source, absolute_dir) ⇒ Object



34
35
36
37
38
39
# File 'lib/jekyll/awesome_nav/utils.rb', line 34

def relative_dir(source, absolute_dir)
  absolute_dir
    .sub(%r{\A#{Regexp.escape(source)}/?}, "")
    .sub(%r{\A/+}, "")
    .sub(%r{/+\z}, "")
end

.relative_to_root(dir, root_dir) ⇒ Object



27
28
29
30
31
32
# File 'lib/jekyll/awesome_nav/utils.rb', line 27

def relative_to_root(dir, root_dir)
  return "" if dir == root_dir
  return dir.delete_prefix("#{root_dir}/") if dir.start_with?("#{root_dir}/")

  dir
end

.source_dir_for(page) ⇒ Object



69
70
71
# File 'lib/jekyll/awesome_nav/utils.rb', line 69

def source_dir_for(page)
  source_dir_for_path(source_path_for(page))
end

.source_dir_for_path(path) ⇒ Object



73
74
75
76
# File 'lib/jekyll/awesome_nav/utils.rb', line 73

def source_dir_for_path(path)
  dir = File.dirname(path.to_s)
  normalize_dir(dir == "." ? "" : dir)
end

.source_path_for(page) ⇒ Object



78
79
80
81
82
83
84
85
86
87
# File 'lib/jekyll/awesome_nav/utils.rb', line 78

def source_path_for(page)
  path =
    if page.respond_to?(:relative_path) && !page.relative_path.nil?
      page.relative_path
    else
      page.path
    end

  normalize_dir(path)
end

.titleize(value) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/jekyll/awesome_nav/utils.rb', line 57

def titleize(value)
  value.to_s
       .tr("_-", " ")
       .split
       .map { |part| part[0] ? "#{part[0].upcase}#{part[1..]}" : part }
       .join(" ")
end