Sha256: 7342c94aff1dabdd34d7ee65c1523da1f770b5bef9c57d7c060e19b7c6abedc7

Contents?: true

Size: 1.52 KB

Versions: 20

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

module Capybara
  class Server
    class AnimationDisabler
      def self.selector_for(css_or_bool)
        case css_or_bool
        when String
          css_or_bool
        when true
          '*'
        else
          raise CapybaraError, 'Capybara.disable_animation supports either a String (the css selector to disable) or a boolean'
        end
      end

      def initialize(app)
        @app = app
        @disable_markup = format(DISABLE_MARKUP_TEMPLATE, selector: self.class.selector_for(Capybara.disable_animation))
      end

      def call(env)
        @status, @headers, @body = @app.call(env)
        return [@status, @headers, @body] unless html_content?

        response = Rack::Response.new([], @status, @headers)

        @body.each { |html| response.write insert_disable(html) }
        @body.close if @body.respond_to?(:close)

        response.finish
      end

    private

      attr_reader :disable_markup

      def html_content?
        /html/.match?(@headers['Content-Type'])
      end

      def insert_disable(html)
        html.sub(%r{(</head>)}, disable_markup + '\\1')
      end

      DISABLE_MARKUP_TEMPLATE = <<~HTML
        <script defer>(typeof jQuery !== 'undefined') && (jQuery.fx.off = true);</script>
        <style>
           %<selector>s, %<selector>s::before, %<selector>s::after {
             transition: none !important;
             animation-duration: 0s !important;
             animation-delay: 0s !important;
          }
        </style>
      HTML
    end
  end
end

Version data entries

20 entries across 17 versions & 3 rubygems

Version Path
tdiary-5.1.3 vendor/bundle/ruby/2.7.0/gems/capybara-3.33.0/lib/capybara/server/animation_disabler.rb
tdiary-5.1.3 vendor/bundle/ruby/2.6.0/gems/capybara-3.32.2/lib/capybara/server/animation_disabler.rb
capybara-3.33.0 lib/capybara/server/animation_disabler.rb
tdiary-5.1.2 vendor/bundle/ruby/2.7.0/gems/capybara-3.32.2/lib/capybara/server/animation_disabler.rb
tdiary-5.1.2 vendor/bundle/ruby/2.6.0/gems/capybara-3.29.0/lib/capybara/server/animation_disabler.rb
capybara-3.32.2 lib/capybara/server/animation_disabler.rb
capybara-3.32.1 lib/capybara/server/animation_disabler.rb
capybara-3.32.0 lib/capybara/server/animation_disabler.rb
tdiary-5.1.1 vendor/bundle/ruby/2.7.0/gems/capybara-3.31.0/lib/capybara/server/animation_disabler.rb
tdiary-5.1.1 vendor/bundle/ruby/2.6.0/gems/capybara-3.29.0/lib/capybara/server/animation_disabler.rb
capybara-3.31.0 lib/capybara/server/animation_disabler.rb
capybara-3.30.0 lib/capybara/server/animation_disabler.rb
tdiary-5.1.0 vendor/bundle/gems/capybara-3.29.0/lib/capybara/server/animation_disabler.rb
chatops-rpc-0.0.2 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/capybara-3.29.0/lib/capybara/server/animation_disabler.rb
chatops-rpc-0.0.1 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/capybara-3.29.0/lib/capybara/server/animation_disabler.rb
capybara-3.29.0 lib/capybara/server/animation_disabler.rb
capybara-3.28.0 lib/capybara/server/animation_disabler.rb
capybara-3.27.0 lib/capybara/server/animation_disabler.rb
capybara-3.26.0 lib/capybara/server/animation_disabler.rb
capybara-3.25.0 lib/capybara/server/animation_disabler.rb