jekyll-webmention_io 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jekyll/generators/compile_js.rb +18 -35
- data/lib/jekyll/tags/webmention.rb +3 -2
- data/lib/jekyll/tags/webmentions_js.rb +2 -34
- data/lib/jekyll/webmention_io.rb +42 -22
- data/lib/jekyll/webmention_io/js_handler.rb +65 -0
- data/lib/jekyll/webmention_io/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9aae045b55d22d92d88b0345073c4ffe64206da5
|
4
|
+
data.tar.gz: 28b163e15deda415f8ed2c6c5621654545a032cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13af37e1c35dec286855885086586f7e8f9caca23ca672e7ef8ec64c4e21633a600e54e921466e67111d74e4fcfee3f99601dcab0f15db7ece76ce29406b9450
|
7
|
+
data.tar.gz: 7f5c71a216c6deb7cd13bba1c0fde8ea7d103cc9d33a004bd95e0c7796e4d6119e94b3b2aeacd7ac8bf86df5d52fa3ac480690b79401696bfc63c38a8d342c61
|
@@ -13,12 +13,7 @@ module Jekyll
|
|
13
13
|
module WebmentionIO
|
14
14
|
class JavaScriptFile < StaticFile
|
15
15
|
def destination_rel_dir
|
16
|
-
|
17
|
-
"destination" => "js",
|
18
|
-
}
|
19
|
-
js_config = Jekyll::WebmentionIO.config["js"] || {}
|
20
|
-
config = config.merge(js_config)
|
21
|
-
config["destination"]
|
16
|
+
Jekyll::WebmentionIO.js_handler.destination
|
22
17
|
end
|
23
18
|
end
|
24
19
|
|
@@ -28,38 +23,29 @@ module Jekyll
|
|
28
23
|
priority :low
|
29
24
|
|
30
25
|
def generate(site)
|
26
|
+
handler = Jekyll::WebmentionIO.js_handler
|
31
27
|
@site = site
|
32
|
-
@file_name =
|
28
|
+
@file_name = handler.resource_name
|
33
29
|
|
34
|
-
if
|
30
|
+
if handler.disabled?
|
35
31
|
Jekyll::WebmentionIO.log "info", "Skipping JavaScript inclusion."
|
36
32
|
return
|
37
33
|
end
|
38
34
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
config = config.merge(site_config)
|
45
|
-
|
46
|
-
@source_file_destination = (config["source"] == false ? Dir.mktmpdir : "#{@site.config["source"]}/#{config["destination"]}")
|
35
|
+
@source_file_destination = if handler.source?
|
36
|
+
@site.in_source_dir(handler.destination)
|
37
|
+
else
|
38
|
+
Dir.mktmpdir
|
39
|
+
end
|
47
40
|
|
48
41
|
@javascript = +"" # unfrozen String
|
49
42
|
|
50
43
|
concatenate_asset_files
|
51
|
-
|
52
44
|
add_webmention_types
|
53
45
|
|
54
|
-
|
55
|
-
uglify
|
56
|
-
end
|
57
|
-
|
46
|
+
uglify if handler.uglify?
|
58
47
|
create_js_file
|
59
|
-
|
60
|
-
unless config["deploy"] == false
|
61
|
-
deploy_js_file
|
62
|
-
end
|
48
|
+
deploy_js_file if handler.deploy?
|
63
49
|
end
|
64
50
|
|
65
51
|
private
|
@@ -75,27 +61,24 @@ module Jekyll
|
|
75
61
|
JekyllWebmentionIO.types = { TYPES };
|
76
62
|
}(this, this.JekyllWebmentionIO));
|
77
63
|
EOF
|
78
|
-
@javascript << types_js.sub(
|
64
|
+
@javascript << types_js.sub("TYPES", js_types.join(","))
|
79
65
|
end
|
80
66
|
|
81
67
|
def concatenate_asset_files
|
82
|
-
|
83
|
-
Dir["#{
|
84
|
-
|
85
|
-
@javascript << File.read(
|
68
|
+
assets_dir = File.expand_path("../assets/", __dir__)
|
69
|
+
Dir["#{assets_dir}/*.js"].each do |file|
|
70
|
+
file_handler = File.open(file, "rb")
|
71
|
+
@javascript << File.read(file_handler)
|
86
72
|
end
|
87
73
|
end
|
88
74
|
|
89
75
|
def uglify
|
90
|
-
|
91
|
-
:harmony => true,
|
92
|
-
}
|
93
|
-
@javascript = Uglifier.new(uglify_config).compile(@javascript)
|
76
|
+
@javascript = Uglifier.new(:harmony => true).compile(@javascript)
|
94
77
|
end
|
95
78
|
|
96
79
|
def create_js_file
|
97
80
|
Dir.mkdir(@source_file_destination) unless File.exist?(@source_file_destination)
|
98
|
-
File.open(
|
81
|
+
File.open(File.join(@source_file_destination, @file_name), "wb") { |f| f.write(@javascript) }
|
99
82
|
end
|
100
83
|
|
101
84
|
def deploy_js_file
|
@@ -32,8 +32,9 @@ module Jekyll
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def template=(template)
|
35
|
-
|
36
|
-
|
35
|
+
unless Jekyll::WebmentionIO.supported_templates.include? template
|
36
|
+
Jekyll::WebmentionIO.log "error", "#{template.capitalize} is not supported"
|
37
|
+
end
|
37
38
|
@template_name = template
|
38
39
|
@template = Jekyll::WebmentionIO.get_template_contents(template)
|
39
40
|
Jekyll::WebmentionIO.log "info", "#{template.capitalize} template:\n\n#{@template}\n\n"
|
@@ -10,40 +10,8 @@
|
|
10
10
|
module Jekyll
|
11
11
|
module WebmentionIO
|
12
12
|
class WebmentionJSTag < Liquid::Tag
|
13
|
-
def render(
|
14
|
-
|
15
|
-
|
16
|
-
# JS can be turned off too
|
17
|
-
if site.config.dig("webmentions", "js") == false
|
18
|
-
Jekyll::WebmentionIO.log "info", "JavaScript output is disabled, so the {% webmentions_js %} tag is being skipped"
|
19
|
-
return ""
|
20
|
-
end
|
21
|
-
|
22
|
-
config = {
|
23
|
-
"destination" => "js",
|
24
|
-
"uglify" => true,
|
25
|
-
}
|
26
|
-
site_config = site.config.dig("webmentions", "js") || {}
|
27
|
-
config = config.merge(site_config)
|
28
|
-
|
29
|
-
# JS file
|
30
|
-
js = +"" # unfrozen String
|
31
|
-
unless config["deploy"] == false
|
32
|
-
destination = config["destination"].chomp("/").reverse.chomp("/").reverse # removes prefix & suffix "/"
|
33
|
-
js_file_path = "#{site.config["baseurl"]}/#{destination}/JekyllWebmentionIO.js"
|
34
|
-
js << "<script src=\"#{js_file_path}\" async></script>"
|
35
|
-
end
|
36
|
-
|
37
|
-
Jekyll::WebmentionIO.log "info", "Gathering templates for JavaScript."
|
38
|
-
templates = +"" # unfrozen String
|
39
|
-
template_files = Jekyll::WebmentionIO.types + %w(count webmentions)
|
40
|
-
template_files.each do |template|
|
41
|
-
templates << "<template style=\"display:none\" id=\"webmention-#{template}\">"
|
42
|
-
templates << Jekyll::WebmentionIO.get_template_contents(template)
|
43
|
-
templates << "</template>"
|
44
|
-
end
|
45
|
-
|
46
|
-
"#{js}\n#{templates}"
|
13
|
+
def render(_context)
|
14
|
+
Jekyll::WebmentionIO.js_handler.render
|
47
15
|
end
|
48
16
|
end
|
49
17
|
end
|
data/lib/jekyll/webmention_io.rb
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
#
|
10
10
|
require_relative "webmention_io/version"
|
11
11
|
require_relative "webmention_io/webmention"
|
12
|
+
require_relative "webmention_io/js_handler"
|
12
13
|
|
13
14
|
require "json"
|
14
15
|
require "net/http"
|
@@ -22,7 +23,7 @@ module Jekyll
|
|
22
23
|
class << self
|
23
24
|
# define simple getters and setters
|
24
25
|
attr_reader :config, :jekyll_config, :cache_files, :cache_folder,
|
25
|
-
:file_prefix, :types
|
26
|
+
:file_prefix, :types, :supported_templates, :js_handler
|
26
27
|
attr_writer :api_suffix
|
27
28
|
end
|
28
29
|
|
@@ -32,7 +33,11 @@ module Jekyll
|
|
32
33
|
@api_endpoint = @api_url
|
33
34
|
@api_suffix = ""
|
34
35
|
|
35
|
-
@types = %w(bookmarks likes links posts replies reposts rsvps)
|
36
|
+
@types = %w(bookmarks likes links posts replies reposts rsvps).freeze
|
37
|
+
@supported_templates = (@types + %w(count webmentions)).freeze
|
38
|
+
|
39
|
+
@template_file_cache = {}
|
40
|
+
@template_content_cache = {}
|
36
41
|
|
37
42
|
EXCEPTIONS = [
|
38
43
|
SocketError, Timeout::Error,
|
@@ -58,10 +63,10 @@ module Jekyll
|
|
58
63
|
"lookups" => cache_file("lookups.yml")
|
59
64
|
}
|
60
65
|
@cache_files.each_value do |file|
|
61
|
-
unless File.exist?(file)
|
62
|
-
dump_yaml(file)
|
63
|
-
end
|
66
|
+
dump_yaml(file) unless File.exist?(file)
|
64
67
|
end
|
68
|
+
|
69
|
+
@js_handler = Jekyll::WebmentionIO::JSHandler.new(site)
|
65
70
|
end
|
66
71
|
|
67
72
|
# Setter
|
@@ -75,17 +80,11 @@ module Jekyll
|
|
75
80
|
end
|
76
81
|
|
77
82
|
def self.get_cache_file_path(key)
|
78
|
-
|
79
|
-
if @cache_files.key? key
|
80
|
-
path = @cache_files[key]
|
81
|
-
end
|
82
|
-
return path
|
83
|
+
@cache_files[key] || false
|
83
84
|
end
|
84
85
|
|
85
86
|
def self.read_cached_webmentions(which)
|
86
|
-
unless %w(incoming outgoing).include?
|
87
|
-
return {}
|
88
|
-
end
|
87
|
+
return {} unless %w(incoming outgoing).include?(which)
|
89
88
|
|
90
89
|
cache_file = get_cache_file_path which
|
91
90
|
load_yaml(cache_file)
|
@@ -136,7 +135,7 @@ module Jekyll
|
|
136
135
|
if source
|
137
136
|
JSON.parse(source)
|
138
137
|
else
|
139
|
-
|
138
|
+
{}
|
140
139
|
end
|
141
140
|
end
|
142
141
|
|
@@ -235,15 +234,36 @@ module Jekyll
|
|
235
234
|
end
|
236
235
|
end
|
237
236
|
|
237
|
+
def self.template_file(template)
|
238
|
+
@template_file_cache[template] ||= begin
|
239
|
+
configured_template = @config.dig("templates", template)
|
240
|
+
if configured_template
|
241
|
+
log "info", "Using custom #{template} template"
|
242
|
+
configured_template
|
243
|
+
else
|
244
|
+
File.expand_path("templates/#{template}.html", __dir__)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
238
249
|
def self.get_template_contents(template)
|
239
|
-
template_file =
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
250
|
+
template_file = template_file(template)
|
251
|
+
@template_content_cache[template_file] ||= begin
|
252
|
+
log "info", "Template file: #{template_file}"
|
253
|
+
File.read(template_file)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def self.html_templates
|
258
|
+
@html_templates ||= begin
|
259
|
+
templates = +"" # unfrozen String
|
260
|
+
supported_templates.each do |template|
|
261
|
+
templates << "<template style=\"display:none\" id=\"webmention-#{template}\">"
|
262
|
+
templates << get_template_contents(template)
|
263
|
+
templates << "</template>"
|
264
|
+
end
|
265
|
+
templates
|
266
|
+
end
|
247
267
|
end
|
248
268
|
|
249
269
|
# Connections
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# (c) Aaron Gustafson
|
4
|
+
# https://github.com/aarongustafson/jekyll-webmention_io
|
5
|
+
# Licence : MIT
|
6
|
+
#
|
7
|
+
|
8
|
+
module Jekyll
|
9
|
+
module WebmentionIO
|
10
|
+
class JSHandler
|
11
|
+
attr_reader :destination, :resource_name, :resource_url
|
12
|
+
|
13
|
+
DEFAULTS = {
|
14
|
+
"destination" => "js",
|
15
|
+
"source" => true,
|
16
|
+
"deploy" => true,
|
17
|
+
"uglify" => true,
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
def initialize(site)
|
21
|
+
js_config = site.config.dig("webmentions", "js")
|
22
|
+
|
23
|
+
@disabled = js_config == false
|
24
|
+
|
25
|
+
js_config = {} unless js_config.is_a?(Hash)
|
26
|
+
js_config = DEFAULTS.merge(js_config)
|
27
|
+
|
28
|
+
@deploy, @uglify, @source, @destination = js_config.values_at("deploy", "uglify", "source", "destination")
|
29
|
+
@resource_name = "JekyllWebmentionIO.js"
|
30
|
+
@resource_url = File.join(
|
31
|
+
"", site.config["baseurl"], @destination, @resource_name
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def disabled?
|
36
|
+
@disabled == true
|
37
|
+
end
|
38
|
+
|
39
|
+
def deploy?
|
40
|
+
@deploy != false
|
41
|
+
end
|
42
|
+
|
43
|
+
def uglify?
|
44
|
+
@uglify != false
|
45
|
+
end
|
46
|
+
|
47
|
+
def source?
|
48
|
+
@source != false
|
49
|
+
end
|
50
|
+
|
51
|
+
def render
|
52
|
+
if disabled?
|
53
|
+
Jekyll::WebmentionIO.log "info",
|
54
|
+
"JavaScript output is disabled, so the {% webmentions_js %} tag is being skipped"
|
55
|
+
return ""
|
56
|
+
end
|
57
|
+
|
58
|
+
js_file = deploy? ? "<script src=\"#@resource_url\" async></script>" : ""
|
59
|
+
|
60
|
+
Jekyll::WebmentionIO.log "info", "Gathering templates for JavaScript."
|
61
|
+
"#{js_file}\n#{Jekyll::WebmentionIO.html_templates}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-webmention_io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Gustafson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -255,6 +255,7 @@ files:
|
|
255
255
|
- lib/jekyll/templates/rsvps.html
|
256
256
|
- lib/jekyll/templates/webmentions.html
|
257
257
|
- lib/jekyll/webmention_io.rb
|
258
|
+
- lib/jekyll/webmention_io/js_handler.rb
|
258
259
|
- lib/jekyll/webmention_io/version.rb
|
259
260
|
- lib/jekyll/webmention_io/webmention.rb
|
260
261
|
homepage: https://github.com/aarongustafson/jekyll-webmention_io
|