jekyll-spaceship 0.9.7 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf1f9c38de511a38ca120048c76fa129f9052acb224eed310ceaada9e94421a0
4
- data.tar.gz: 7fb2cf77d779023e060d25950e0edf466b6e23e7b30994fba8a656239cd6c100
3
+ metadata.gz: 65e9ff74fc3f41dbe577381aee9352d4086282b7f626b7a2c6b0a07dc31b3528
4
+ data.tar.gz: 623506291192de23202d2e808d0d33b01a7d2834a57d84052732a14ea63b9f11
5
5
  SHA512:
6
- metadata.gz: 412b791444ca4a08219a8d9e8099ab3f695e435466d27bd7810c368bf6dfe2039cfc5c2275af04db3495cd7d06547283ed49d30a613884fa0a10b65f55a841ea
7
- data.tar.gz: e399f4b1175694f91b00c1504b6ecb89dc43799ff77f600962f2ebbf45043708fc7c82bb3bbfb4728738e6ccf202a6d1be4b260f8e10b52b24523180f8f2ef1a
6
+ metadata.gz: e98e212490178eec39e3c93773d6320b368dabcdab90657f97a1214e4eff35b47fe32bb4102a9831d4c93a77211c01fe17069dd484f2517f6a1661bb133aa754
7
+ data.tar.gz: 02a5dca457388cae099933aae86e24915c4b73ea32199a7d89e87e738cc43730e064663940446b21f395f58f74d8ab02b2c38cb87d81a20b92799f0e70a659c3
data/.github/FUNDING.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # These are supported funding model platforms
2
2
 
3
- github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
3
+ github: jeffreytse # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4
4
  patreon: jeffreytse
5
5
  open_collective: # Replace with a single Open Collective username
6
6
  ko_fi: jeffreytse
data/README.md CHANGED
@@ -112,6 +112,7 @@ Spaceship is a minimalistic, powerful and extremely customizable [Jekyll](https:
112
112
  - [5.2 Vimeo Usage](#vimeo-usage)
113
113
  - [5.3 DailyMotion Usage](#dailymotion-usage)
114
114
  - [5.4 Spotify Usage](#spotify-usage)
115
+ - [5.4 Spotify Podcast Usage](#spotify-podcast-usage)
115
116
  - [5.5 SoundCloud Usage](#soundcloud-usage)
116
117
  - [5.6 General Video Usage](#general-video-usage)
117
118
  - [5.7 General Audio Usage](#general-audio-usage)
@@ -441,7 +442,7 @@ Code above would be parsed as:
441
442
  #### Cell Alignment
442
443
 
443
444
  Markdown table syntax use colons ":" for forcing column alignment.
444
- Therefore, here we also use it for foring cell alignment.
445
+ Therefore, here we also use it for forcing cell alignment.
445
446
 
446
447
  Table cell can be set alignment separately.
447
448
 
@@ -791,6 +792,15 @@ the link as below:
791
792
 
792
793
  <image width="600" src="https://user-images.githubusercontent.com/9413601/89762618-5d11b000-db23-11ea-81db-35cc3682b234.png">
793
794
 
795
+ #### Spotify Podcast Usage
796
+
797
+ ```markdown
798
+ ![](https://open.spotify.com/episode/31AxcwYdjsFtStds5JVWbT)
799
+ ```
800
+
801
+ <image width="600" src="https://user-images.githubusercontent.com/9413601/133599796-1d213033-8184-4059-9ec2-5415e50c94dc.png">
802
+
803
+
794
804
  #### SoundCloud Usage
795
805
 
796
806
  ```markdown
@@ -64,7 +64,10 @@ module Jekyll::Spaceship
64
64
  def self.load_config
65
65
  # post load site config for `group :jekyll_plugin`
66
66
  Jekyll::Hooks.register :site, :after_init do |site|
67
+ # load config
67
68
  self.load(site.config)
69
+ # dispatch site after_init event
70
+ Manager.dispatch(site, :site, :after_init)
68
71
  end
69
72
  end
70
73
  end
@@ -14,6 +14,7 @@ module Jekyll::Spaceship
14
14
  container = _register.first
15
15
  events = _register.last.uniq
16
16
  events = events.select do |event|
17
+ next true if event.match(/^after/)
17
18
  next true if event.match(/^post/)
18
19
  next events.index(event.to_s.gsub(/^pre/, 'post').to_sym).nil?
19
20
  end
@@ -59,21 +60,25 @@ module Jekyll::Spaceship
59
60
  def self.dispatch(page, container, event)
60
61
  @@_processors.each do |processor|
61
62
  processor.dispatch page, container, event
63
+ break unless processor.next?
62
64
  end
63
65
  if event.to_s.start_with?('post') and Type.html? output_ext(page)
64
66
  self.dispatch_html_block(page)
65
67
  end
66
68
  @@_processors.each do |processor|
67
69
  processor.on_handled if processor.handled
70
+ break unless processor.next?
68
71
  end
69
72
  end
70
73
 
71
74
  def self.ext(page)
75
+ return unless page.respond_to? :path
72
76
  ext = page.path.match(/\.[^.]+$/)
73
77
  ext.to_s.rstrip
74
78
  end
75
79
 
76
80
  def self.output_ext(page)
81
+ return unless page.respond_to? :url_placeholders
77
82
  page.url_placeholders[:output_ext]
78
83
  end
79
84
 
@@ -90,6 +90,10 @@ module Jekyll::Spaceship
90
90
  def self.config
91
91
  end
92
92
 
93
+ def next?
94
+ true
95
+ end
96
+
93
97
  def process?
94
98
  Type.html?(output_ext) or Type.markdown?(ext)
95
99
  end
@@ -188,12 +192,28 @@ module Jekyll::Spaceship
188
192
  while @exclusion_store.size > 0
189
193
  match = @exclusion_store.pop
190
194
  id = @exclusion_store.size
191
- content = content.sub("<!JEKYLL@#{object_id}@#{id}>", match)
195
+ content = content.sub(
196
+ "<!JEKYLL@#{object_id}@#{id}>"
197
+ ) { match }
192
198
  end
193
199
  @exclusion_store = []
194
200
  content
195
201
  end
196
202
 
203
+ def get_exclusion(id)
204
+ result = nil
205
+ match_data = id.match /<!JEKYLL@(.+)@(.+)>/
206
+ unless match_data.nil?
207
+ id = match_data[2].to_i
208
+ result = {
209
+ :id => id,
210
+ :marker => match_data[0],
211
+ :content => @exclusion_store[id]
212
+ }
213
+ end
214
+ result
215
+ end
216
+
197
217
  def self.escape_html(content)
198
218
  # escape link
199
219
  content.scan(/((https?:)?\/\/\S+\?[a-zA-Z0-9%\-_=\.&;]+)/) do |result|
@@ -237,5 +257,31 @@ module Jekyll::Spaceship
237
257
  "<img class=\"#{css_class}\" src=\"#{body}\">"
238
258
  end
239
259
  end
260
+
261
+ def self.handle_bang_link(
262
+ content,
263
+ url = '(https?:)?\\/\\/.*',
264
+ title = '("(.*)".*){0,1}',
265
+ &block
266
+ )
267
+ # pre-handle reference-style links
268
+ regex = /(\[(.*)\]:\s*(#{url}\s*#{title}))/
269
+ content.scan regex do |match_data|
270
+ match = match_data[0]
271
+ ref_name = match_data[1]
272
+ ref_value = match_data[2]
273
+ content = content.gsub(match, '')
274
+ .gsub(/\!\[(.*)\]\s*\[#{ref_name}\]/,
275
+ "![\1](#{ref_value})")
276
+ end
277
+
278
+ # handle inline-style links
279
+ regex = /(\!\[(.*)\]\(.*#{url}\s*#{title}\))/
280
+ content.scan regex do |match_data|
281
+ url = match_data[2]
282
+ title = match_data[6]
283
+ block.call(url, title)
284
+ end
285
+ end
240
286
  end
241
287
  end
@@ -16,31 +16,85 @@ module Jekyll::Spaceship
16
16
  end
17
17
 
18
18
  def on_handle_html(content)
19
- # handle emoji markup
20
- content.scan(/:([\w\d+-]+):/) do |match|
19
+ emoji_filter(content, 'pre code') do |emoji|
20
+ # mark current file has been handled
21
+ self.handled = true
22
+
23
+ # here is the replacement content
24
+ "<img class=\"#{config['css']['class']}\""\
25
+ " title=\":#{emoji.name}:\""\
26
+ " alt=\":#{emoji.name}:\""\
27
+ " raw=\"#{emoji.raw}\""\
28
+ " src=\"#{config['src']}#{emoji.image_filename}\""\
29
+ " style=\"vertical-align: middle; display: inline;"\
30
+ " max-width: 1em; visibility: hidden;\""\
31
+ " onload=\"this.style.visibility='visible'\""\
32
+ " onerror=\"this.replaceWith(this.getAttribute('raw'))\">"\
33
+ "</img>"
34
+ end
35
+ end
36
+
37
+ def emoji_filter(content, selector)
38
+ # use nokogiri to parse html
39
+ doc = Nokogiri::HTML(content)
40
+
41
+ body = doc.at('body')
42
+
43
+ # in case of a page has no the body node, especially when your
44
+ # page's layout field of front matter is nil or unavailable
45
+ return content if body.nil?
46
+
47
+ # Count for restoration
48
+ escaped_count = 0
49
+
50
+ # filter nodes (pre, code)
51
+ body.css(selector).each do |node|
52
+ count = escaped_count
53
+
54
+ # handle emoji markup
55
+ inner_html = node.inner_html.gsub(
56
+ /(?<!\\):([\w\d+-]+?)(?<!\\):/
57
+ ) do |match|
58
+ escaped_count += 1
59
+ "\\:#{match[1..-2]}\\:"
60
+ end
61
+
62
+ if escaped_count > count
63
+ node.inner_html = inner_html
64
+ end
65
+ end
66
+
67
+ # parse the emoji
68
+ content = body.inner_html
69
+ content.scan(/(?<!\\):([\w\d+-]+?)(?<!\\):/) do |match|
70
+ # Skip invalid emoji name
21
71
  emoji = Emoji.find_by_alias match[0]
22
72
  next if emoji.nil?
23
- self.handled = true
24
73
 
25
74
  # escape plus sign
26
75
  emoji_name = emoji.name.gsub('+', '\\\+')
27
- css_class = self.config['css']['class']
76
+
77
+ result = yield emoji
78
+ next if result.nil?
28
79
 
29
80
  content = content.gsub(
30
81
  /(?<!\=")\s*:#{emoji_name}:\s*(?!"\s)/,
31
- "<img class=\"#{css_class}\""\
32
- " title=\":#{emoji.name}:\""\
33
- " alt=\":#{emoji.name}:\""\
34
- " raw=\"#{emoji.raw}\""\
35
- " src=\"#{config['src']}#{emoji.image_filename}\""\
36
- " style=\"vertical-align: middle; display: inline;"\
37
- " max-width: 1em; visibility: hidden;\""\
38
- " onload=\"this.style.visibility='visible'\""\
39
- " onerror=\"this.replaceWith(this.getAttribute('raw'))\">"\
40
- "</img>"
82
+ result)
83
+ end
84
+
85
+ body.inner_html = content
86
+
87
+ return doc.to_html if escaped_count.zero?
88
+
89
+ # restore nodes (pre, code)
90
+ body.css(selector).each do |node|
91
+ # handle emoji markup
92
+ node.inner_html = node.inner_html.gsub(
93
+ /\\:([\w\d+-]+?)\\:/, ':\1:'
41
94
  )
42
95
  end
43
- content
96
+
97
+ doc.to_html
44
98
  end
45
99
  end
46
100
  end
@@ -44,7 +44,8 @@ module Jekyll::Spaceship
44
44
  next if is_excluded
45
45
  escaped_expr = expr
46
46
  .gsub(/(?<!^)\\(?!\S$)/, '\\\\\\\\')
47
- .gsub(/(?<!\\)\$/, '\\\$')
47
+ .gsub(/(?<!\\)\$\$/, '\\\$\\\$')
48
+ .gsub(/\\\\(?=\s)/, '\\\\\\\\\\')
48
49
  .gsub(/\\ /, '\\\\\\ ')
49
50
  content = content.gsub(expr, escaped_expr)
50
51
  end
@@ -92,7 +93,7 @@ module Jekyll::Spaceship
92
93
  r&.each do |i|
93
94
  btag = Regexp.escape(i[0])
94
95
  etag = Regexp.escape(i[1])
95
- patterns <<= /((?<!\\\\)#{btag}(.*?)(?<!\\\\)#{etag})/
96
+ patterns <<= /((?<!\\\\)#{btag}([\s\S]*?)(?<!\\\\)#{etag})/
96
97
  end
97
98
  end
98
99
  end
@@ -107,17 +108,35 @@ module Jekyll::Spaceship
107
108
 
108
109
  def scan_mathjax_expression(doc, &block)
109
110
  patterns = get_math_patterns()
110
- doc.css('*').each do |node|
111
- next if ['code', 'pre', 'figure'].include? node.name
112
- next if node.ancestors('code, pre, figure').size > 0
113
- next if node.children.size > 1
114
- patterns['include'].each do |pattern|
115
- # check scripting mathjax expression
116
- if node.name == 'script'
117
- type = node['type']
118
- next unless type
119
- next unless type.match(/math\/tex/)
111
+ doc = doc.clone
112
+
113
+ # remove code, pre, figure nodes
114
+ doc.css('body code, body pre, body figure').each do |node|
115
+ node.remove
116
+ end
117
+
118
+ # remove scripting mathjax expression
119
+ doc.css('body script').each do |node|
120
+ next if node['type']&.match(/math\/tex/)
121
+ node.remove
122
+ end
123
+
124
+ # scan mathjax expressions
125
+ doc.css('body *').each do |node|
126
+ # filter invalid nodes
127
+ next if node.children.size == 0
128
+ invalid = false
129
+ node.children.each do |child|
130
+ unless [
131
+ 'text', 'br', 'span',
132
+ 'img', 'svg', 'a'
133
+ ].include? child.name
134
+ break invalid = true
120
135
  end
136
+ end
137
+ next if invalid
138
+
139
+ patterns['include'].each do |pattern|
121
140
  # check normal mathjax expression
122
141
  node.content.scan(pattern) do |result|
123
142
  expr = result[0]
@@ -30,6 +30,7 @@ module Jekyll::Spaceship
30
30
  handle_vimeo(element)
31
31
  handle_dailymotion(element)
32
32
  handle_spotify(element)
33
+ handle_spotify_podcast(element)
33
34
  handle_soundcloud(element)
34
35
  end
35
36
  doc.to_html
@@ -42,7 +43,7 @@ module Jekyll::Spaceship
42
43
  handle_media(element, {
43
44
  media_type: 'audio',
44
45
  host: '(https?:\\/\\/)?.*\\/',
45
- id: '(.+?\\.(mp3|wav|ogg|mid|midi|aac|wma))',
46
+ id: '(.+?\\.(mp3|wav|ogg|mid|midi|aac|wma))'
46
47
  })
47
48
  end
48
49
 
@@ -53,7 +54,7 @@ module Jekyll::Spaceship
53
54
  # ![video](//techslides.com/demos/sample-videos/small.mp4?width=400)
54
55
  def handle_normal_video(element)
55
56
  handle_media(element, {
56
- media_type: 'iframe',
57
+ media_type: 'video',
57
58
  host: '(https?:\\/\\/)?.*\\/',
58
59
  id: '(.+?\\.(avi|mp4|webm|ogg|ogv|flv|mkv|mov|wmv|3gp|rmvb|asf))'
59
60
  })
@@ -90,8 +91,8 @@ module Jekyll::Spaceship
90
91
  def handle_dailymotion(element)
91
92
  handle_media(element, {
92
93
  media_type: 'iframe',
93
- host: '(https?:)?\\/\\/.*dai.?ly.*',
94
- id: '(?<=video\\/|\\/)([a-zA-Z0-9\\_\\-]+)',
94
+ host: '(https?:)?\\/\\/(?>www\\.)?dai\\.?ly(?>motion\\.com\\/video)?\\/',
95
+ id: '([a-zA-Z0-9\\_\\-]+)',
95
96
  base_url: "https://www.dailymotion.com/embed/video/"
96
97
  })
97
98
  end
@@ -109,6 +110,19 @@ module Jekyll::Spaceship
109
110
  })
110
111
  end
111
112
 
113
+ # Examples:
114
+ # ![spotify podcast](//open.spotify.com/episode/31AxcwYdjsFtStds5JVWbT)
115
+ # ![spotify podcast](//open.spotify.com/episode/44gfWHnwbmSY7Euw6Nb39k?width=400)
116
+ def handle_spotify_podcast(element)
117
+ handle_media(element, {
118
+ media_type: 'iframe',
119
+ host: '(https?:)?\\/\\/open\\.spotify\\.com\\/episode\\/',
120
+ id: '(?<=episode\\/)([a-zA-Z0-9\\_\\-]+)',
121
+ base_url: "https://open.spotify.com/embed/episode/",
122
+ height: 152
123
+ })
124
+ end
125
+
112
126
  # Examples:
113
127
  # ![soundcloud](//soundcloud.com/aviciiofficial/preview-avicii-vs-lenny)
114
128
  def handle_soundcloud(element)
@@ -128,7 +142,7 @@ module Jekyll::Spaceship
128
142
  src = element.get_attribute('src')
129
143
  title = element.get_attribute('title')
130
144
  id = data[:id_from] === 'html' ? '()' : data[:id]
131
- match_data = src.match(/#{host}#{id}\S*/)
145
+ match_data = src&.match(/#{host}#{id}\S*/)
132
146
  return if match_data.nil?
133
147
 
134
148
  media_type = data[:media_type]
@@ -158,6 +172,10 @@ module Jekyll::Spaceship
158
172
  cfg['loop'] = qs['loop'] || data[:loop] || cfg['loop']
159
173
  cfg['style'] += ';display: none;' if qs['hidden']
160
174
  handle_audio(element, { cfg: cfg })
175
+ when 'video'
176
+ cfg['autoplay'] = qs['autoplay'] || data[:autoplay] || cfg['autoplay']
177
+ cfg['loop'] = qs['loop'] || data[:loop] || cfg['loop']
178
+ handle_video(element, { cfg: cfg })
161
179
  when 'iframe'
162
180
  cfg['title'] = title
163
181
  cfg['width'] = qs['width'] || data[:width] || cfg['width']
@@ -179,12 +197,32 @@ module Jekyll::Spaceship
179
197
  " src=\"#{cfg['src']}\""\
180
198
  " style=\"#{cfg['style']}\""\
181
199
  " controls>" \
182
- "<p> Your browser doesn't support HTML5 audio."\
200
+ " Your browser doesn't support HTML5 audio."\
183
201
  " Here is a <a href=\"#{cfg['src']}\">link to download the audio</a>"\
184
- "instead. </p>"\
202
+ " instead."\
185
203
  "</audio>"
186
- doc = Nokogiri::XML(html)
187
- element.replace(doc.children.first)
204
+ doc = Nokogiri::HTML(html)
205
+ return if element.parent.nil?
206
+ element.replace(doc.at('body').children.first)
207
+ end
208
+
209
+ def handle_video(element, data)
210
+ cfg = data[:cfg]
211
+ html = "<video"\
212
+ " id=\"#{cfg['id']}\""\
213
+ " class=\"#{cfg['class']}\""\
214
+ " style=\"#{cfg['style']}\""\
215
+ " #{cfg['autoplay'] ? 'autoplay' : ''}"\
216
+ " #{cfg['loop'] ? 'loop' : ''}"\
217
+ " controls>" \
218
+ " <source src=\"#{cfg['src']}\">" \
219
+ " Your browser doesn't support HTML5 video."\
220
+ " Here is a <a href=\"#{cfg['src']}\">link to download the video</a>"\
221
+ " instead."\
222
+ "</video>"
223
+ doc = Nokogiri::HTML(html)
224
+ return if element.parent.nil?
225
+ element.replace(doc.at('body').children.first)
188
226
  end
189
227
 
190
228
  def handle_iframe(element, data)
@@ -201,8 +239,9 @@ module Jekyll::Spaceship
201
239
  " frameborder=\"#{cfg['frameborder']}\""\
202
240
  " allowfullscreen>"\
203
241
  "</iframe>"
204
- doc = Nokogiri::XML(html)
205
- element.replace(doc.children.first)
242
+ doc = Nokogiri::HTML(html)
243
+ return if element.parent.nil?
244
+ element.replace(doc.at('body').children.first)
206
245
  end
207
246
 
208
247
  def get_id_from_html(url, pattern)
@@ -60,6 +60,9 @@ module Jekyll::Spaceship
60
60
  end
61
61
 
62
62
  def handle_mermaid(code)
63
+ # Handle extra empty lines, otherwise it would cause error
64
+ code = code.gsub(/\n\s*\n/, "\n%%-\n")
65
+
63
66
  # encode to UTF-8
64
67
  code = code.encode('UTF-8')
65
68
  url = get_url(code)
@@ -18,13 +18,21 @@ module Jekyll::Spaceship
18
18
  end
19
19
  if references.size > 0
20
20
  content.scan(/[^\n]*(?<!\\)\|[^\n]*/) do |result|
21
+ replace = result
21
22
  references.each do |key, val|
22
- replace = result.gsub(
23
- /\[([^\n\]]*?)\]\s*\[#{key}\]/,
24
- "[\1](#{val})")
25
- next if result == replace
26
- content = content.gsub(result, replace)
23
+ replace = replace.gsub(
24
+ /\[([^\n\]]*?)\]\s*\[#{Regexp.escape(key)}\]/,
25
+ "[\\1](#{val})"
26
+ )
27
27
  end
28
+ references.each do |key, val|
29
+ replace = replace.gsub(
30
+ /\[#{Regexp.escape(key)}\](?!\s*\(.*?\))/,
31
+ "[#{key}](#{val})"
32
+ )
33
+ end
34
+ next if result == replace
35
+ content = content.gsub(result, replace)
28
36
  end
29
37
  end
30
38
 
@@ -87,7 +95,6 @@ module Jekyll::Spaceship
87
95
  handle_multi_rows(data)
88
96
  handle_text_align(data)
89
97
  handle_rowspan(data)
90
- handle_attr_list(data)
91
98
  end
92
99
  end
93
100
  rows.each do |row|
@@ -95,6 +102,7 @@ module Jekyll::Spaceship
95
102
  cells.each do |cell|
96
103
  data.cell = cell
97
104
  handle_format(data)
105
+ handle_attr_list(data)
98
106
  end
99
107
  end
100
108
  self.handled = true
@@ -143,10 +151,10 @@ module Jekyll::Spaceship
143
151
  end
144
152
  end
145
153
 
146
- result = cell.content.match(/(\|)+$/)
154
+ result = cell.inner_html.match(/(\|)+$/)
147
155
  return if result.nil?
148
156
 
149
- cell.content = cell.content.gsub(/(\|)+$/, '')
157
+ cell.inner_html = cell.inner_html.gsub(/(\|)+$/, '')
150
158
  result = result[0]
151
159
  colspan = result.scan(/\|/).count
152
160
  scope.row.colspan += colspan
@@ -203,8 +211,8 @@ module Jekyll::Spaceship
203
211
 
204
212
  # handle rowspan
205
213
  span_cell = scope.table.span_row_cells[scope.row.col_index]
206
- if span_cell and cell.content.match(/^\s*\^{2}/)
207
- cell.content = cell.content.gsub(/^\s*\^{2}/, '')
214
+ if span_cell and cell.inner_html.match(/^\s*\^{2}/)
215
+ cell.inner_html = cell.inner_html.gsub(/^\s*\^{2}/, '')
208
216
  span_cell.inner_html += "\n<br>\n#{cell.inner_html}"
209
217
  rowspan = span_cell.get_attribute('rowspan') || 1
210
218
  rowspan = rowspan.to_i + 1
@@ -264,7 +272,7 @@ module Jekyll::Spaceship
264
272
  content = cell.inner_html
265
273
  # inline attribute list(IAL) handler
266
274
  ial_handler = ->(list) do
267
- list.scan(/(\S+)=("|')(.*?)\2|(\S+)/) do |attr|
275
+ list.scan(/(\S+)=(”|"|')(.*?)\2|(\S+)/) do |attr|
268
276
  key = attr[0]
269
277
  val = attr[2]
270
278
  single = attr[3]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Spaceship
5
- VERSION = "0.9.7"
5
+ VERSION = "0.10.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-spaceship
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jeffreytse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-06 00:00:00.000000000 Z
11
+ date: 2021-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll