jekyll-webmention_io 2.7.0 → 2.8.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/lib/jekyll/assets/{webmention_websocket.js → webmention_websocket.js.disabled} +1 -1
- data/lib/jekyll/commands/webmention.rb +23 -25
- data/lib/jekyll/generators/compile_js.rb +31 -32
- data/lib/jekyll/generators/queue_webmentions.rb +41 -43
- data/lib/jekyll/tags/count.rb +8 -10
- data/lib/jekyll/tags/likes.rb +8 -10
- data/lib/jekyll/tags/links.rb +8 -10
- data/lib/jekyll/tags/posts.rb +9 -11
- data/lib/jekyll/tags/replies.rb +8 -10
- data/lib/jekyll/tags/reposts.rb +9 -11
- data/lib/jekyll/tags/webmentions.rb +5 -7
- data/lib/jekyll/tags/webmentions_head.rb +12 -12
- data/lib/jekyll/tags/webmentions_js.rb +18 -18
- data/lib/jekyll/webmention_io/version.rb +1 -1
- data/lib/jekyll/webmention_io.rb +122 -115
- data/lib/jekyll-webmention_io.rb +3 -3
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9a5fc8540b37c11c6a5c8cabc941a0a8abfb6d28
         | 
| 4 | 
            +
              data.tar.gz: b2c35dd389644a77a84b198efc998dcdc6dc3773
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5ee6dd28ea2cab6e24e6b13c49f32e626188b223824b04da05978ada666ee778673a3d7e299afaa74ae37bddc0b95198914fbb08b066832816198a831e05b837
         | 
| 7 | 
            +
              data.tar.gz: 9ad5fd09b1bbc9d5961647359c10e69bd1654619dc4d42abbf10b7195c71c253a8078fddfc2f9cf73e85948f4ae93e897d9f90d6303d6d119d8ef31dd453bd66
         | 
| @@ -6,7 +6,7 @@ | |
| 6 6 |  | 
| 7 7 | 
             
              if ( ! ( 'JekyllWebmentionIO' in window ) ){ window.JekyllWebmentionIO = {}; }
         | 
| 8 8 |  | 
| 9 | 
            -
              var ws = new WebSocket(' | 
| 9 | 
            +
              var ws = new WebSocket('wss://webmention.io:8080');
         | 
| 10 10 |  | 
| 11 11 | 
             
              ws.onopen = function(){
         | 
| 12 12 | 
             
                // Send the current window URL to the server to register to receive notifications about this URL
         | 
| @@ -1,46 +1,44 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "json"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Jekyll
         | 
| 4 4 | 
             
              module Commands
         | 
| 5 5 | 
             
                class WebmentionCommand < Command
         | 
| 6 | 
            -
                  def self.init_with_program( | 
| 6 | 
            +
                  def self.init_with_program(prog)
         | 
| 7 7 | 
             
                    prog.command(:webmention) do |c|
         | 
| 8 | 
            -
                      c.syntax  | 
| 9 | 
            -
                      c.description  | 
| 10 | 
            -
             | 
| 8 | 
            +
                      c.syntax "webmention"
         | 
| 9 | 
            +
                      c.description "Sends queued webmentions"
         | 
| 10 | 
            +
             | 
| 11 11 | 
             
                      c.action { |args, options| process args, options }
         | 
| 12 12 | 
             
                    end
         | 
| 13 13 | 
             
                  end
         | 
| 14 14 |  | 
| 15 | 
            -
                  def self.process(  | 
| 16 | 
            -
                    if File. | 
| 17 | 
            -
                      Jekyll::WebmentionIO | 
| 15 | 
            +
                  def self.process(_args = [], _options = {})
         | 
| 16 | 
            +
                    if File.exist? "#{Jekyll::WebmentionIO.cache_folder}/#{Jekyll::WebmentionIO.file_prefix}sent.yml"
         | 
| 17 | 
            +
                      Jekyll::WebmentionIO.log "error", "Your outgoing webmentions queue needs to be upgraded. Please re-build your project."
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 | 
             
                    count = 0
         | 
| 20 | 
            -
                    cached_outgoing = Jekyll::WebmentionIO | 
| 21 | 
            -
                    if File. | 
| 22 | 
            -
                      outgoing = open(cached_outgoing) { |f| YAML. | 
| 20 | 
            +
                    cached_outgoing = Jekyll::WebmentionIO.get_cache_file_path "outgoing"
         | 
| 21 | 
            +
                    if File.exist?(cached_outgoing)
         | 
| 22 | 
            +
                      outgoing = open(cached_outgoing) { |f| YAML.safe_load(f) }
         | 
| 23 23 | 
             
                      outgoing.each do |source, targets|
         | 
| 24 24 | 
             
                        targets.each do |target, response|
         | 
| 25 | 
            -
                           | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                              end
         | 
| 36 | 
            -
                            end
         | 
| 25 | 
            +
                          next unless response === false
         | 
| 26 | 
            +
                          if target.index("//") == 0
         | 
| 27 | 
            +
                            target = "http:#{target}"
         | 
| 28 | 
            +
                          end
         | 
| 29 | 
            +
                          endpoint = Jekyll::WebmentionIO.get_webmention_endpoint(target)
         | 
| 30 | 
            +
                          next unless endpoint
         | 
| 31 | 
            +
                          response = Jekyll::WebmentionIO.webmention(source, target, endpoint)
         | 
| 32 | 
            +
                          if response
         | 
| 33 | 
            +
                            outgoing[source][target] = JSON.parse response.body
         | 
| 34 | 
            +
                            count += 1
         | 
| 37 35 | 
             
                          end
         | 
| 38 36 | 
             
                        end
         | 
| 39 37 | 
             
                      end
         | 
| 40 38 | 
             
                      if count > 0
         | 
| 41 | 
            -
                        File.open(cached_outgoing,  | 
| 39 | 
            +
                        File.open(cached_outgoing, "w") { |f| YAML.dump(outgoing, f) }
         | 
| 42 40 | 
             
                      end
         | 
| 43 | 
            -
                      Jekyll::WebmentionIO | 
| 41 | 
            +
                      Jekyll::WebmentionIO.log "info", "#{count} webmentions sent."
         | 
| 44 42 | 
             
                    end # file exists (outgoing)
         | 
| 45 43 | 
             
                  end # def process
         | 
| 46 44 | 
             
                end # WebmentionCommand
         | 
| @@ -1,56 +1,55 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  This generator gathers webmentions of your pages
         | 
| 6 6 | 
             
            #
         | 
| 7 7 |  | 
| 8 | 
            -
            require  | 
| 8 | 
            +
            require "uglifier"
         | 
| 9 9 |  | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class JavaScriptFile < StaticFile
         | 
| 13 13 | 
             
                  def destination_rel_dir
         | 
| 14 14 | 
             
                    config = {
         | 
| 15 | 
            -
                       | 
| 15 | 
            +
                      "destination" => "js",
         | 
| 16 16 | 
             
                    }
         | 
| 17 | 
            -
                    js_config = Jekyll::WebmentionIO | 
| 17 | 
            +
                    js_config = Jekyll::WebmentionIO.config["js"] || {}
         | 
| 18 18 | 
             
                    config = config.merge(js_config)
         | 
| 19 | 
            -
                    config[ | 
| 19 | 
            +
                    config["destination"]
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| 23 23 | 
             
                using StringInflection
         | 
| 24 24 | 
             
                class CompileJS < Generator
         | 
| 25 | 
            -
                  
         | 
| 26 25 | 
             
                  safe true
         | 
| 27 26 | 
             
                  priority :low
         | 
| 28 | 
            -
             | 
| 27 | 
            +
             | 
| 29 28 | 
             
                  def generate(site)
         | 
| 30 | 
            -
                    if site.config.dig( | 
| 31 | 
            -
                      Jekyll::WebmentionIO | 
| 29 | 
            +
                    if site.config.dig("webmentions", "js") == false
         | 
| 30 | 
            +
                      Jekyll::WebmentionIO.log "info", "Skipping JavaScript inclusion."
         | 
| 32 31 | 
             
                      return
         | 
| 33 32 | 
             
                    end
         | 
| 34 33 |  | 
| 35 34 | 
             
                    config = {
         | 
| 36 | 
            -
                       | 
| 37 | 
            -
                       | 
| 35 | 
            +
                      "destination" => "js",
         | 
| 36 | 
            +
                      "uglify"      => true,
         | 
| 38 37 | 
             
                    }
         | 
| 39 | 
            -
                    site_config = site.config.dig( | 
| 40 | 
            -
             | 
| 38 | 
            +
                    site_config = site.config.dig("webmentions", "js") || {}
         | 
| 39 | 
            +
             | 
| 41 40 | 
             
                    config = config.merge(site_config)
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    source = File.join(File.dirname(File.expand_path(__FILE__)),  | 
| 44 | 
            -
             | 
| 45 | 
            -
                    javascript =  | 
| 41 | 
            +
             | 
| 42 | 
            +
                    source = File.join(File.dirname(File.expand_path(__FILE__)), "../assets/")
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    javascript = ""
         | 
| 46 45 | 
             
                    Dir["#{source}/*.js"].each do |file|
         | 
| 47 | 
            -
                      handler = File.open(file,  | 
| 46 | 
            +
                      handler = File.open(file, "rb")
         | 
| 48 47 | 
             
                      javascript << File.read(handler)
         | 
| 49 48 | 
             
                    end
         | 
| 50 | 
            -
             | 
| 49 | 
            +
             | 
| 51 50 | 
             
                    # Dump in types
         | 
| 52 51 | 
             
                    js_types = []
         | 
| 53 | 
            -
                    Jekyll::WebmentionIO | 
| 52 | 
            +
                    Jekyll::WebmentionIO.types.each do |type|
         | 
| 54 53 | 
             
                      js_types.push "'#{type}': '#{type.to_singular}'"
         | 
| 55 54 | 
             
                    end
         | 
| 56 55 | 
             
                    types_js = <<-EOF
         | 
| @@ -59,25 +58,25 @@ module Jekyll | |
| 59 58 | 
             
                        JekyllWebmentionIO.types = { TYPES };
         | 
| 60 59 | 
             
                      }(this, this.JekyllWebmentionIO));
         | 
| 61 60 | 
             
                    EOF
         | 
| 62 | 
            -
                    javascript << types_js.sub( | 
| 63 | 
            -
             | 
| 64 | 
            -
                    unless config[ | 
| 61 | 
            +
                    javascript << types_js.sub(%r!TYPES!, js_types.join(","))
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    unless config["uglify"] == false
         | 
| 65 64 | 
             
                      uglify_config = {
         | 
| 66 | 
            -
                        :harmony => true
         | 
| 65 | 
            +
                        :harmony => true,
         | 
| 67 66 | 
             
                      }
         | 
| 68 67 | 
             
                      javascript = Uglifier.new(uglify_config).compile(javascript)
         | 
| 69 68 | 
             
                    end
         | 
| 70 69 |  | 
| 71 70 | 
             
                    # Generate the file
         | 
| 72 | 
            -
                    file_name =  | 
| 73 | 
            -
                    source_file_destination = ( | 
| 74 | 
            -
                    Dir.mkdir( | 
| 75 | 
            -
                    File.open("#{source_file_destination}/#{file_name}",  | 
| 76 | 
            -
                    unless config[ | 
| 77 | 
            -
                      js_file = Jekyll::WebmentionIO::JavaScriptFile.new(site, source_file_destination,  | 
| 71 | 
            +
                    file_name = "JekyllWebmentionIO.js"
         | 
| 72 | 
            +
                    source_file_destination = (config["source"] == false ? Dir.mktmpdir : "#{site.config["source"]}/#{config["destination"]}")
         | 
| 73 | 
            +
                    Dir.mkdir(source_file_destination) unless File.exist?(source_file_destination)
         | 
| 74 | 
            +
                    File.open("#{source_file_destination}/#{file_name}", "w") { |f| f.write(javascript) }
         | 
| 75 | 
            +
                    unless config["deploy"] == false
         | 
| 76 | 
            +
                      js_file = Jekyll::WebmentionIO::JavaScriptFile.new(site, source_file_destination, "", file_name)
         | 
| 78 77 | 
             
                      site.static_files << js_file
         | 
| 79 78 | 
             
                    end
         | 
| 80 79 | 
             
                  end
         | 
| 81 80 | 
             
                end
         | 
| 82 81 | 
             
              end
         | 
| 83 | 
            -
            end
         | 
| 82 | 
            +
            end
         | 
| @@ -1,41 +1,40 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  This generator caches sites you mention so they can be mentioned
         | 
| 6 6 | 
             
            #
         | 
| 7 7 |  | 
| 8 8 | 
             
            module Jekyll
         | 
| 9 9 | 
             
              class QueueWebmentions < Generator
         | 
| 10 | 
            -
             | 
| 11 10 | 
             
                safe true
         | 
| 12 11 | 
             
                priority :low
         | 
| 13 | 
            -
             | 
| 12 | 
            +
             | 
| 14 13 | 
             
                def generate(site)
         | 
| 15 | 
            -
                  if site.config.dig( | 
| 16 | 
            -
                    Jekyll::WebmentionIO | 
| 14 | 
            +
                  if site.config.dig("webmentions", "pause_lookups") == true
         | 
| 15 | 
            +
                    Jekyll::WebmentionIO.log "info", "Webmention lookups are currently paused."
         | 
| 17 16 | 
             
                    return
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  Jekyll::WebmentionIO | 
| 19 | 
            +
                  Jekyll::WebmentionIO.log "info", "Beginning to gather webmentions you’ve made. This may take a while."
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  upgrade_outgoing_webmention_cache
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  cache_file = Jekyll::WebmentionIO.get_cache_file_path "outgoing"
         | 
| 24 | 
            +
                  webmentions = open(cache_file) { |f| YAML.safe_load(f) }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  posts = if Jekyll::VERSION >= "3.0.0"
         | 
| 27 | 
            +
                            site.posts.docs
         | 
| 28 | 
            +
                          else
         | 
| 29 | 
            +
                            site.posts
         | 
| 30 | 
            +
                          end
         | 
| 21 31 |  | 
| 22 | 
            -
                  upgrade_outgoing_webmention_cache()
         | 
| 23 | 
            -
                  
         | 
| 24 | 
            -
                  cache_file = Jekyll::WebmentionIO::get_cache_file_path 'outgoing'
         | 
| 25 | 
            -
                  webmentions = open(cache_file) { |f| YAML.load(f) }
         | 
| 26 | 
            -
                  
         | 
| 27 | 
            -
                  if Jekyll::VERSION >= "3.0.0"
         | 
| 28 | 
            -
                    posts = site.posts.docs
         | 
| 29 | 
            -
                  else
         | 
| 30 | 
            -
                    posts = site.posts
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
                    
         | 
| 33 32 | 
             
                  posts.each do |post|
         | 
| 34 | 
            -
                    uri = "#{site.config[ | 
| 33 | 
            +
                    uri = "#{site.config["url"]}#{post.url}"
         | 
| 35 34 | 
             
                    mentions = get_mentioned_uris(post)
         | 
| 36 | 
            -
                    if webmentions. | 
| 35 | 
            +
                    if webmentions.key? uri
         | 
| 37 36 | 
             
                      mentions.each do |mentioned_uri, response|
         | 
| 38 | 
            -
                        unless webmentions[uri]. | 
| 37 | 
            +
                        unless webmentions[uri].key? mentioned_uri
         | 
| 39 38 | 
             
                          webmentions[uri][mentioned_uri] = response
         | 
| 40 39 | 
             
                        end
         | 
| 41 40 | 
             
                      end
         | 
| @@ -44,50 +43,49 @@ module Jekyll | |
| 44 43 | 
             
                    end
         | 
| 45 44 | 
             
                  end
         | 
| 46 45 |  | 
| 47 | 
            -
                  cache_file = Jekyll::WebmentionIO | 
| 48 | 
            -
                  File.open(cache_file,  | 
| 46 | 
            +
                  cache_file = Jekyll::WebmentionIO.get_cache_file_path "outgoing"
         | 
| 47 | 
            +
                  File.open(cache_file, "w") { |f| YAML.dump(webmentions, f) }
         | 
| 49 48 |  | 
| 50 | 
            -
                  Jekyll::WebmentionIO | 
| 49 | 
            +
                  Jekyll::WebmentionIO.log "info", "Webmentions have been gathered and cached."
         | 
| 51 50 | 
             
                end
         | 
| 52 51 |  | 
| 53 52 | 
             
                def upgrade_outgoing_webmention_cache
         | 
| 54 | 
            -
                  old_sent_file = "#{Jekyll::WebmentionIO | 
| 55 | 
            -
                  old_outgoing_file = "#{Jekyll::WebmentionIO | 
| 56 | 
            -
                  unless File. | 
| 53 | 
            +
                  old_sent_file = "#{Jekyll::WebmentionIO.cache_folder}/#{Jekyll::WebmentionIO.file_prefix}sent.yml"
         | 
| 54 | 
            +
                  old_outgoing_file = "#{Jekyll::WebmentionIO.cache_folder}/#{Jekyll::WebmentionIO.file_prefix}queued.yml"
         | 
| 55 | 
            +
                  unless File.exist? old_sent_file
         | 
| 57 56 | 
             
                    return
         | 
| 58 57 | 
             
                  end
         | 
| 59 | 
            -
                  sent_webmentions = open(old_sent_file) { |f| YAML. | 
| 60 | 
            -
                  outgoing_webmentions = open(old_outgoing_file) { |f| YAML. | 
| 58 | 
            +
                  sent_webmentions = open(old_sent_file) { |f| YAML.safe_load(f) }
         | 
| 59 | 
            +
                  outgoing_webmentions = open(old_outgoing_file) { |f| YAML.safe_load(f) }
         | 
| 61 60 | 
             
                  merged = {}
         | 
| 62 61 | 
             
                  outgoing_webmentions.each do |source_url, webmentions|
         | 
| 63 62 | 
             
                    collection = {}
         | 
| 64 63 | 
             
                    webmentions.each do |target_url|
         | 
| 65 | 
            -
                      if sent_webmentions.dig( | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 64 | 
            +
                      collection[target_url] = if sent_webmentions.dig(source_url, target_url)
         | 
| 65 | 
            +
                                                 ""
         | 
| 66 | 
            +
                                               else
         | 
| 67 | 
            +
                                                 false
         | 
| 68 | 
            +
                                               end
         | 
| 70 69 | 
             
                    end
         | 
| 71 70 | 
             
                    merged[source_url] = collection
         | 
| 72 71 | 
             
                  end
         | 
| 73 | 
            -
                  cached_outgoing = Jekyll::WebmentionIO | 
| 74 | 
            -
                  File.open(cached_outgoing,  | 
| 72 | 
            +
                  cached_outgoing = Jekyll::WebmentionIO.get_cache_file_path "outgoing"
         | 
| 73 | 
            +
                  File.open(cached_outgoing, "w") { |f| YAML.dump(merged, f) }
         | 
| 75 74 | 
             
                  File.delete old_sent_file, old_outgoing_file
         | 
| 76 | 
            -
                  Jekyll::WebmentionIO | 
| 77 | 
            -
                end | 
| 75 | 
            +
                  Jekyll::WebmentionIO.log "info", "Upgraded your sent webmentions cache."
         | 
| 76 | 
            +
                end
         | 
| 78 77 |  | 
| 79 78 | 
             
                def get_mentioned_uris(post)
         | 
| 80 79 | 
             
                  uris = {}
         | 
| 81 | 
            -
                  if post.data[ | 
| 82 | 
            -
                    uris[post.data[ | 
| 80 | 
            +
                  if post.data["in_reply_to"]
         | 
| 81 | 
            +
                    uris[post.data["in_reply_to"]] = false
         | 
| 83 82 | 
             
                  end
         | 
| 84 83 | 
             
                  post.content.scan(/(?:https?:)?\/\/[^\s)#"]+/) do |match|
         | 
| 85 | 
            -
                    unless uris. | 
| 84 | 
            +
                    unless uris.key? match
         | 
| 86 85 | 
             
                      uris[match] = false
         | 
| 87 86 | 
             
                    end
         | 
| 88 87 | 
             
                  end
         | 
| 89 88 | 
             
                  return uris
         | 
| 90 89 | 
             
                end
         | 
| 91 | 
            -
                
         | 
| 92 90 | 
             
              end
         | 
| 93 | 
            -
            end
         | 
| 91 | 
            +
            end
         | 
    
        data/lib/jekyll/tags/count.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_count post.url [ likes | links | posts | replies | reposts ]*   %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionCountTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 14 | 
             
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "count"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, types)
         | 
| 20 | 
            +
                    @data = { "count" => data.length, "types" => types }
         | 
| 22 21 | 
             
                  end
         | 
| 23 | 
            -
             | 
| 24 22 | 
             
                end
         | 
| 25 23 | 
             
              end
         | 
| 26 24 | 
             
            end
         | 
| 27 25 |  | 
| 28 | 
            -
            Liquid::Template.register_tag( | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 26 | 
            +
            Liquid::Template.register_tag("webmention_count", Jekyll::WebmentionIO::WebmentionCountTag)
         | 
| 27 | 
            +
            Liquid::Template.register_tag("webmentions_count", Jekyll::WebmentionIO::WebmentionCountTag)
         | 
    
        data/lib/jekyll/tags/likes.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_likes post.url %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionLikesTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 14 | 
             
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "likes"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    webmentions = extract_type  | 
| 22 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, _types)
         | 
| 20 | 
            +
                    webmentions = extract_type "likes", data
         | 
| 21 | 
            +
                    @data = { "webmentions" => webmentions.values }
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 27 | 
            +
            Liquid::Template.register_tag("webmention_likes", Jekyll::WebmentionIO::WebmentionLikesTag)
         | 
    
        data/lib/jekyll/tags/links.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_links post.url %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionLinksTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 14 | 
             
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "links"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    webmentions = extract_type  | 
| 22 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, _types)
         | 
| 20 | 
            +
                    webmentions = extract_type "links", data
         | 
| 21 | 
            +
                    @data = { "webmentions" => webmentions.values }
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 27 | 
            +
            Liquid::Template.register_tag("webmention_links", Jekyll::WebmentionIO::WebmentionLinksTag)
         | 
    
        data/lib/jekyll/tags/posts.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_posts post.url %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionRepostsTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 | 
            -
                    super | 
| 14 | 
            +
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "posts"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    webmentions = extract_type  | 
| 22 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, _types)
         | 
| 20 | 
            +
                    webmentions = extract_type "posts", data
         | 
| 21 | 
            +
                    @data = { "webmentions" => webmentions.values }
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 27 | 
            +
            Liquid::Template.register_tag("webmention_posts", Jekyll::WebmentionIO::WebmentionRepostsTag)
         | 
    
        data/lib/jekyll/tags/replies.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_replies post.url %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionRepliesTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 14 | 
             
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "replies"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    webmentions = extract_type  | 
| 22 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, _types)
         | 
| 20 | 
            +
                    webmentions = extract_type "replies", data
         | 
| 21 | 
            +
                    @data = { "webmentions" => webmentions.values }
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 27 | 
            +
            Liquid::Template.register_tag("webmention_replies", Jekyll::WebmentionIO::WebmentionRepliesTag)
         | 
    
        data/lib/jekyll/tags/reposts.rb
    CHANGED
    
    | @@ -1,29 +1,27 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmention_reposts post.url %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionRepostsTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 | 
            -
                    super | 
| 14 | 
            +
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "reposts"
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 | 
            -
                  def set_data( | 
| 21 | 
            -
                    webmentions = extract_type  | 
| 22 | 
            -
                    @data = {  | 
| 19 | 
            +
                  def set_data(data, _types)
         | 
| 20 | 
            +
                    webmentions = extract_type "reposts", data
         | 
| 21 | 
            +
                    @data = { "webmentions" => webmentions.values }
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| 28 26 |  | 
| 29 | 
            -
            Liquid::Template.register_tag( | 
| 27 | 
            +
            Liquid::Template.register_tag("webmention_reposts", Jekyll::WebmentionIO::WebmentionRepostsTag)
         | 
| @@ -1,24 +1,22 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 7 | 
             
            #
         | 
| 8 8 | 
             
            #    {% webmentions post.url [ likes | links | posts | replies | reposts ]*  %}
         | 
| 9 | 
            -
            # | 
| 9 | 
            +
            #
         | 
| 10 10 | 
             
            module Jekyll
         | 
| 11 11 | 
             
              module WebmentionIO
         | 
| 12 12 | 
             
                class WebmentionsTag < Jekyll::WebmentionIO::WebmentionTag
         | 
| 13 | 
            -
                
         | 
| 14 13 | 
             
                  def initialize(tagName, text, tokens)
         | 
| 15 14 | 
             
                    super
         | 
| 16 15 | 
             
                    @text = text
         | 
| 17 | 
            -
                    set_template  | 
| 16 | 
            +
                    set_template "webmentions"
         | 
| 18 17 | 
             
                  end
         | 
| 19 | 
            -
             | 
| 20 18 | 
             
                end
         | 
| 21 19 | 
             
              end
         | 
| 22 20 | 
             
            end
         | 
| 23 21 |  | 
| 24 | 
            -
            Liquid::Template.register_tag( | 
| 22 | 
            +
            Liquid::Template.register_tag("webmentions", Jekyll::WebmentionIO::WebmentionsTag)
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  Stuff for the `head`
         | 
| 6 6 | 
             
            #
         | 
| 7 7 |  | 
| @@ -9,23 +9,23 @@ module Jekyll | |
| 9 9 | 
             
              module WebmentionIO
         | 
| 10 10 | 
             
                class WebmentionHeadTag < Liquid::Tag
         | 
| 11 11 | 
             
                  def render(context)
         | 
| 12 | 
            -
                    head =  | 
| 12 | 
            +
                    head = ""
         | 
| 13 13 | 
             
                    head << '<link rel="dns-prefetch" href="https://webmention.io">'
         | 
| 14 14 | 
             
                    head << '<link rel="preconnect" href="https://webmention.io">'
         | 
| 15 15 | 
             
                    head << '<link rel="preconnect" href="ws://webmention.io:8080">'
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    page = context[ | 
| 16 | 
            +
             | 
| 17 | 
            +
                    page = context["page"]
         | 
| 18 18 | 
             
                    site = context.registers[:site]
         | 
| 19 | 
            -
                    if page[ | 
| 20 | 
            -
                      if page[ | 
| 21 | 
            -
                        redirect = site.config[ | 
| 22 | 
            -
                      elsif page[ | 
| 23 | 
            -
                        redirect = site.config[ | 
| 19 | 
            +
                    if page["redirect_from"]
         | 
| 20 | 
            +
                      if page["redirect_from"].is_a? String
         | 
| 21 | 
            +
                        redirect = site.config["url"] + page["redirect_from"]
         | 
| 22 | 
            +
                      elsif page["redirect_from"].is_a? Array
         | 
| 23 | 
            +
                        redirect = site.config["url"] + page["redirect_from"].join(",#{site.config["url"]}")
         | 
| 24 24 | 
             
                      end
         | 
| 25 25 | 
             
                      head << "<meta property=\"webmention:redirected_from\" content=\"#{redirect}\">"
         | 
| 26 26 | 
             
                    end
         | 
| 27 27 |  | 
| 28 | 
            -
                    username = site.config.dig( | 
| 28 | 
            +
                    username = site.config.dig("webmentions", "username")
         | 
| 29 29 | 
             
                    if username
         | 
| 30 30 | 
             
                      head << "<link rel=\"pingback\" href=\"https://webmention.io/#{username}/xmlrpc\">"
         | 
| 31 31 | 
             
                      head << "<link rel=\"webmention\" href=\"https://webmention.io/#{username}/webmention\">"
         | 
| @@ -37,4 +37,4 @@ module Jekyll | |
| 37 37 | 
             
              end
         | 
| 38 38 | 
             
            end
         | 
| 39 39 |  | 
| 40 | 
            -
            Liquid::Template.register_tag( | 
| 40 | 
            +
            Liquid::Template.register_tag("webmentions_head", Jekyll::WebmentionIO::WebmentionHeadTag)
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  JS stuff
         | 
| 6 6 | 
             
            #
         | 
| 7 7 |  | 
| @@ -12,37 +12,37 @@ module Jekyll | |
| 12 12 | 
             
                    site = context.registers[:site]
         | 
| 13 13 |  | 
| 14 14 | 
             
                    # JS can be turned off too
         | 
| 15 | 
            -
                    if site.config.dig( | 
| 16 | 
            -
                      Jekyll::WebmentionIO | 
| 17 | 
            -
                      return  | 
| 15 | 
            +
                    if site.config.dig("webmentions", "js") == false
         | 
| 16 | 
            +
                      Jekyll::WebmentionIO.log "info", "JavaScript output is disabled, so the {% webmentions_js %} tag is being skipped"
         | 
| 17 | 
            +
                      return ""
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 |  | 
| 20 20 | 
             
                    config = {
         | 
| 21 | 
            -
                       | 
| 22 | 
            -
                       | 
| 21 | 
            +
                      "destination" => "js",
         | 
| 22 | 
            +
                      "uglify"      => true,
         | 
| 23 23 | 
             
                    }
         | 
| 24 | 
            -
                    site_config = site.config.dig( | 
| 24 | 
            +
                    site_config = site.config.dig("webmentions", "js") || {}
         | 
| 25 25 | 
             
                    config = config.merge(site_config)
         | 
| 26 26 |  | 
| 27 27 | 
             
                    # JS file
         | 
| 28 | 
            -
                    js =  | 
| 29 | 
            -
                    unless config[ | 
| 30 | 
            -
                      js_file_path = "#{site.config[ | 
| 28 | 
            +
                    js = ""
         | 
| 29 | 
            +
                    unless config["deploy"] == false
         | 
| 30 | 
            +
                      js_file_path = "#{site.config["baseurl"]}/#{config["destination"]}/JekyllWebmentionIO.js"
         | 
| 31 31 | 
             
                      js << "<script src=\"#{js_file_path}\" async></script>"
         | 
| 32 32 | 
             
                    end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                    templates =  | 
| 35 | 
            -
                    template_files = Jekyll::WebmentionIO | 
| 33 | 
            +
             | 
| 34 | 
            +
                    templates = ""
         | 
| 35 | 
            +
                    template_files = Jekyll::WebmentionIO.types + %w(count webmentions)
         | 
| 36 36 | 
             
                    template_files.each do |template|
         | 
| 37 37 | 
             
                      templates << "<template style=\"display:none\" id=\"webmention-#{template}\">"
         | 
| 38 | 
            -
                      templates << Jekyll::WebmentionIO | 
| 39 | 
            -
                      templates <<  | 
| 38 | 
            +
                      templates << Jekyll::WebmentionIO.get_template_contents(template)
         | 
| 39 | 
            +
                      templates << "</template>"
         | 
| 40 40 | 
             
                    end
         | 
| 41 | 
            -
             | 
| 41 | 
            +
             | 
| 42 42 | 
             
                    "#{js}\n#{templates}"
         | 
| 43 43 | 
             
                  end
         | 
| 44 44 | 
             
                end
         | 
| 45 45 | 
             
              end
         | 
| 46 46 | 
             
            end
         | 
| 47 47 |  | 
| 48 | 
            -
            Liquid::Template.register_tag( | 
| 48 | 
            +
            Liquid::Template.register_tag("webmentions_js", Jekyll::WebmentionIO::WebmentionJSTag)
         | 
    
        data/lib/jekyll/webmention_io.rb
    CHANGED
    
    | @@ -1,50 +1,50 @@ | |
| 1 1 | 
             
            #  (c) Aaron Gustafson
         | 
| 2 | 
            -
            #  https://github.com/aarongustafson/jekyll-webmention_io | 
| 2 | 
            +
            #  https://github.com/aarongustafson/jekyll-webmention_io
         | 
| 3 3 | 
             
            #  Licence : MIT
         | 
| 4 | 
            -
            # | 
| 4 | 
            +
            #
         | 
| 5 5 | 
             
            #  this liquid plugin insert a webmentions into your Octopress or Jekill blog
         | 
| 6 6 | 
             
            #  using http://webmention.io/ and the following syntax:
         | 
| 7 | 
            -
            # | 
| 8 | 
            -
            require_relative  | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            require_relative "webmention_io/version"
         | 
| 9 9 |  | 
| 10 | 
            -
            require  | 
| 11 | 
            -
            require  | 
| 12 | 
            -
            require  | 
| 13 | 
            -
            require  | 
| 14 | 
            -
            require  | 
| 15 | 
            -
            require  | 
| 10 | 
            +
            require "json"
         | 
| 11 | 
            +
            require "net/http"
         | 
| 12 | 
            +
            require "uri"
         | 
| 13 | 
            +
            require "openssl"
         | 
| 14 | 
            +
            require "string_inflection"
         | 
| 15 | 
            +
            require "webmention"
         | 
| 16 16 |  | 
| 17 17 | 
             
            module Jekyll
         | 
| 18 18 | 
             
              module WebmentionIO
         | 
| 19 | 
            -
                
         | 
| 20 | 
            -
                @logger_prefix = '[jekyll-webmention_io]'
         | 
| 21 19 |  | 
| 22 | 
            -
                @ | 
| 20 | 
            +
                @logger_prefix = "[jekyll-webmention_io]"
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                @api_url = "https://webmention.io/api"
         | 
| 23 23 | 
             
                @api_endpoint = @api_url
         | 
| 24 | 
            -
                @api_suffix =  | 
| 25 | 
            -
             | 
| 26 | 
            -
                @types =  | 
| 24 | 
            +
                @api_suffix = ""
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                @types = %w(likes links posts replies reposts)
         | 
| 27 27 |  | 
| 28 | 
            -
                def self.bootstrap | 
| 28 | 
            +
                def self.bootstrap
         | 
| 29 29 | 
             
                  # @jekyll_config = Jekyll.configuration({ 'quiet' => true })
         | 
| 30 | 
            -
                  @jekyll_config = Jekyll | 
| 31 | 
            -
                  @config = @jekyll_config[ | 
| 32 | 
            -
             | 
| 30 | 
            +
                  @jekyll_config = Jekyll.configuration({})
         | 
| 31 | 
            +
                  @config = @jekyll_config["webmentions"] || {}
         | 
| 32 | 
            +
             | 
| 33 33 | 
             
                  # Set up the cache folder & files
         | 
| 34 | 
            -
                  @cache_folder = @config[ | 
| 35 | 
            -
                  Dir.mkdir(@cache_folder) unless File. | 
| 36 | 
            -
                  @file_prefix =  | 
| 37 | 
            -
                   | 
| 38 | 
            -
                    @file_prefix =  | 
| 34 | 
            +
                  @cache_folder = @config["cache_folder"] || ".jekyll-cache"
         | 
| 35 | 
            +
                  Dir.mkdir(@cache_folder) unless File.exist?(@cache_folder)
         | 
| 36 | 
            +
                  @file_prefix = ""
         | 
| 37 | 
            +
                  unless @cache_folder.include? "webmention"
         | 
| 38 | 
            +
                    @file_prefix = "webmention_io_"
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 | 
             
                  @cache_files = {
         | 
| 41 | 
            -
                     | 
| 42 | 
            -
                     | 
| 43 | 
            -
                     | 
| 41 | 
            +
                    "incoming" => "#{@cache_folder}/#{@file_prefix}received.yml",
         | 
| 42 | 
            +
                    "outgoing" => "#{@cache_folder}/#{@file_prefix}outgoing.yml",
         | 
| 43 | 
            +
                    "bad_uris" => "#{@cache_folder}/#{@file_prefix}bad_uris.yml",
         | 
| 44 44 | 
             
                  }
         | 
| 45 | 
            -
                  @cache_files.each do | | 
| 46 | 
            -
                     | 
| 47 | 
            -
                      File.open(file,  | 
| 45 | 
            +
                  @cache_files.each do |_key, file|
         | 
| 46 | 
            +
                    unless File.exist?(file)
         | 
| 47 | 
            +
                      File.open(file, "w") { |f| YAML.dump({}, f) }
         | 
| 48 48 | 
             
                    end
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 | 
             
                end
         | 
| @@ -53,41 +53,46 @@ module Jekyll | |
| 53 53 | 
             
                def self.config
         | 
| 54 54 | 
             
                  @config
         | 
| 55 55 | 
             
                end
         | 
| 56 | 
            +
             | 
| 56 57 | 
             
                def self.jekyll_config
         | 
| 57 58 | 
             
                  @jekyll_config
         | 
| 58 59 | 
             
                end
         | 
| 60 | 
            +
             | 
| 59 61 | 
             
                def self.cache_files
         | 
| 60 62 | 
             
                  @cache_files
         | 
| 61 63 | 
             
                end
         | 
| 64 | 
            +
             | 
| 62 65 | 
             
                def self.cache_folder
         | 
| 63 66 | 
             
                  @cache_folder
         | 
| 64 67 | 
             
                end
         | 
| 68 | 
            +
             | 
| 65 69 | 
             
                def self.file_prefix
         | 
| 66 70 | 
             
                  @file_prefix
         | 
| 67 71 | 
             
                end
         | 
| 72 | 
            +
             | 
| 68 73 | 
             
                def self.types
         | 
| 69 74 | 
             
                  @types
         | 
| 70 75 | 
             
                end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                def self.get_cache_file_path( | 
| 76 | 
            +
             | 
| 77 | 
            +
                def self.get_cache_file_path(key)
         | 
| 73 78 | 
             
                  path = false
         | 
| 74 | 
            -
                  if @cache_files. | 
| 79 | 
            +
                  if @cache_files.key? key
         | 
| 75 80 | 
             
                    path = @cache_files[key]
         | 
| 76 81 | 
             
                  end
         | 
| 77 82 | 
             
                  return path
         | 
| 78 83 | 
             
                end
         | 
| 79 84 |  | 
| 80 85 | 
             
                # API helpers
         | 
| 81 | 
            -
                #def uri_params_for(api_params)
         | 
| 86 | 
            +
                # def uri_params_for(api_params)
         | 
| 82 87 | 
             
                #  api_params.keys.sort.map do |k|
         | 
| 83 88 | 
             
                #    "#{CGI::escape(k)}=#{CGI::escape(api_params[k])}"
         | 
| 84 89 | 
             
                #  end.join('&')
         | 
| 85 | 
            -
                #end
         | 
| 90 | 
            +
                # end
         | 
| 86 91 |  | 
| 87 92 | 
             
                def self.set_api_endpoint(path)
         | 
| 88 93 | 
             
                  @api_endpoint = "#{@api_url}/#{path}"
         | 
| 89 94 | 
             
                end
         | 
| 90 | 
            -
             | 
| 95 | 
            +
             | 
| 91 96 | 
             
                def self.set_api_suffix(suffix)
         | 
| 92 97 | 
             
                  @api_suffix = suffix
         | 
| 93 98 | 
             
                end
         | 
| @@ -104,108 +109,110 @@ module Jekyll | |
| 104 109 |  | 
| 105 110 | 
             
                # allowed throttles: last_week, last_month, last_year, older
         | 
| 106 111 | 
             
                # allowed values:  daily, weekly, monthly, yearly, every X days|weeks|months|years
         | 
| 107 | 
            -
                def self.post_should_be_throttled?( | 
| 108 | 
            -
                  throttles = @config.dig( | 
| 112 | 
            +
                def self.post_should_be_throttled?(post, item_date, last_webmention_date)
         | 
| 113 | 
            +
                  throttles = @config.dig("throttle_lookups")
         | 
| 109 114 | 
             
                  if throttles && item_date && last_webmention_date
         | 
| 110 | 
            -
                    age = get_timeframe_from_date( | 
| 111 | 
            -
                    throttle = throttles.dig( | 
| 112 | 
            -
                    if throttle && get_date_from_string( | 
| 113 | 
            -
                      log  | 
| 115 | 
            +
                    age = get_timeframe_from_date(item_date)
         | 
| 116 | 
            +
                    throttle = throttles.dig(age)
         | 
| 117 | 
            +
                    if throttle && get_date_from_string(throttle) >= Date.parse(last_webmention_date)
         | 
| 118 | 
            +
                      log "info", "Throttling #{post.data["title"]} (Only checking it #{throttle})"
         | 
| 114 119 | 
             
                      return true
         | 
| 115 120 | 
             
                    end
         | 
| 116 121 | 
             
                  end
         | 
| 117 | 
            -
                  return false | 
| 122 | 
            +
                  return false
         | 
| 118 123 | 
             
                end
         | 
| 119 | 
            -
             | 
| 124 | 
            +
             | 
| 125 | 
            +
                def self.get_timeframe_from_date(time)
         | 
| 120 126 | 
             
                  date = time.to_date
         | 
| 121 127 | 
             
                  timeframes = {
         | 
| 122 | 
            -
                     | 
| 123 | 
            -
                     | 
| 124 | 
            -
                     | 
| 128 | 
            +
                    "last_week"  => "weekly",
         | 
| 129 | 
            +
                    "last_month" => "monthly",
         | 
| 130 | 
            +
                    "last_year"  => "yearly",
         | 
| 125 131 | 
             
                  }
         | 
| 126 132 | 
             
                  timeframe = nil
         | 
| 127 133 | 
             
                  timeframes.each do |key, value|
         | 
| 128 | 
            -
                    if date.to_date > get_date_from_string( | 
| 134 | 
            +
                    if date.to_date > get_date_from_string(value)
         | 
| 129 135 | 
             
                      timeframe = key
         | 
| 130 136 | 
             
                      break
         | 
| 131 137 | 
             
                    end
         | 
| 132 138 | 
             
                  end
         | 
| 133 | 
            -
                   | 
| 134 | 
            -
                    timeframe =  | 
| 139 | 
            +
                  unless timeframe
         | 
| 140 | 
            +
                    timeframe = "older"
         | 
| 135 141 | 
             
                  end
         | 
| 136 142 | 
             
                  return timeframe
         | 
| 137 143 | 
             
                end
         | 
| 144 | 
            +
             | 
| 138 145 | 
             
                # supported: daily, weekly, monthly, yearly, every X days|weeks|months|years
         | 
| 139 | 
            -
                def self.get_date_from_string( | 
| 146 | 
            +
                def self.get_date_from_string(text)
         | 
| 140 147 | 
             
                  today = Date.today
         | 
| 141 | 
            -
                  pattern =  | 
| 142 | 
            -
                  matches = text.match( | 
| 143 | 
            -
                   | 
| 144 | 
            -
                    if text ==  | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
                    matches = text.match( | 
| 148 | 
            +
                  pattern = %r!every\s(?:(\d+)\s)?(day|week|month|year)s?!
         | 
| 149 | 
            +
                  matches = text.match(pattern)
         | 
| 150 | 
            +
                  unless matches
         | 
| 151 | 
            +
                    text = if text == "daily"
         | 
| 152 | 
            +
                             "every 1 day"
         | 
| 153 | 
            +
                           else
         | 
| 154 | 
            +
                             "every 1 " + text.sub("ly", "")
         | 
| 155 | 
            +
                           end
         | 
| 156 | 
            +
                    matches = text.match(pattern)
         | 
| 150 157 | 
             
                  end
         | 
| 151 158 | 
             
                  n = matches[1] ? matches[1].to_i : 1
         | 
| 152 159 | 
             
                  unit = matches[2]
         | 
| 153 160 | 
             
                  # weeks aren't natively supported in Ruby
         | 
| 154 | 
            -
                  if unit ==  | 
| 155 | 
            -
                    n  | 
| 156 | 
            -
                    unit =  | 
| 161 | 
            +
                  if unit == "week"
         | 
| 162 | 
            +
                    n *= 7
         | 
| 163 | 
            +
                    unit = "day"
         | 
| 157 164 | 
             
                  end
         | 
| 158 165 | 
             
                  # dynamic method call
         | 
| 159 166 | 
             
                  return today.send "prev_#{unit}", n
         | 
| 160 167 | 
             
                end
         | 
| 161 168 |  | 
| 162 | 
            -
                def self.get_webmention_endpoint( | 
| 169 | 
            +
                def self.get_webmention_endpoint(uri)
         | 
| 163 170 | 
             
                  # log 'info', "Looking for webmention endpoint at #{uri}"
         | 
| 164 171 | 
             
                  begin
         | 
| 165 | 
            -
                    endpoint = Webmention::Client.supports_webmention?( | 
| 166 | 
            -
                     | 
| 167 | 
            -
                      log  | 
| 172 | 
            +
                    endpoint = Webmention::Client.supports_webmention?(uri)
         | 
| 173 | 
            +
                    unless endpoint
         | 
| 174 | 
            +
                      log "info", "Could not find a webmention endpoint at #{uri}"
         | 
| 168 175 | 
             
                    end
         | 
| 169 176 | 
             
                  rescue => e
         | 
| 170 | 
            -
                    log  | 
| 177 | 
            +
                    log "info", "Endpoint lookup failed for #{uri}: #{e.message}"
         | 
| 171 178 | 
             
                    endpoint = false
         | 
| 172 179 | 
             
                  end
         | 
| 173 180 | 
             
                  endpoint
         | 
| 174 181 | 
             
                end
         | 
| 175 182 |  | 
| 176 | 
            -
                def self.webmention( | 
| 177 | 
            -
                  log  | 
| 178 | 
            -
                  #return `curl -s -i -d \"source=#{source}&target=#{target}\" -o /dev/null #{endpoint}`
         | 
| 179 | 
            -
                  response = Webmention::Client.send_mention( | 
| 183 | 
            +
                def self.webmention(source, target, endpoint)
         | 
| 184 | 
            +
                  log "info", "Sending webmention of #{target} in #{source}"
         | 
| 185 | 
            +
                  # return `curl -s -i -d \"source=#{source}&target=#{target}\" -o /dev/null #{endpoint}`
         | 
| 186 | 
            +
                  response = Webmention::Client.send_mention(endpoint, source, target, true)
         | 
| 180 187 | 
             
                  if response
         | 
| 181 | 
            -
                    log  | 
| 188 | 
            +
                    log "info", "Webmention successful!"
         | 
| 182 189 | 
             
                  else
         | 
| 183 | 
            -
                    log  | 
| 190 | 
            +
                    log "info", "Webmention failed, but will remain queued for next time"
         | 
| 184 191 | 
             
                  end
         | 
| 185 192 | 
             
                  response
         | 
| 186 193 | 
             
                end
         | 
| 187 194 |  | 
| 188 | 
            -
                def self.get_template_contents( | 
| 189 | 
            -
                  if Jekyll::WebmentionIO | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 195 | 
            +
                def self.get_template_contents(template)
         | 
| 196 | 
            +
                  if Jekyll::WebmentionIO.config.dig("templates", template)
         | 
| 197 | 
            +
                    # Jekyll::WebmentionIO::log 'info', "Using custom #{template} template"
         | 
| 198 | 
            +
                    template_file = Jekyll::WebmentionIO.config["templates"][template]
         | 
| 199 | 
            +
                  else
         | 
| 200 | 
            +
                    # Jekyll::WebmentionIO::log 'info', "Using default #{template} template"
         | 
| 201 | 
            +
                    template_file = File.join(File.dirname(File.expand_path(__FILE__)), "templates/#{template}.html")
         | 
| 195 202 | 
             
                    end
         | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
             | 
| 203 | 
            +
                  # Jekyll::WebmentionIO::log 'info', "Template file: #{template_file}"
         | 
| 204 | 
            +
                  handler = File.open(template_file, "rb")
         | 
| 205 | 
            +
                  handler.read
         | 
| 199 206 | 
             
                end
         | 
| 200 | 
            -
             | 
| 207 | 
            +
             | 
| 201 208 | 
             
                # Connections
         | 
| 202 | 
            -
                def self.is_uri_ok( | 
| 209 | 
            +
                def self.is_uri_ok(uri)
         | 
| 203 210 | 
             
                  uri = URI.parse(URI.encode(uri))
         | 
| 204 211 | 
             
                  now = Time.now.to_s
         | 
| 205 | 
            -
                  bad_uris = open(@cache_files[ | 
| 212 | 
            +
                  bad_uris = open(@cache_files["bad_uris"]) { |f| YAML.safe_load(f) }
         | 
| 206 213 | 
             
                  if bad_uris.key? uri.host
         | 
| 207 | 
            -
                    last_checked = DateTime.parse( | 
| 208 | 
            -
                    cache_bad_uris_for = @config[ | 
| 214 | 
            +
                    last_checked = DateTime.parse(bad_uris[uri.host])
         | 
| 215 | 
            +
                    cache_bad_uris_for = @config["cache_bad_uris_for"] || 1 # in days
         | 
| 209 216 | 
             
                    recheck_at = last_checked.next_day(cache_bad_uris_for).to_s
         | 
| 210 217 | 
             
                    if recheck_at > now
         | 
| 211 218 | 
             
                      return false
         | 
| @@ -215,23 +222,23 @@ module Jekyll | |
| 215 222 | 
             
                end
         | 
| 216 223 |  | 
| 217 224 | 
             
                # Cache bad URLs for a bit
         | 
| 218 | 
            -
                def self.uri_is_not_ok( | 
| 219 | 
            -
                  cache_file = @cache_files[ | 
| 220 | 
            -
                  bad_uris = open(cache_file) { |f| YAML. | 
| 225 | 
            +
                def self.uri_is_not_ok(uri)
         | 
| 226 | 
            +
                  cache_file = @cache_files["bad_uris"]
         | 
| 227 | 
            +
                  bad_uris = open(cache_file) { |f| YAML.safe_load(f) }
         | 
| 221 228 | 
             
                  bad_uris[uri.host] = Time.now.to_s
         | 
| 222 | 
            -
                  File.open(cache_file,  | 
| 229 | 
            +
                  File.open(cache_file, "w") { |f| YAML.dump(bad_uris, f) }
         | 
| 223 230 | 
             
                end
         | 
| 224 | 
            -
             | 
| 231 | 
            +
             | 
| 225 232 | 
             
                def self.get_uri_source(uri, redirect_limit = 10, original_uri = false)
         | 
| 226 | 
            -
                  original_uri  | 
| 227 | 
            -
                   | 
| 233 | 
            +
                  original_uri ||= uri
         | 
| 234 | 
            +
                  unless is_uri_ok(uri)
         | 
| 228 235 | 
             
                    return false
         | 
| 229 236 | 
             
                  end
         | 
| 230 237 | 
             
                  if redirect_limit > 0
         | 
| 231 238 | 
             
                    uri = URI.parse(URI.encode(uri))
         | 
| 232 239 | 
             
                    http = Net::HTTP.new(uri.host, uri.port)
         | 
| 233 240 | 
             
                    http.read_timeout = 10
         | 
| 234 | 
            -
                    if uri.scheme ==  | 
| 241 | 
            +
                    if uri.scheme == "https"
         | 
| 235 242 | 
             
                      http.use_ssl = true
         | 
| 236 243 | 
             
                      http.ssl_version = :TLSv1
         | 
| 237 244 | 
             
                      http.ciphers = "ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:-LOW"
         | 
| @@ -241,45 +248,45 @@ module Jekyll | |
| 241 248 | 
             
                      request = Net::HTTP::Get.new(uri.request_uri)
         | 
| 242 249 | 
             
                      response = http.request(request)
         | 
| 243 250 | 
             
                    rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError, OpenSSL::SSL::SSLError => e
         | 
| 244 | 
            -
                      log  | 
| 251 | 
            +
                      log "warn", "Got an error checking #{original_uri}: #{e}"
         | 
| 245 252 | 
             
                      uri_is_not_ok(uri)
         | 
| 246 253 | 
             
                      return false
         | 
| 247 254 | 
             
                    end
         | 
| 248 255 | 
             
                    case response
         | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 252 | 
            -
             | 
| 253 | 
            -
             | 
| 254 | 
            -
             | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
             | 
| 256 | 
            +
                    when Net::HTTPSuccess then
         | 
| 257 | 
            +
                      return response.body.force_encoding("UTF-8")
         | 
| 258 | 
            +
                    when Net::HTTPRedirection then
         | 
| 259 | 
            +
                      redirect_to = URI.parse(URI.encode(response["location"]))
         | 
| 260 | 
            +
                      redirect_to = redirect_to.relative? ? "#{uri.scheme}://#{uri.host}" + redirect_to.to_s : redirect_to.to_s
         | 
| 261 | 
            +
                      return get_uri_source(redirect_to, redirect_limit - 1, original_uri)
         | 
| 262 | 
            +
                    else
         | 
| 263 | 
            +
                      uri_is_not_ok(uri)
         | 
| 264 | 
            +
                      return false
         | 
| 258 265 | 
             
                    end
         | 
| 259 266 | 
             
                  else
         | 
| 260 267 | 
             
                    if original_uri
         | 
| 261 | 
            -
                      log  | 
| 268 | 
            +
                      log "warn", "too many redirects for #{original_uri}"
         | 
| 262 269 | 
             
                    end
         | 
| 263 270 | 
             
                    uri_is_not_ok(uri)
         | 
| 264 271 | 
             
                    return false
         | 
| 265 272 | 
             
                  end
         | 
| 266 273 | 
             
                end
         | 
| 267 274 |  | 
| 268 | 
            -
                def self.log( | 
| 269 | 
            -
                  Jekyll.logger.method(type).call( | 
| 275 | 
            +
                def self.log(type, message)
         | 
| 276 | 
            +
                  Jekyll.logger.method(type).call("#{@logger_prefix} #{message}")
         | 
| 270 277 | 
             
                end
         | 
| 271 278 |  | 
| 272 279 | 
             
              end
         | 
| 273 280 | 
             
            end
         | 
| 274 281 |  | 
| 275 282 | 
             
            # Load all the bits
         | 
| 276 | 
            -
            Dir[File.dirname(__FILE__) +  | 
| 283 | 
            +
            Dir[File.dirname(__FILE__) + "/commands/*.rb"].each do |file|
         | 
| 277 284 | 
             
              require file
         | 
| 278 285 | 
             
            end
         | 
| 279 | 
            -
            Dir[File.dirname(__FILE__) +  | 
| 286 | 
            +
            Dir[File.dirname(__FILE__) + "/generators/*.rb"].each do |file|
         | 
| 280 287 | 
             
              require file
         | 
| 281 288 | 
             
            end
         | 
| 282 289 | 
             
            require "#{File.dirname(__FILE__)}/tags/_.rb"
         | 
| 283 | 
            -
            Dir[File.dirname(__FILE__) +  | 
| 284 | 
            -
              require file unless file.include?  | 
| 290 | 
            +
            Dir[File.dirname(__FILE__) + "/tags/*.rb"].each do |file|
         | 
| 291 | 
            +
              require file unless file.include? "_.rb"
         | 
| 285 292 | 
             
            end
         | 
    
        data/lib/jekyll-webmention_io.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
            require  | 
| 1 | 
            +
            require "jekyll"
         | 
| 2 | 
            +
            require "jekyll/webmention_io"
         | 
| 3 3 |  | 
| 4 | 
            -
            Jekyll::WebmentionIO | 
| 4 | 
            +
            Jekyll::WebmentionIO.bootstrap
         | 
    
        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: 2. | 
| 4 | 
            +
              version: 2.8.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: 2017-08- | 
| 11 | 
            +
            date: 2017-08-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: jekyll
         | 
| @@ -225,7 +225,7 @@ files: | |
| 225 225 | 
             
            - lib/jekyll/assets/liquid.js
         | 
| 226 226 | 
             
            - lib/jekyll/assets/webmention_counters.js
         | 
| 227 227 | 
             
            - lib/jekyll/assets/webmention_loader.js
         | 
| 228 | 
            -
            - lib/jekyll/assets/webmention_websocket.js
         | 
| 228 | 
            +
            - lib/jekyll/assets/webmention_websocket.js.disabled
         | 
| 229 229 | 
             
            - lib/jekyll/commands/webmention.rb
         | 
| 230 230 | 
             
            - lib/jekyll/generators/compile_js.rb
         | 
| 231 231 | 
             
            - lib/jekyll/generators/gather_webmentions.rb
         |