Module: Jekyll::AwesomeNav::Utils
- Defined in:
- lib/jekyll/awesome_nav/utils.rb
Class Method Summary collapse
- .external_url?(value) ⇒ Boolean
- .index_page?(page) ⇒ Boolean
- .last_segment(path) ⇒ Object
- .normalize_dir(dir) ⇒ Object
- .normalize_url(url) ⇒ Object
- .page_title(page, basename) ⇒ Object
- .parent_dir(dir) ⇒ Object
- .path_segments(dir) ⇒ Object
- .relative_dir(source, absolute_dir) ⇒ Object
- .relative_to_root(dir, root_dir) ⇒ Object
- .source_dir_for(page) ⇒ Object
- .source_dir_for_path(path) ⇒ Object
- .source_path_for(page) ⇒ Object
- .titleize(value) ⇒ Object
Class Method Details
.external_url?(value) ⇒ 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
65 66 67 68 69 70 71 |
# File 'lib/jekyll/awesome_nav/utils.rb', line 65 def index_page?(page) basename = File.basename(source_path_for(page), File.extname(source_path_for(page))).downcase return true if basename == "index" # jekyll-readme-index can map README.* to the directory index URL. basename == "readme" && normalize_url(page.url) == normalize_url(source_dir_for(page)) 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
93 94 95 |
# File 'lib/jekyll/awesome_nav/utils.rb', line 93 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
73 74 75 |
# File 'lib/jekyll/awesome_nav/utils.rb', line 73 def source_dir_for(page) source_dir_for_path(source_path_for(page)) end |
.source_dir_for_path(path) ⇒ Object
77 78 79 80 |
# File 'lib/jekyll/awesome_nav/utils.rb', line 77 def source_dir_for_path(path) dir = File.dirname(path.to_s) normalize_dir(dir == "." ? "" : dir) end |
.source_path_for(page) ⇒ Object
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/jekyll/awesome_nav/utils.rb', line 82 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 |