jekyll-theme-open-project-helpers 1.3.4 → 2.0
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 +5 -5
- data/jekyll-theme-open-project-helpers.gemspec +1 -1
- data/lib/jekyll-theme-open-project-helpers/external_links.rb +24 -3
- data/lib/jekyll-theme-open-project-helpers/filterable_index.rb +4 -0
- data/lib/jekyll-theme-open-project-helpers/spec_builders/png_diagrams.rb +23 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dd46772b2f87910b758b95f9da217c5ef5ec0a2d
|
4
|
+
data.tar.gz: a8b482f8a82760531b55d29356312e9cfe09ab63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 041efef7ad38ec390897e3bd8e9b868354b017784d79f8b5ad0ea72ddc9299442f5cf7a05ba6a8d6b3d6dc29eb976725c4f37cd93a82612c81df88097dcdcd77
|
7
|
+
data.tar.gz: 752e84028c7ab71d71fb4088a1db9b5532842f3d5780f3dadb6b0e1e2867ab32f23c7b16f1ecd102a47025013da117d8ee448775fc4e86b90a50d399f831fa4d
|
@@ -1,27 +1,48 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
require 'uri'
|
3
3
|
|
4
|
-
|
4
|
+
# Given hostname and content, updates <a> elements as follows:
|
5
|
+
#
|
6
|
+
# - Adds `rel` attribute
|
7
|
+
# - Appends inner markup for FontAwesome external link icon
|
8
|
+
#
|
9
|
+
# Only processes external links where `href` starts with "http"
|
10
|
+
# and target host does not include given site hostname.
|
11
|
+
def process_content(site_hostname, content, exclude_selectors=[])
|
5
12
|
content = Nokogiri::HTML(content)
|
6
13
|
content.css('body.site--project main a, body.site--hub.layout--post main a').each do |a|
|
7
14
|
next unless a.get_attribute('href') =~ /\Ahttp/i
|
8
15
|
next if a.get_attribute('href').include? site_hostname
|
16
|
+
next if matches_one_of(a, exclude_selectors)
|
9
17
|
a.set_attribute('rel', 'external')
|
10
18
|
a.inner_html = "#{a.inner_html}<span class='ico-ext'><i class='fas fa-external-link-square'></i></span>"
|
11
19
|
end
|
12
20
|
return content.to_s
|
13
21
|
end
|
14
22
|
|
23
|
+
# Returns true if Nokogiri’s Node matches one of selectors,
|
24
|
+
# otherwise return false
|
25
|
+
def matches_one_of(node, selectors)
|
26
|
+
for selector in selectors
|
27
|
+
if node.matches? selector
|
28
|
+
return true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
|
15
34
|
Jekyll::Hooks.register :documents, :post_render do |doc|
|
16
35
|
site_hostname = URI(doc.site.config['url']).host
|
36
|
+
unmarked_link_selectors = doc.site.config['unmarked_external_link_selectors']
|
17
37
|
unless doc.asset_file?
|
18
|
-
doc.output = process_content(site_hostname, doc.output)
|
38
|
+
doc.output = process_content(site_hostname, doc.output, unmarked_link_selectors)
|
19
39
|
end
|
20
40
|
end
|
21
41
|
|
22
42
|
Jekyll::Hooks.register :pages, :post_render do |page|
|
23
43
|
site_hostname = URI(page.site.config['url']).host
|
44
|
+
unmarked_link_selectors = page.site.config['unmarked_external_link_selectors']
|
24
45
|
unless page.asset_file?
|
25
|
-
page.output = process_content(site_hostname, page.output)
|
46
|
+
page.output = process_content(site_hostname, page.output, unmarked_link_selectors)
|
26
47
|
end
|
27
48
|
end
|
@@ -105,6 +105,10 @@ module Jekyll
|
|
105
105
|
|
106
106
|
items = get_all_items(site, collection_name, params[:item_test])
|
107
107
|
|
108
|
+
if items.length == 1
|
109
|
+
site.config["one_#{index_name}"] = items[0]
|
110
|
+
end
|
111
|
+
|
108
112
|
site.config["all_#{index_name}"] = items
|
109
113
|
site.config["num_all_#{index_name}"] = items.size
|
110
114
|
|
@@ -1,5 +1,23 @@
|
|
1
1
|
require 'fastimage'
|
2
2
|
|
3
|
+
# Recursively go through given list of nav_items, including any nested items,
|
4
|
+
# and return a flat array containing navigation items with path specified.
|
5
|
+
def get_nav_items_with_path(nav_items)
|
6
|
+
items_with_path = []
|
7
|
+
|
8
|
+
for item in nav_items do
|
9
|
+
if item['path']
|
10
|
+
items_with_path.push(item)
|
11
|
+
end
|
12
|
+
|
13
|
+
if item['items']
|
14
|
+
items_with_path.concat(get_nav_items_with_path(item['items']))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
return items_with_path
|
19
|
+
end
|
20
|
+
|
3
21
|
module Builder
|
4
22
|
|
5
23
|
class PngDiagramPage < Jekyll::Page
|
@@ -34,13 +52,15 @@ module Builder
|
|
34
52
|
stub_path = "#{File.dirname(__FILE__)}/png_diagram.html"
|
35
53
|
pages = []
|
36
54
|
|
55
|
+
diagram_nav_items = get_nav_items_with_path(spec_info.data['navigation']['items'])
|
56
|
+
|
37
57
|
Dir.glob("#{images_path}/*.png") do |pngfile|
|
38
58
|
png_name = File.basename(pngfile)
|
39
59
|
png_name_noext = File.basename(png_name, File.extname(png_name))
|
40
60
|
|
41
|
-
nav_item =
|
42
|
-
|
43
|
-
}
|
61
|
+
nav_item = diagram_nav_items.select { |item|
|
62
|
+
item['path'].start_with?(png_name_noext)
|
63
|
+
} [0].clone
|
44
64
|
|
45
65
|
png_dimensions = FastImage.size(pngfile)
|
46
66
|
data = spec_info.data.clone
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-theme-open-project-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '2.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
version: '0'
|
121
121
|
requirements: []
|
122
122
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.5.2.3
|
124
124
|
signing_key:
|
125
125
|
specification_version: 4
|
126
126
|
summary: Helpers for the Open Project Jekyll theme
|