jekyll_icon_list 0.3.1 → 0.4.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 +4 -4
- data/README.md +29 -5
- data/lib/jekyll_icon_list.rb +30 -11
- data/lib/jekyll_icon_list/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66af09ff271544ab5afed2a9e28e05769d75337d43dafa32747fc546d1f91f5f
|
4
|
+
data.tar.gz: 26ebee9c1b1fa4589a3587c2fa9169a5cc18304948e032d639e15cec76e132e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b507c5492ac70c6cd0aedd02e56e7f2efdf264733ee280315c086b9d09b734c480700b10c85f5ddb6c8d0903051260e00edc5896de608a93bebad6bf7c6575a
|
7
|
+
data.tar.gz: 38507a86625e2ec9ab637359bdeaad9ed195b7ede1c22885e5878ec1ff90a6cefa8123f325722ef61567edfc57bd2f6ed7b5085f3a5a559c9e221befec2f5d07
|
data/README.md
CHANGED
@@ -48,6 +48,10 @@ plugins:
|
|
48
48
|
|
49
49
|
```
|
50
50
|
{% icon_list example example2 example3 %}
|
51
|
+
|
52
|
+
# or:
|
53
|
+
|
54
|
+
{% icon_list {{ page.categories }} %}
|
51
55
|
```
|
52
56
|
|
53
57
|
By default, with no configuration:
|
@@ -104,6 +108,30 @@ would like to use, which will be prepended by your default_path if you set one (
|
|
104
108
|
|
105
109
|
If you set a `url:`, it'll wrap the `<li>` contents in an anchor tag.
|
106
110
|
|
111
|
+
### Liquid Variables:
|
112
|
+
|
113
|
+
It will parse liquid variables, as either a yaml array or a space-separated-list. Enclose them in
|
114
|
+
double curly braces, like this: `{{ my_context.my_variable }}`. **If given multiword variables, it
|
115
|
+
will attempt to build an item for each word.**
|
116
|
+
|
117
|
+
Example:
|
118
|
+
|
119
|
+
```
|
120
|
+
---
|
121
|
+
category_list:
|
122
|
+
- skydiving
|
123
|
+
- spelunking
|
124
|
+
- bouldering
|
125
|
+
|
126
|
+
category_string: skydiving spelunking bouldering
|
127
|
+
---
|
128
|
+
|
129
|
+
{% icon_list {{ page.category_list }} %}
|
130
|
+
|
131
|
+
{% icon_list {{ page.category_string }} %}
|
132
|
+
```
|
133
|
+
(Both icon_list tags will return the same output)
|
134
|
+
|
107
135
|
## Configuration
|
108
136
|
|
109
137
|
* All of icon_list's configuration is under the `icon_list:` key in \_config.yml
|
@@ -199,13 +227,9 @@ At this point the dependency on jekyll-svg-inliner gets pretty tenuous; do we
|
|
199
227
|
really need a plugin and an extra file to render 3 lines of simple code? In the
|
200
228
|
future I'd like to streamline this.
|
201
229
|
|
202
|
-
### Liquid variables
|
203
|
-
|
204
|
-
You can't pass in liquid variables yet. It's on the to-do list.
|
205
|
-
|
206
230
|
## Contributing
|
207
231
|
|
208
|
-
Bug reports and pull requests are welcome. https://github.com/rbuchberger/jekyll_icon_list
|
232
|
+
Bug reports, feature requests, and pull requests are welcome. https://github.com/rbuchberger/jekyll_icon_list
|
209
233
|
Contact: robert@robert-buchberger.com
|
210
234
|
|
211
235
|
I've been using rubocop with the default settings, and would appreciate if pull requests did the
|
data/lib/jekyll_icon_list.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'jekyll_icon_list/version'
|
2
|
+
|
2
3
|
require 'jekyll'
|
3
4
|
require 'jekyll-inline-svg'
|
5
|
+
require 'jekyll/liquid_extensions'
|
4
6
|
require 'objective_elements'
|
7
|
+
|
5
8
|
# Title: Jekyll Icon List
|
6
9
|
# Author: Robert Buchberger : robert@robert-buchberger.com
|
7
10
|
# Description: Generates lists of icons + labels, useful for things like tag
|
@@ -15,6 +18,9 @@ module JekyllIconList
|
|
15
18
|
# --ul, --li, --svg, and --img. Their arguments are inserted into their
|
16
19
|
# respective HTML elements upon render.
|
17
20
|
class IconList < Liquid::Tag
|
21
|
+
# Used for finding liquid variables in input
|
22
|
+
include Jekyll::LiquidExtensions
|
23
|
+
|
18
24
|
def initialize(tag_name, raw_input, tokens)
|
19
25
|
@raw_input = raw_input
|
20
26
|
@tokens = tokens
|
@@ -37,22 +43,38 @@ module JekyllIconList
|
|
37
43
|
end
|
38
44
|
|
39
45
|
def build_settings
|
40
|
-
# raw_input will look something like this:
|
41
|
-
# 'item1 item2 item3 --ul attribute="value" --(...)'
|
42
|
-
|
43
46
|
@attributes = @icon_list_settings['defaults'].dup || {}
|
44
47
|
# {'ul' => 'class="awesome" (...)', (...)}
|
45
48
|
|
46
|
-
|
49
|
+
# raw_input will look something like this:
|
50
|
+
# 'item1 item2 item3 --ul attribute="value" --(...)'
|
51
|
+
raw_input_array = liquid_lookup(@raw_input).split('--').map do |i|
|
52
|
+
i.strip.split(' ')
|
53
|
+
end
|
47
54
|
# [['item1', 'item2', 'item3'], ['ul', 'attr="value', 'value2"'],(...)]
|
48
55
|
|
49
56
|
@item_shortnames = raw_input_array.shift
|
50
|
-
# ['
|
57
|
+
# item_shortnames = ['item1', 'item2', 'item3']
|
58
|
+
# raw_input_array = ['ul, 'attribute="value1 value2"', (...)]
|
51
59
|
|
52
60
|
raw_input_array.each { |a| @attributes[a.shift] = a.join ' ' }
|
53
61
|
# {'ul' => 'attribute="value1 value2 value3"'}
|
54
62
|
end
|
55
63
|
|
64
|
+
LIQUID_REGEX = /\{\{\s*([\w]+\.?[\w]*)\s*\}\}/i
|
65
|
+
def liquid_lookup(input)
|
66
|
+
# I mostly stole this method from SVG Inliner. There may be a better way,
|
67
|
+
# but this works well enough.
|
68
|
+
input.scan LIQUID_REGEX do |match|
|
69
|
+
value = lookup_variable(@context, match.first)
|
70
|
+
value = value.join(' ') if value.is_a? Array
|
71
|
+
|
72
|
+
input = input.sub(LIQUID_REGEX, value)
|
73
|
+
end
|
74
|
+
|
75
|
+
input
|
76
|
+
end
|
77
|
+
|
56
78
|
def build_html(all_items_data)
|
57
79
|
list = DoubleTag.new 'ul', attributes: @attributes['ul']
|
58
80
|
|
@@ -134,13 +156,10 @@ module JekyllIconList
|
|
134
156
|
end
|
135
157
|
|
136
158
|
def build_anchor(url, content)
|
137
|
-
a = DoubleTag.new
|
138
|
-
|
139
|
-
attributes: { href: url },
|
140
|
-
oneline: true,
|
141
|
-
content: content
|
142
|
-
)
|
159
|
+
a = DoubleTag.new 'a', attributes: { href: url }, oneline: true
|
160
|
+
a.add_content content
|
143
161
|
a.add_attributes @attributes['a'] if @attributes['a']
|
162
|
+
a
|
144
163
|
end
|
145
164
|
end
|
146
165
|
end
|