jekyll-assets 3.0.7 → 3.0.8
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/Gemfile +2 -1
 - data/README.md +71 -8
 - data/Rakefile +1 -0
 - data/lib/jekyll-assets.rb +1 -2
 - data/lib/jekyll/assets/compressors/sassc.rb +32 -0
 - data/lib/jekyll/assets/compressors/scss.rb +30 -0
 - data/lib/jekyll/assets/compressors/uglify.rb +30 -0
 - data/lib/jekyll/assets/config.rb +1 -1
 - data/lib/jekyll/assets/default.rb +1 -2
 - data/lib/jekyll/assets/env.rb +1 -38
 - data/lib/jekyll/assets/extensible.rb +1 -0
 - data/lib/jekyll/assets/hook.rb +32 -79
 - data/lib/jekyll/assets/html.rb +1 -6
 - data/lib/jekyll/assets/patches/functions.rb +5 -7
 - data/lib/jekyll/assets/plugins/alternates.rb +79 -0
 - data/lib/jekyll/assets/plugins/font-awesome.rb +0 -1
 - data/lib/jekyll/assets/plugins/html/pic.rb +1 -1
 - data/lib/jekyll/assets/plugins/liquid.rb +1 -1
 - data/lib/jekyll/assets/plugins/prefixer.rb +1 -1
 - data/lib/jekyll/assets/plugins/proxy/magick.rb +10 -2
 - data/lib/jekyll/assets/plugins/searcher.rb +1 -1
 - data/lib/jekyll/assets/plugins/srcmap.rb +47 -0
 - data/lib/jekyll/assets/plugins/srcmap/css.rb +35 -0
 - data/lib/jekyll/assets/plugins/srcmap/javascript.rb +29 -0
 - data/lib/jekyll/assets/plugins/srcmap/writer.rb +187 -0
 - data/lib/jekyll/assets/tag.rb +2 -2
 - data/lib/jekyll/assets/utils.rb +35 -18
 - data/lib/jekyll/assets/version.rb +1 -1
 - data/lib/jekyll/assets/writer.rb +30 -33
 - metadata +11 -7
 - data/lib/jekyll/assets/map.rb +0 -57
 - data/lib/jekyll/assets/map/css.rb +0 -43
 - data/lib/jekyll/assets/map/javascript.rb +0 -43
 - data/lib/jekyll/assets/map/writer.rb +0 -192
 
    
        data/lib/jekyll/assets/html.rb
    CHANGED
    
    | 
         @@ -10,13 +10,9 @@ module Jekyll 
     | 
|
| 
       10 
10 
     | 
    
         
             
                class HTML < Extensible
         
     | 
| 
       11 
11 
     | 
    
         
             
                  attr_reader :doc
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                  # --
         
     | 
| 
       14 
     | 
    
         
            -
                  # rubocop:disable Style/RedundantReturn
         
     | 
| 
       15 
13 
     | 
    
         
             
                  # --
         
     | 
| 
       16 
14 
     | 
    
         
             
                  def self.skips
         
     | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
       18 
     | 
    
         
            -
                      inline path data pic
         
     | 
| 
       19 
     | 
    
         
            -
                    )
         
     | 
| 
      
 15 
     | 
    
         
            +
                    %i(inline path data pic)
         
     | 
| 
       20 
16 
     | 
    
         
             
                  end
         
     | 
| 
       21 
17 
     | 
    
         | 
| 
       22 
18 
     | 
    
         
             
                  # --
         
     | 
| 
         @@ -31,7 +27,6 @@ module Jekyll 
     | 
|
| 
       31 
27 
     | 
    
         
             
                  # Search for plugins and runners and then run them.
         
     | 
| 
       32 
28 
     | 
    
         
             
                  # @param [Sprockets::Asset] the current asset.
         
     | 
| 
       33 
29 
     | 
    
         
             
                  # @note look inside of plugins for examples.
         
     | 
| 
       34 
     | 
    
         
            -
                  # rubocop:enable Style/RedundantReturn
         
     | 
| 
       35 
30 
     | 
    
         
             
                  # @return [String] the final result.
         
     | 
| 
       36 
31 
     | 
    
         
             
                  # @param [Env] env the env.
         
     | 
| 
       37 
32 
     | 
    
         
             
                  # --
         
     | 
| 
         @@ -6,15 +6,13 @@ module Jekyll 
     | 
|
| 
       6 
6 
     | 
    
         
             
              module Assets
         
     | 
| 
       7 
7 
     | 
    
         
             
                module Patches
         
     | 
| 
       8 
8 
     | 
    
         
             
                  module SassFunctions
         
     | 
| 
      
 9 
     | 
    
         
            +
                    SprocketsString = ::Sprockets::Autoload::Sass::Script::String
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       9 
11 
     | 
    
         
             
                    def asset_path(path, options = {})
         
     | 
| 
       10 
12 
     | 
    
         
             
                      path, args = path.value.split(%r!\s+!, 2)
         
     | 
| 
       11 
     | 
    
         
            -
                      path, = URI.split(path) 
     | 
| 
       12 
     | 
    
         
            -
                      path = "#{path} #{args}"
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                      # We strip the query string, and the fragment.
         
     | 
| 
       15 
     | 
    
         
            -
                      path = sprockets_context.asset_path(path, options)
         
     | 
| 
       16 
     | 
    
         
            -
                      ::Sprockets::Autoload::Sass::Script::String.new \
         
     | 
| 
       17 
     | 
    
         
            -
                        path, :string
         
     | 
| 
      
 13 
     | 
    
         
            +
                      path, fragment = URI.split(path).values_at(5, 8)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      path = sprockets_context.asset_path("#{path} #{args}", options)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      SprocketsString.new [path, fragment].compact.join("#")
         
     | 
| 
       18 
16 
     | 
    
         
             
                    end
         
     | 
| 
       19 
17 
     | 
    
         
             
                  end
         
     | 
| 
       20 
18 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,79 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Frozen-string-literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright: 2012 - 2018 - MIT License
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Encoding: utf-8
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            if Jekyll::Assets::Utils.activate("crass")
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Jekyll
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Assets
         
     | 
| 
      
 8 
     | 
    
         
            +
                  module Plugins
         
     | 
| 
      
 9 
     | 
    
         
            +
                    NODER = %r!/\*\! @alternate \*/!
         
     | 
| 
      
 10 
     | 
    
         
            +
                    RTEST = %r!#{Regexp.union(%w(-ms- -webkit- -moz- -o-).freeze)}!
         
     | 
| 
      
 11 
     | 
    
         
            +
                    NODE1 = { node: :whitespace, pos: 28, raw: " " }.freeze
         
     | 
| 
      
 12 
     | 
    
         
            +
                    NODE2 = {
         
     | 
| 
      
 13 
     | 
    
         
            +
                      raw: "/*! @alternate */",
         
     | 
| 
      
 14 
     | 
    
         
            +
                      pos: 0, # It's ignored. @see Crass::Parser.stringify
         
     | 
| 
      
 15 
     | 
    
         
            +
                      value: "! @alternate ",
         
     | 
| 
      
 16 
     | 
    
         
            +
                      node: :comment,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    }.freeze
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    NODE3 = {
         
     | 
| 
      
 20 
     | 
    
         
            +
                      raw: "/* @alternate */",
         
     | 
| 
      
 21 
     | 
    
         
            +
                      pos: 0, # It's ignored. @see Crass::Parser.stringify
         
     | 
| 
      
 22 
     | 
    
         
            +
                      value: "@alternate ",
         
     | 
| 
      
 23 
     | 
    
         
            +
                      node: :comment,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    }.freeze
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    class Alternates
         
     | 
| 
      
 27 
     | 
    
         
            +
                      def call(input)
         
     | 
| 
      
 28 
     | 
    
         
            +
                        comp = input[:environment].asset_config[:compression]
         
     | 
| 
      
 29 
     | 
    
         
            +
                        data = Crass.parse(input[:data] || "", preserve_comments: true)
         
     | 
| 
      
 30 
     | 
    
         
            +
                        data.each do |v|
         
     | 
| 
      
 31 
     | 
    
         
            +
                          next unless v[:node] == :style_rule
         
     | 
| 
      
 32 
     | 
    
         
            +
                          v[:children] = v[:children].each_with_object([]) do |c, a|
         
     | 
| 
      
 33 
     | 
    
         
            +
                            if alternate?(c)
         
     | 
| 
      
 34 
     | 
    
         
            +
                              a << (comp ? NODE2 : NODE3)
         
     | 
| 
      
 35 
     | 
    
         
            +
                              a << NODE1
         
     | 
| 
      
 36 
     | 
    
         
            +
                            end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                            a << c
         
     | 
| 
      
 39 
     | 
    
         
            +
                          end
         
     | 
| 
      
 40 
     | 
    
         
            +
                        end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                        {
         
     | 
| 
      
 43 
     | 
    
         
            +
                          data: Crass::Parser.stringify(data, {
         
     | 
| 
      
 44 
     | 
    
         
            +
                            preserve_comments: true,
         
     | 
| 
      
 45 
     | 
    
         
            +
                          }),
         
     | 
| 
      
 46 
     | 
    
         
            +
                        }
         
     | 
| 
      
 47 
     | 
    
         
            +
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                      private
         
     | 
| 
      
 50 
     | 
    
         
            +
                      def alternate?(c)
         
     | 
| 
      
 51 
     | 
    
         
            +
                        c[:node] == :property && (
         
     | 
| 
      
 52 
     | 
    
         
            +
                          c[:name] =~ RTEST || c[:value] =~ RTEST
         
     | 
| 
      
 53 
     | 
    
         
            +
                        )
         
     | 
| 
      
 54 
     | 
    
         
            +
                      end
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    # --
         
     | 
| 
      
 58 
     | 
    
         
            +
                    # When compression is enabled we need to make sure to
         
     | 
| 
      
 59 
     | 
    
         
            +
                    # run an extra step, because when compression is being
         
     | 
| 
      
 60 
     | 
    
         
            +
                    # ran, we have to guard with /*! so we've to strip.
         
     | 
| 
      
 61 
     | 
    
         
            +
                    # --
         
     | 
| 
      
 62 
     | 
    
         
            +
                    Hook.register :asset, :after_compression do |_, o, t|
         
     | 
| 
      
 63 
     | 
    
         
            +
                      next unless t == "text/css"
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                      o.update({
         
     | 
| 
      
 66 
     | 
    
         
            +
                        # Remember we guard against compression.
         
     | 
| 
      
 67 
     | 
    
         
            +
                        data: o[:data].gsub(NODER, " #{NODE3[:raw]} "),
         
     | 
| 
      
 68 
     | 
    
         
            +
                      })
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    # --
         
     | 
| 
      
 72 
     | 
    
         
            +
                    Hook.register :env, :after_init, priority: 2 do
         
     | 
| 
      
 73 
     | 
    
         
            +
                      register_bundle_processor "text/css",
         
     | 
| 
      
 74 
     | 
    
         
            +
                        Alternates.new
         
     | 
| 
      
 75 
     | 
    
         
            +
                    end
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
              end
         
     | 
| 
      
 79 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -39,7 +39,7 @@ module Jekyll 
     | 
|
| 
       39 
39 
     | 
    
         
             
                  # Because we need to keep some support for 3.x we register it
         
     | 
| 
       40 
40 
     | 
    
         
             
                  #   two different ways depending on the type of Sprockets.
         
     | 
| 
       41 
41 
     | 
    
         
             
                  # --
         
     | 
| 
       42 
     | 
    
         
            -
                  if ! 
     | 
| 
      
 42 
     | 
    
         
            +
                  if !Utils.old_sprockets?
         
     | 
| 
       43 
43 
     | 
    
         
             
                    Liquid::TYPES.each do |k, v|
         
     | 
| 
       44 
44 
     | 
    
         
             
                      to = Utils.strip_secondary_content_type(k)
         
     | 
| 
       45 
45 
     | 
    
         
             
                      charset = Sprockets.mime_types[to][:charset]
         
     | 
| 
         @@ -18,7 +18,7 @@ Jekyll::Assets::Utils.javascript? do 
     | 
|
| 
       18 
18 
     | 
    
         
             
                  })
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                Jekyll::Assets::Hook.register :env, :after_init do
         
     | 
| 
      
 21 
     | 
    
         
            +
                Jekyll::Assets::Hook.register :env, :after_init, priority: 1 do
         
     | 
| 
       22 
22 
     | 
    
         
             
                  config = asset_config[:plugins][:css][:autoprefixer]
         
     | 
| 
       23 
23 
     | 
    
         
             
                  AutoprefixerRails.install(self, jekyll.safe ? config : {
         
     | 
| 
       24 
24 
     | 
    
         
             
                    # Your configuration here.
         
     | 
| 
         @@ -27,8 +27,12 @@ module Jekyll 
     | 
|
| 
       27 
27 
     | 
    
         
             
                      img = ::MiniMagick::Image.open(@file)
         
     | 
| 
       28 
28 
     | 
    
         
             
                      magick_format(img) if @args[:magick][:format]
         
     | 
| 
       29 
29 
     | 
    
         
             
                      img.combine_options do |c|
         
     | 
| 
       30 
     | 
    
         
            -
                         
     | 
| 
       31 
     | 
    
         
            -
                           
     | 
| 
      
 30 
     | 
    
         
            +
                        @args[:magick].keys.reject { |k| k == :format }.each do |k|
         
     | 
| 
      
 31 
     | 
    
         
            +
                          m = "magick_#{k}"
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                          if self.class.private_method_defined?(m)
         
     | 
| 
      
 34 
     | 
    
         
            +
                            method(m).arity == 2 ? send(m, img, c) : send(m, c)
         
     | 
| 
      
 35 
     | 
    
         
            +
                          end
         
     | 
| 
       32 
36 
     | 
    
         
             
                        end
         
     | 
| 
       33 
37 
     | 
    
         
             
                      end
         
     | 
| 
       34 
38 
     | 
    
         | 
| 
         @@ -125,6 +129,10 @@ module Jekyll 
     | 
|
| 
       125 
129 
     | 
    
         
             
                      width, height = img.width / 2, img.height / 2 if @args[:magick].key?(:half)
         
     | 
| 
       126 
130 
     | 
    
         
             
                      cmd.resize "#{width}x#{height}" if width && height
         
     | 
| 
       127 
131 
     | 
    
         
             
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                    alias magick_double magick_preset_resize
         
     | 
| 
      
 134 
     | 
    
         
            +
                    alias magick_quarter magick_preset_resize
         
     | 
| 
      
 135 
     | 
    
         
            +
                    alias magick_half magick_preset_resize
         
     | 
| 
       128 
136 
     | 
    
         
             
                  end
         
     | 
| 
       129 
137 
     | 
    
         
             
                end
         
     | 
| 
       130 
138 
     | 
    
         
             
              end
         
     | 
| 
         @@ -78,7 +78,7 @@ Jekyll::Assets::Hook.register :config, :before_merge do |c| 
     | 
|
| 
       78 
78 
     | 
    
         
             
            end
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
            # --
         
     | 
| 
       81 
     | 
    
         
            -
            Jekyll::Hooks.register  
     | 
| 
      
 81 
     | 
    
         
            +
            Jekyll::Hooks.register %i(pages documents posts), :post_render do |d|
         
     | 
| 
       82 
82 
     | 
    
         
             
              if d.site.sprockets.asset_config["plugins"]["img"]["searcher"]
         
     | 
| 
       83 
83 
     | 
    
         
             
                if d.output_ext == ".html"
         
     | 
| 
       84 
84 
     | 
    
         
             
                  Jekyll::Assets::Plugins::Searcher.new(d).run
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Frozen-string-literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright: 2012 - 2018 - MIT License
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Encoding: utf-8
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            unless Jekyll::Assets::Utils.old_sprockets?
         
     | 
| 
      
 6 
     | 
    
         
            +
              require_relative "srcmap/css"
         
     | 
| 
      
 7 
     | 
    
         
            +
              require_relative "srcmap/javascript"
         
     | 
| 
      
 8 
     | 
    
         
            +
              require_relative "srcmap/writer"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              module Jekyll
         
     | 
| 
      
 11 
     | 
    
         
            +
                module Assets
         
     | 
| 
      
 12 
     | 
    
         
            +
                  module Plugins
         
     | 
| 
      
 13 
     | 
    
         
            +
                    module SrcMap
         
     | 
| 
      
 14 
     | 
    
         
            +
                      NAME = "%<name>s.map"
         
     | 
| 
      
 15 
     | 
    
         
            +
                      DIR_NAME = "source-maps"
         
     | 
| 
      
 16 
     | 
    
         
            +
                      DIR = Pathutil.new(DIR_NAME)
         
     | 
| 
      
 17 
     | 
    
         
            +
                      EXT = ".map"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 20 
     | 
    
         
            +
                      # @return [String] the map name.
         
     | 
| 
      
 21 
     | 
    
         
            +
                      # Take the path, and attach the map extension.
         
     | 
| 
      
 22 
     | 
    
         
            +
                      # @note this just saves logic.
         
     | 
| 
      
 23 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 24 
     | 
    
         
            +
                      def self.map_path(env:, asset:)
         
     | 
| 
      
 25 
     | 
    
         
            +
                        [
         
     | 
| 
      
 26 
     | 
    
         
            +
                          path({
         
     | 
| 
      
 27 
     | 
    
         
            +
                            asset: asset,
         
     | 
| 
      
 28 
     | 
    
         
            +
                            env: env,
         
     | 
| 
      
 29 
     | 
    
         
            +
                          }),
         
     | 
| 
      
 30 
     | 
    
         
            +
                          EXT,
         
     | 
| 
      
 31 
     | 
    
         
            +
                        ].join
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 35 
     | 
    
         
            +
                      # @note this is used for anything in source-maps.
         
     | 
| 
      
 36 
     | 
    
         
            +
                      # Strip the filename and return a relative sourcemap path.
         
     | 
| 
      
 37 
     | 
    
         
            +
                      # @return [Pathutil] the path.
         
     | 
| 
      
 38 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 39 
     | 
    
         
            +
                      def self.path(env:, asset:)
         
     | 
| 
      
 40 
     | 
    
         
            +
                        DIR.join(env.strip_paths(asset.is_a?(Sprockets::Asset) ?
         
     | 
| 
      
 41 
     | 
    
         
            +
                          asset.filename : asset))
         
     | 
| 
      
 42 
     | 
    
         
            +
                      end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Frozen-string-literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright: 2012 - 2018 - MIT License
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Encoding: utf-8
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Jekyll
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Assets
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Plugins
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Hook.register :asset, :after_compression, priority: 3 do |i, o, t|
         
     | 
| 
      
 9 
     | 
    
         
            +
                    next unless t == "text/css"
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    env = i[:environment]
         
     | 
| 
      
 12 
     | 
    
         
            +
                    asset = env.find_asset!(i[:filename], pipeline: :source)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    path = asset.filename.sub(env.jekyll.in_source_dir + "/", "")
         
     | 
| 
      
 14 
     | 
    
         
            +
                    url = SrcMap.map_path(asset: asset, env: env)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    url = env.prefix_url(url)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    o.update({
         
     | 
| 
      
 18 
     | 
    
         
            +
                      data: <<~CSS
         
     | 
| 
      
 19 
     | 
    
         
            +
                        #{o[:data].strip}
         
     | 
| 
      
 20 
     | 
    
         
            +
                        /*# sourceMappingURL=#{url} */
         
     | 
| 
      
 21 
     | 
    
         
            +
                        /*# sourceURL=#{path} */
         
     | 
| 
      
 22 
     | 
    
         
            +
                      CSS
         
     | 
| 
      
 23 
     | 
    
         
            +
                    })
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  # --
         
     | 
| 
      
 27 
     | 
    
         
            +
                  Hook.register :env, :after_init, priority: 1 do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    next if asset_config[:compression]
         
     | 
| 
      
 29 
     | 
    
         
            +
                    if asset_config[:source_maps]
         
     | 
| 
      
 30 
     | 
    
         
            +
                      then asset_config[:compression] = true
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Frozen-string-literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright: 2012 - 2018 - MIT License
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Encoding: utf-8
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require "sprockets"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Jekyll
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Assets
         
     | 
| 
      
 9 
     | 
    
         
            +
                module Plugins
         
     | 
| 
      
 10 
     | 
    
         
            +
                  Hook.register :asset, :after_compression, priority: 3 do |i, o, t|
         
     | 
| 
      
 11 
     | 
    
         
            +
                    next unless t == "application/javascript"
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    env = i[:environment]
         
     | 
| 
      
 14 
     | 
    
         
            +
                    asset = env.find_asset!(i[:filename], pipeline: :source)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    path = asset.filename.sub(env.jekyll.in_source_dir + "/", "")
         
     | 
| 
      
 16 
     | 
    
         
            +
                    url = SrcMap.map_path(asset: asset, env: env)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    url = env.prefix_url(url)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    o.update({
         
     | 
| 
      
 20 
     | 
    
         
            +
                      data: <<~TXT
         
     | 
| 
      
 21 
     | 
    
         
            +
                        #{o[:data].strip}
         
     | 
| 
      
 22 
     | 
    
         
            +
                        //# sourceMappingURL=#{url}
         
     | 
| 
      
 23 
     | 
    
         
            +
                        //# sourceURL=#{path}
         
     | 
| 
      
 24 
     | 
    
         
            +
                      TXT
         
     | 
| 
      
 25 
     | 
    
         
            +
                    })
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,187 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Frozen-string-literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright: 2012 - 2018 - MIT License
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Encoding: utf-8
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require "sprockets"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "pathutil"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            module Jekyll
         
     | 
| 
      
 9 
     | 
    
         
            +
              module Assets
         
     | 
| 
      
 10 
     | 
    
         
            +
                module Plugins
         
     | 
| 
      
 11 
     | 
    
         
            +
                  module SrcMap
         
     | 
| 
      
 12 
     | 
    
         
            +
                    class Writer < Sprockets::Exporters::Base
         
     | 
| 
      
 13 
     | 
    
         
            +
                      alias env environment
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                      def skip?(_)
         
     | 
| 
      
 16 
     | 
    
         
            +
                        !env.asset_config[:source_maps] ||
         
     | 
| 
      
 17 
     | 
    
         
            +
                          !asset.metadata[:map]
         
     | 
| 
      
 18 
     | 
    
         
            +
                      end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 21 
     | 
    
         
            +
                      def call
         
     | 
| 
      
 22 
     | 
    
         
            +
                        clean_file!
         
     | 
| 
      
 23 
     | 
    
         
            +
                        clean_sources!
         
     | 
| 
      
 24 
     | 
    
         
            +
                        write_map!
         
     | 
| 
      
 25 
     | 
    
         
            +
                        write_src!
         
     | 
| 
      
 26 
     | 
    
         
            +
                      end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 29 
     | 
    
         
            +
                      # Provides our custom manifest key, full of files.
         
     | 
| 
      
 30 
     | 
    
         
            +
                      # @note We push everything from the file we are writing to the maps.
         
     | 
| 
      
 31 
     | 
    
         
            +
                      # @return [Array<String>]
         
     | 
| 
      
 32 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 33 
     | 
    
         
            +
                      def files
         
     | 
| 
      
 34 
     | 
    
         
            +
                        @files ||= begin
         
     | 
| 
      
 35 
     | 
    
         
            +
                          key = "sourceMapFiles"
         
     | 
| 
      
 36 
     | 
    
         
            +
                          out = env.manifest.data[key] ||= []
         
     | 
| 
      
 37 
     | 
    
         
            +
                          unless Manifest.keep_keys.include?(key)
         
     | 
| 
      
 38 
     | 
    
         
            +
                            Manifest.keep_keys << key
         
     | 
| 
      
 39 
     | 
    
         
            +
                          end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                          out
         
     | 
| 
      
 42 
     | 
    
         
            +
                        end
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 46 
     | 
    
         
            +
                      # @return [HashWithIndifferentAccess]
         
     | 
| 
      
 47 
     | 
    
         
            +
                      # @note do not modify the original map.
         
     | 
| 
      
 48 
     | 
    
         
            +
                      # Provides a modifible SourceMap
         
     | 
| 
      
 49 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 50 
     | 
    
         
            +
                      private
         
     | 
| 
      
 51 
     | 
    
         
            +
                      def map
         
     | 
| 
      
 52 
     | 
    
         
            +
                        @map ||= asset.metadata[:map]
         
     | 
| 
      
 53 
     | 
    
         
            +
                          .with_indifferent_access
         
     | 
| 
      
 54 
     | 
    
         
            +
                      end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 57 
     | 
    
         
            +
                      # @return [HashWithIndifferentAccess]
         
     | 
| 
      
 58 
     | 
    
         
            +
                      # @note this is frozen so you can't modify.
         
     | 
| 
      
 59 
     | 
    
         
            +
                      # Provides an unmodifiable SourceMap
         
     | 
| 
      
 60 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 61 
     | 
    
         
            +
                      private
         
     | 
| 
      
 62 
     | 
    
         
            +
                      def original_map
         
     | 
| 
      
 63 
     | 
    
         
            +
                        @original_map ||= asset.metadata[:map]
         
     | 
| 
      
 64 
     | 
    
         
            +
                          .with_indifferent_access.freeze
         
     | 
| 
      
 65 
     | 
    
         
            +
                      end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 68 
     | 
    
         
            +
                      # @note something like _assets/*
         
     | 
| 
      
 69 
     | 
    
         
            +
                      # Makes sure that the name sits in the asset path.
         
     | 
| 
      
 70 
     | 
    
         
            +
                      # @return [String]
         
     | 
| 
      
 71 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 72 
     | 
    
         
            +
                      private
         
     | 
| 
      
 73 
     | 
    
         
            +
                      def clean_file!
         
     | 
| 
      
 74 
     | 
    
         
            +
                        map[:file] = base.join(map[:file]).to_s
         
     | 
| 
      
 75 
     | 
    
         
            +
                      end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 78 
     | 
    
         
            +
                      private
         
     | 
| 
      
 79 
     | 
    
         
            +
                      def clean_sources!
         
     | 
| 
      
 80 
     | 
    
         
            +
                        if map[:sources]
         
     | 
| 
      
 81 
     | 
    
         
            +
                          then map[:sources] = map[:sources].map do |v|
         
     | 
| 
      
 82 
     | 
    
         
            +
                            base.join(strip_src(v))
         
     | 
| 
      
 83 
     | 
    
         
            +
                          end
         
     | 
| 
      
 84 
     | 
    
         
            +
                        else
         
     | 
| 
      
 85 
     | 
    
         
            +
                          map[:sections].each do |v|
         
     | 
| 
      
 86 
     | 
    
         
            +
                            v[:map][:sources] = v[:map][:sources].map do |vv|
         
     | 
| 
      
 87 
     | 
    
         
            +
                              base.join(strip_src(vv))
         
     | 
| 
      
 88 
     | 
    
         
            +
                            end
         
     | 
| 
      
 89 
     | 
    
         
            +
                          end
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                        map
         
     | 
| 
      
 93 
     | 
    
         
            +
                      end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 96 
     | 
    
         
            +
                      private
         
     | 
| 
      
 97 
     | 
    
         
            +
                      def strip_src(path)
         
     | 
| 
      
 98 
     | 
    
         
            +
                        path = Pathutil.new(path)
         
     | 
| 
      
 99 
     | 
    
         
            +
                        base = path.basename.gsub(%r!\.source!, "")
         
     | 
| 
      
 100 
     | 
    
         
            +
                        return path.dirname.join(base).to_s unless path.dirname == "."
         
     | 
| 
      
 101 
     | 
    
         
            +
                        base.to_s if path.dirname == "."
         
     | 
| 
      
 102 
     | 
    
         
            +
                      end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 105 
     | 
    
         
            +
                      # @note we shim this on name.
         
     | 
| 
      
 106 
     | 
    
         
            +
                      # Privates the base directory in the source.
         
     | 
| 
      
 107 
     | 
    
         
            +
                      # @return [String]
         
     | 
| 
      
 108 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 109 
     | 
    
         
            +
                      private
         
     | 
| 
      
 110 
     | 
    
         
            +
                      def base
         
     | 
| 
      
 111 
     | 
    
         
            +
                        Pathutil.new(asset.filename.sub(env.jekyll
         
     | 
| 
      
 112 
     | 
    
         
            +
                          .in_source_dir + "/", "")).dirname
         
     | 
| 
      
 113 
     | 
    
         
            +
                      end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 116 
     | 
    
         
            +
                      # rubocop:disable Layout/BlockEndNewline
         
     | 
| 
      
 117 
     | 
    
         
            +
                      # rubocop:disable Layout/MultilineBlockLayout
         
     | 
| 
      
 118 
     | 
    
         
            +
                      # rubocop:disable Style/BlockDelimiters
         
     | 
| 
      
 119 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 120 
     | 
    
         
            +
                      private
         
     | 
| 
      
 121 
     | 
    
         
            +
                      def map_files
         
     | 
| 
      
 122 
     | 
    
         
            +
                        return original_map[:sources] if original_map.key?(:sources)
         
     | 
| 
      
 123 
     | 
    
         
            +
                        original_map[:sections].map { |v| v[:map][:sources] \
         
     | 
| 
      
 124 
     | 
    
         
            +
                          if v.key?(:map) }.flatten.compact
         
     | 
| 
      
 125 
     | 
    
         
            +
                      end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 128 
     | 
    
         
            +
                      # rubocop:enable Layout/BlockEndNewline
         
     | 
| 
      
 129 
     | 
    
         
            +
                      # rubocop:enable Layout/MultilineBlockLayout
         
     | 
| 
      
 130 
     | 
    
         
            +
                      # rubocop:enable Style/BlockDelimiters
         
     | 
| 
      
 131 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 132 
     | 
    
         
            +
                      private
         
     | 
| 
      
 133 
     | 
    
         
            +
                      def write_map!
         
     | 
| 
      
 134 
     | 
    
         
            +
                        path = SrcMap.map_path(asset: asset, env: env)
         
     | 
| 
      
 135 
     | 
    
         
            +
                        write(env.in_dest_dir(path)) do |f|
         
     | 
| 
      
 136 
     | 
    
         
            +
                          files.push(path)
         
     | 
| 
      
 137 
     | 
    
         
            +
                          f.write(map.to_json)
         
     | 
| 
      
 138 
     | 
    
         
            +
                          files.uniq!
         
     | 
| 
      
 139 
     | 
    
         
            +
                        end
         
     | 
| 
      
 140 
     | 
    
         
            +
                      end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 143 
     | 
    
         
            +
                      private
         
     | 
| 
      
 144 
     | 
    
         
            +
                      def strip_base(asset)
         
     | 
| 
      
 145 
     | 
    
         
            +
                        return asset if asset.is_a?(Sprockets::Asset)
         
     | 
| 
      
 146 
     | 
    
         
            +
                        asset.sub(base + "/", "")
         
     | 
| 
      
 147 
     | 
    
         
            +
                      end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 150 
     | 
    
         
            +
                      private
         
     | 
| 
      
 151 
     | 
    
         
            +
                      def write_src!
         
     | 
| 
      
 152 
     | 
    
         
            +
                        [asset_path, map_files].flatten.compact.uniq.each do |v|
         
     | 
| 
      
 153 
     | 
    
         
            +
                          next unless (v = env.find_asset(strip_base(v), pipeline: :source))
         
     | 
| 
      
 154 
     | 
    
         
            +
                          path = map_path(v.filename)
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                          write(environment.in_dest_dir(path)) do |f|
         
     | 
| 
      
 157 
     | 
    
         
            +
                            f.write(v.source)
         
     | 
| 
      
 158 
     | 
    
         
            +
                            files.push(path.to_s)
         
     | 
| 
      
 159 
     | 
    
         
            +
                              .uniq!
         
     | 
| 
      
 160 
     | 
    
         
            +
                          end
         
     | 
| 
      
 161 
     | 
    
         
            +
                        end
         
     | 
| 
      
 162 
     | 
    
         
            +
                      end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 165 
     | 
    
         
            +
                      private
         
     | 
| 
      
 166 
     | 
    
         
            +
                      def asset_path
         
     | 
| 
      
 167 
     | 
    
         
            +
                        base.join(env.strip_paths(@asset.filename)).to_s
         
     | 
| 
      
 168 
     | 
    
         
            +
                      end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                      # --
         
     | 
| 
      
 171 
     | 
    
         
            +
                      private
         
     | 
| 
      
 172 
     | 
    
         
            +
                      def map_path(file)
         
     | 
| 
      
 173 
     | 
    
         
            +
                        asset = base.join(env.strip_paths(file))
         
     | 
| 
      
 174 
     | 
    
         
            +
                        SrcMap.path({
         
     | 
| 
      
 175 
     | 
    
         
            +
                          asset: asset, env: env
         
     | 
| 
      
 176 
     | 
    
         
            +
                        })
         
     | 
| 
      
 177 
     | 
    
         
            +
                      end
         
     | 
| 
      
 178 
     | 
    
         
            +
                    end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                    # --
         
     | 
| 
      
 181 
     | 
    
         
            +
                    Hook.register :env, :after_init, priority: 3 do
         
     | 
| 
      
 182 
     | 
    
         
            +
                      register_exporter("*/*", Writer)
         
     | 
| 
      
 183 
     | 
    
         
            +
                    end
         
     | 
| 
      
 184 
     | 
    
         
            +
                  end
         
     | 
| 
      
 185 
     | 
    
         
            +
                end
         
     | 
| 
      
 186 
     | 
    
         
            +
              end
         
     | 
| 
      
 187 
     | 
    
         
            +
            end
         
     |