jekyll-theme-open-project-helpers 1.3.4 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|