jekyll_icon_list 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jekyll_icon_list.gemspec +1 -7
- data/lib/jekyll_icon_list.rb +78 -53
- data/lib/jekyll_icon_list/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c183bc2a0fb36c49830c7d5cd6a1e48c5d52a9f7228b749523281af82dceae8d
|
4
|
+
data.tar.gz: 19895ddfae466f1ae9ca7bca3b9ac2c6ab0be47f01b20ed7120d97948ecde58a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b48fcc1b173c63e00459f66664bf7ef99c1e9605aade8d1550683e866ee03c5ce95f24effb41d24aafd2d025448fc2ff0f88600123b159a4b1b46533e25216da
|
7
|
+
data.tar.gz: bb425489af5383a626431e3ed48d2ea5b0db0a2550856050abc6b021c9ac00004cc269fbbd72aa8adec390d967d7e2425888c2a4ce1cbdcf23c6662b98f71389
|
data/jekyll_icon_list.gemspec
CHANGED
@@ -12,13 +12,6 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.homepage = 'https://github.com/rbuchberger/jekyll_icon_list'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
|
15
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the
|
16
|
-
# 'allowed_push_host' to allow pushing to a single host or delete this section
|
17
|
-
# to allow pushing to any host. if spec.respond_to?(:metadata)
|
18
|
-
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
19
|
-
# else raise 'RubyGems 2.0 or newer is required to protect against ' \ 'public
|
20
|
-
# gem pushes.' end
|
21
|
-
|
22
15
|
# Specify which files should be added to the gem when it is released. The
|
23
16
|
# `git ls-files -z` loads the files in the RubyGem that have been added into
|
24
17
|
# git.
|
@@ -36,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
36
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
37
30
|
|
38
31
|
spec.add_dependency 'jekyll-inline-svg'
|
32
|
+
spec.add_dependency 'objective_elements', '~>0.2.0'
|
39
33
|
end
|
data/lib/jekyll_icon_list.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'jekyll_icon_list/version'
|
2
2
|
require 'jekyll'
|
3
3
|
require 'jekyll-inline-svg'
|
4
|
+
require 'objective_elements'
|
4
5
|
# Title: Jekyll Icon List
|
5
6
|
# Author: Robert Buchberger : robert@robert-buchberger.com
|
6
7
|
# Description: Generates lists of icons + labels, useful for things like tag
|
@@ -20,41 +21,52 @@ module JekyllIconList
|
|
20
21
|
super
|
21
22
|
end
|
22
23
|
|
24
|
+
def render(context)
|
25
|
+
@context = context
|
26
|
+
|
27
|
+
site_settings = @context.registers[:site]
|
28
|
+
raise 'could not load website configuration data' unless site_settings
|
29
|
+
|
30
|
+
@icon_list_settings = site_settings.config['icon_list'] || {}
|
31
|
+
|
32
|
+
all_items_data = site_settings.data['icon_list'] || {}
|
33
|
+
|
34
|
+
parse_input
|
35
|
+
|
36
|
+
build_html(all_items_data)
|
37
|
+
end
|
38
|
+
|
23
39
|
def parse_input
|
24
40
|
# raw_input will look something like this:
|
25
41
|
# 'item1 item2 item3 --ul attribute="value" --(...)'
|
42
|
+
|
26
43
|
@attributes = @icon_list_settings['defaults'].dup || {}
|
44
|
+
# {'ul' => 'class="awesome" (...)', (...)}
|
27
45
|
|
28
46
|
raw_input_array = @raw_input.split('--').map { |i| i.strip.split(' ') }
|
29
|
-
# [['item1', 'item2', 'item3'], ['ul', '
|
47
|
+
# [['item1', 'item2', 'item3'], ['ul', 'attr="value', 'value2"'],(...)]
|
30
48
|
|
31
49
|
@item_shortnames = raw_input_array.shift
|
50
|
+
# ['ul, 'attribute="value1 value2"', (...)]
|
32
51
|
|
33
52
|
raw_input_array.each { |a| @attributes[a.shift] = a.join ' ' }
|
34
|
-
|
35
|
-
@attributes.default = '' # Convenient for concatenation
|
53
|
+
# {'ul' => 'attribute="value1 value2 value3"'}
|
36
54
|
end
|
37
55
|
|
38
|
-
def
|
39
|
-
|
40
|
-
Jekyll::Tags::JekyllInlineSvg.send(
|
41
|
-
:new,
|
42
|
-
'svg',
|
43
|
-
icon_filename + @attributes['svg'],
|
44
|
-
@tokens
|
45
|
-
).render(@context)
|
46
|
-
else
|
47
|
-
"<img src=\"#{icon_filename}\"#{@attributes['img']}>"
|
48
|
-
end
|
49
|
-
end
|
56
|
+
def build_html(all_items_data)
|
57
|
+
list = DoubleTag.new 'ul', attributes: @attributes['ul']
|
50
58
|
|
51
|
-
|
52
|
-
|
53
|
-
search_results = Dir.glob( path[1..-1] + item + '.*')
|
54
|
-
raise "No icon found at #{path + item} .*" unless search_results.any?
|
59
|
+
@item_shortnames.each do |n|
|
60
|
+
this_item_data = all_items_data[n] || {}
|
55
61
|
|
56
|
-
|
57
|
-
|
62
|
+
icon_location = find_icon n, this_item_data
|
63
|
+
|
64
|
+
label = build_label(n, this_item_data)
|
65
|
+
|
66
|
+
list.add_content build_li(this_item_data, icon_location, label)
|
67
|
+
end
|
68
|
+
|
69
|
+
list.to_s
|
58
70
|
end
|
59
71
|
|
60
72
|
def find_icon(item_shortname, this_item_data)
|
@@ -69,51 +81,64 @@ module JekyllIconList
|
|
69
81
|
end
|
70
82
|
end
|
71
83
|
|
84
|
+
def search_path(path, item)
|
85
|
+
# We have to strip the leading slash for Dir to know it's relative:
|
86
|
+
search_results = Dir.glob(path[1..-1] + item + '.*')
|
87
|
+
raise "No icon found at #{path + item} .*" unless search_results.any?
|
88
|
+
|
89
|
+
# And put it back so that pages outside of the root directory keep working
|
90
|
+
search_results.first.prepend '/'
|
91
|
+
end
|
92
|
+
|
72
93
|
def build_label(shortname, this_item_data)
|
73
94
|
this_item_data['label'] ||
|
74
95
|
shortname.split(/[-_]/).map(&:capitalize).join(' ')
|
75
96
|
end
|
76
97
|
|
77
98
|
def build_li(this_item_data, icon_location, label)
|
78
|
-
li =
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
li
|
85
|
-
|
99
|
+
li = DoubleTag.new(
|
100
|
+
'li',
|
101
|
+
attributes: @attributes['li'],
|
102
|
+
content: [build_image_tag(icon_location), label],
|
103
|
+
oneline: true
|
104
|
+
)
|
105
|
+
return li unless this_item_data['url']
|
106
|
+
|
107
|
+
li.reset_content build_anchor(this_item_data['url'], li.content)
|
86
108
|
end
|
87
109
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
icon_location = find_icon n, this_icon_data
|
95
|
-
|
96
|
-
label = build_label(n, this_icon_data)
|
97
|
-
|
98
|
-
list << build_li(this_icon_data, icon_location, label)
|
110
|
+
def build_image_tag(icon_filename)
|
111
|
+
if icon_filename.split('.').pop.casecmp('svg').zero?
|
112
|
+
build_svg(icon_filename)
|
113
|
+
else
|
114
|
+
build_img(icon_filename)
|
99
115
|
end
|
100
|
-
|
101
|
-
list << "</ul>\n"
|
102
116
|
end
|
103
117
|
|
104
|
-
def
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
118
|
+
def build_svg(icon_filename)
|
119
|
+
params = icon_filename
|
120
|
+
params << ' ' + @attributes['svg'] if @attributes['svg']
|
121
|
+
Jekyll::Tags::JekyllInlineSvg.send(
|
122
|
+
:new,
|
123
|
+
'svg',
|
124
|
+
params,
|
125
|
+
@tokens
|
126
|
+
).render(@context)
|
127
|
+
end
|
113
128
|
|
114
|
-
|
129
|
+
def build_img(icon_filename)
|
130
|
+
img = SingleTag.new 'img', attributes: { src: icon_filename }
|
131
|
+
img.add_attributes @attributes['img'] if @attributes['img']
|
132
|
+
end
|
115
133
|
|
116
|
-
|
134
|
+
def build_anchor(url, content)
|
135
|
+
a = DoubleTag.new(
|
136
|
+
'a',
|
137
|
+
attributes: { href: url },
|
138
|
+
oneline: true,
|
139
|
+
content: content
|
140
|
+
)
|
141
|
+
a.add_attributes @attributes['a'] if @attributes['a']
|
117
142
|
end
|
118
143
|
end
|
119
144
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_icon_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Buchberger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: objective_elements
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.2.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.2.0
|
69
83
|
description:
|
70
84
|
email:
|
71
85
|
- robert@robert-buchberger.com
|
@@ -103,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
117
|
version: '0'
|
104
118
|
requirements: []
|
105
119
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.7.
|
120
|
+
rubygems_version: 2.7.3
|
107
121
|
signing_key:
|
108
122
|
specification_version: 4
|
109
123
|
summary: Builds lists of Icons and labels
|